diff options
Diffstat (limited to 'cpp/src/IceGrid/RegistryI.cpp')
-rw-r--r-- | cpp/src/IceGrid/RegistryI.cpp | 197 |
1 files changed, 42 insertions, 155 deletions
diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index 3db65ada913..ad81676d9b1 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -17,7 +17,7 @@ #include <IceStorm/Service.h> #include <IceSSL/IceSSL.h> #include <Glacier2/PermissionsVerifier.h> -#include <Glacier2/CryptPermissionsVerifierPlugin.h> +#include <Glacier2/NullPermissionsVerifier.h> #include <IceGrid/TraceLevels.h> #include <IceGrid/Database.h> @@ -50,27 +50,6 @@ using namespace IceGrid; namespace { -class NullPermissionsVerifierI : public Glacier2::PermissionsVerifier -{ -public: - - bool checkPermissions(const string& /*userId*/, const string& /*password*/, string&, const Current&) const - { - return true; - } -}; - -class NullSSLPermissionsVerifierI : public Glacier2::SSLPermissionsVerifier -{ -public: - - virtual bool - authorize(const Glacier2::SSLInfo&, std::string&, const Ice::Current&) const - { - return true; - } -}; - class DefaultServantLocator : public Ice::ServantLocator { public: @@ -522,7 +501,6 @@ RegistryI::startImpl() _wellKnownObjects->addEndpoint("Server", _serverAdapter->createDirectProxy(dummy)); _wellKnownObjects->addEndpoint("Internal", _registryAdapter->createDirectProxy(dummy)); - setupNullPermissionsVerifier(); if(!setupUserAccountMapper()) { return false; @@ -549,6 +527,14 @@ RegistryI::startImpl() _clientAdapter->addServantLocator(_servantManager, ""); _serverAdapter->addServantLocator(new DefaultServantLocator(adminCallbackRouter), ""); + vector<string> verifierProperties; + verifierProperties.push_back("IceGrid.Registry.PermissionsVerifier"); + verifierProperties.push_back("IceGrid.Registry.SSLPermissionsVerifier"); + verifierProperties.push_back("IceGrid.Registry.AdminPermissionsVerifier"); + verifierProperties.push_back("IceGrid.Registry.AdminSSLPermissionsVerifier"); + + Glacier2Internal::setupNullPermissionsVerifier(_communicator, _instanceName, verifierProperties); + ObjectAdapterPtr sessionAdpt = setupClientSessionFactory(internalLocator); ObjectAdapterPtr admSessionAdpt = setupAdminSessionFactory(serverAdminRouter, internalLocator); @@ -706,22 +692,6 @@ RegistryI::setupInternalRegistry() return registry; } -void -RegistryI::setupNullPermissionsVerifier() -{ - Identity nullPermVerifId; - nullPermVerifId.category = _instanceName; - nullPermVerifId.name = "NullPermissionsVerifier"; - _nullPermissionsVerifier = Glacier2::PermissionsVerifierPrx::uncheckedCast( - _registryAdapter->add(new NullPermissionsVerifierI(), nullPermVerifId)); - - Identity nullSSLPermVerifId; - nullSSLPermVerifId.category = _instanceName; - nullSSLPermVerifId.name = "NullSSLPermissionsVerifier"; - _nullSSLPermissionsVerifier = Glacier2::SSLPermissionsVerifierPrx::uncheckedCast( - _registryAdapter->add(new NullSSLPermissionsVerifierI(), nullSSLPermVerifId)); -} - bool RegistryI::setupUserAccountMapper() { @@ -796,10 +766,7 @@ RegistryI::setupClientSessionFactory(const IceGrid::LocatorPrx& locator) _wellKnownObjects->addEndpoint("SessionManager", adapter->createDirectProxy(dummy)); } - _clientVerifier = getPermissionsVerifier(locator, - "IceGrid.Registry.PermissionsVerifier", - properties->getProperty("IceGrid.Registry.CryptPasswords")); - + _clientVerifier = getPermissionsVerifier(locator, "IceGrid.Registry.PermissionsVerifier"); _sslClientVerifier = getSSLPermissionsVerifier(locator, "IceGrid.Registry.SSLPermissionsVerifier"); return adapter; @@ -850,10 +817,7 @@ RegistryI::setupAdminSessionFactory(const Ice::ObjectPtr& router, const IceGrid: _wellKnownObjects->addEndpoint("AdminSessionManager", adapter->createDirectProxy(dummy)); } - _adminVerifier = getPermissionsVerifier(locator, - "IceGrid.Registry.AdminPermissionsVerifier", - properties->getProperty("IceGrid.Registry.AdminCryptPasswords")); - + _adminVerifier = getPermissionsVerifier(locator, "IceGrid.Registry.AdminPermissionsVerifier"); _sslAdminVerifier = getSSLPermissionsVerifier(locator, "IceGrid.Registry.AdminSSLPermissionsVerifier"); return adapter; @@ -1203,81 +1167,30 @@ RegistryI::getLocator() Glacier2::PermissionsVerifierPrx RegistryI::getPermissionsVerifier(const IceGrid::LocatorPrx& locator, - const string& verifierProperty, - const string& passwordsProperty) + const string& verifierProperty) { // - // Get the permissions verifier, or create a default one if no - // verifier is specified. + // Get the permissions verifier // - ObjectPrx verifier; - string verifierPropertyValue = _communicator->getProperties()->getProperty(verifierProperty); - if(!verifierPropertyValue.empty()) + + try { - try - { - try - { - verifier = _communicator->propertyToProxy(verifierProperty); - } - catch(const ProxyParseException&) - { - // - // Check if the property is just the identity of the null permissions verifier - // (the identity might contain spaces which would prevent it to be parsed as a - // proxy). - // - if(_communicator->stringToIdentity(verifierPropertyValue) == - _nullPermissionsVerifier->ice_getIdentity()) - { - verifier = _communicator->stringToProxy("\"" + verifierPropertyValue + "\""); - } - } - - if(!verifier) - { - Error out(_communicator->getLogger()); - out << "permissions verifier `" + verifierPropertyValue + "' is invalid"; - return 0; - } - assert(_nullPermissionsVerifier); - - if(verifier->ice_getIdentity() == _nullPermissionsVerifier->ice_getIdentity()) - { - verifier = _nullPermissionsVerifier; - } - } - catch(const LocalException& ex) - { - Error out(_communicator->getLogger()); - out << "permissions verifier `" + verifierPropertyValue + "' is invalid:\n" << ex; - return 0; - } + verifier = _communicator->propertyToProxy(verifierProperty); } - else if(!passwordsProperty.empty()) + catch(const LocalException& ex) { - try - { - Glacier2::CryptPermissionsVerifierPluginPtr plugin = - Glacier2::CryptPermissionsVerifierPluginPtr::dynamicCast( - _communicator->getPluginManager()->getPlugin("CryptPermissionsVerifier")); - verifier = _registryAdapter->addWithUUID(plugin->create(passwordsProperty)); - } - catch(const Ice::NotRegisteredException&) - { - Error out(_communicator->getLogger()); - out << "CryptPermissionsVerifier plugin has not been initialized"; - return 0; - } + Error out(_communicator->getLogger()); + out << "permissions verifier `" << _communicator->getProperties()->getProperty(verifierProperty) + << "' is invalid:\n" << ex; + return 0; } - else + + if(!verifier) { return 0; } - assert(verifier); - Glacier2::PermissionsVerifierPrx verifierPrx; try { @@ -1291,7 +1204,8 @@ RegistryI::getPermissionsVerifier(const IceGrid::LocatorPrx& locator, if(!verifierPrx) { Error out(_communicator->getLogger()); - out << "permissions verifier `" + verifierProperty + "' is invalid"; + out << "permissions verifier `" << _communicator->getProperties()->getProperty(verifierProperty) + << "' is invalid"; return 0; } } @@ -1300,7 +1214,8 @@ RegistryI::getPermissionsVerifier(const IceGrid::LocatorPrx& locator, if(!_nowarn) { Warning out(_communicator->getLogger()); - out << "couldn't contact permissions verifier `" + verifierProperty + "':\n" << ex; + out << "couldn't contact permissions verifier `" + << _communicator->getProperties()->getProperty(verifierProperty) << "':\n" << ex; } verifierPrx = Glacier2::PermissionsVerifierPrx::uncheckedCast(verifier->ice_locator(locator)); } @@ -1315,49 +1230,19 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s // verifier is specified. // ObjectPrx verifier; - string verifierPropertyValue = _communicator->getProperties()->getProperty(verifierProperty); - if(!verifierPropertyValue.empty()) + try { - try - { - try - { - verifier = _communicator->propertyToProxy(verifierProperty); - } - catch(const ProxyParseException&) - { - // - // Check if the property is just the identity of the null permissions verifier - // (the identity might contain spaces which would prevent it to be parsed as a - // proxy). - // - if(_communicator->stringToIdentity(verifierPropertyValue) == - _nullSSLPermissionsVerifier->ice_getIdentity()) - { - verifier = _communicator->stringToProxy("\"" + verifierPropertyValue + "\""); - } - } - - if(!verifier) - { - Error out(_communicator->getLogger()); - out << "ssl permissions verifier `" + verifierPropertyValue + "' is invalid"; - return 0; - } - assert(_nullSSLPermissionsVerifier); - if(verifier->ice_getIdentity() == _nullSSLPermissionsVerifier->ice_getIdentity()) - { - verifier = _nullSSLPermissionsVerifier; - } - } - catch(const LocalException& ex) - { - Error out(_communicator->getLogger()); - out << "ssl permissions verifier `" + verifierPropertyValue + "' is invalid:\n" << ex; - return 0; - } + verifier = _communicator->propertyToProxy(verifierProperty); } - else + catch(const LocalException& ex) + { + Error out(_communicator->getLogger()); + out << "ssl permissions verifier `" << _communicator->getProperties()->getProperty(verifierProperty) + << "' is invalid:\n" << ex; + return 0; + } + + if(!verifier) { return 0; } @@ -1375,7 +1260,8 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s if(!verifierPrx) { Error out(_communicator->getLogger()); - out << "ssl permissions verifier `" + verifierProperty + "' is invalid"; + out << "ssl permissions verifier `" << _communicator->getProperties()->getProperty(verifierProperty) + << "' is invalid"; return 0; } } @@ -1384,7 +1270,8 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s if(!_nowarn) { Warning out(_communicator->getLogger()); - out << "couldn't contact ssl permissions verifier `" + verifierProperty + "':\n" << ex; + out << "couldn't contact ssl permissions verifier `" + << _communicator->getProperties()->getProperty(verifierProperty) << "':\n" << ex; } verifierPrx = Glacier2::SSLPermissionsVerifierPrx::uncheckedCast(verifier->ice_locator(locator)); } |