diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-05-22 16:30:01 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-05-22 16:30:01 +0000 |
commit | 67b1e7d79f390dd5098aac0a226cc71775f4904d (patch) | |
tree | 81da7fc9bff0612eea851618a066c3463420e4ef /cpp | |
parent | Added session servant locator to secure access to session servants. (diff) | |
download | ice-67b1e7d79f390dd5098aac0a226cc71775f4904d.tar.bz2 ice-67b1e7d79f390dd5098aac0a226cc71775f4904d.tar.xz ice-67b1e7d79f390dd5098aac0a226cc71775f4904d.zip |
Amin object is now also per-session
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/IceGrid/AdminSessionI.cpp | 20 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdminSessionI.h | 6 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 6 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.h | 3 | ||||
-rw-r--r-- | cpp/src/IceGrid/RegistryI.cpp | 17 | ||||
-rw-r--r-- | cpp/src/IceGrid/RegistryI.h | 1 |
6 files changed, 35 insertions, 18 deletions
diff --git a/cpp/src/IceGrid/AdminSessionI.cpp b/cpp/src/IceGrid/AdminSessionI.cpp index 32b9ef5e70f..e755a8e037d 100644 --- a/cpp/src/IceGrid/AdminSessionI.cpp +++ b/cpp/src/IceGrid/AdminSessionI.cpp @@ -17,13 +17,14 @@ using namespace std; using namespace IceGrid; AdminSessionI::AdminSessionI(const string& id, - const DatabasePtr& database, + const DatabasePtr& db, int timeout, const RegistryObserverTopicPtr& registryObserverTopic, const NodeObserverTopicPtr& nodeObserverTopic) : - BaseSessionI(id, "admin", database, timeout), + BaseSessionI(id, "admin", db, timeout), _registryObserverTopic(registryObserverTopic), _nodeObserverTopic(nodeObserverTopic), + _admin(AdminPrx::uncheckedCast(db->getCommunicator()->stringToProxy(db->getInstanceName() + "/Admin"))), _updating(false) { } @@ -35,8 +36,7 @@ AdminSessionI::~AdminSessionI() AdminPrx AdminSessionI::getAdmin(const Ice::Current& current) const { - return AdminPrx::uncheckedCast( - current.adapter->getCommunicator()->stringToProxy(_database->getInstanceName() + "/Admin")); + return _admin; } void @@ -247,6 +247,13 @@ AdminSessionI::destroy(const Ice::Current& current) } } +void +AdminSessionI::setServantLocator(const SessionServantLocatorIPtr& servantLocator, const AdminPrx& admin) +{ + BaseSessionI::setServantLocator(servantLocator); + const_cast<AdminPrx&>(_admin) = admin; +} + AdminSessionManagerI::AdminSessionManagerI(const DatabasePtr& database, int sessionTimeout, const RegistryObserverTopicPtr& regTopic, @@ -302,6 +309,7 @@ AdminSSLSessionManagerI::create(const Glacier2::SSLInfo& info, const Glacier2::S } } - AdminSessionIPtr s = new AdminSessionI(userDN, _database, _timeout, _registryObserverTopic, _nodeObserverTopic); - return Glacier2::SessionPrx::uncheckedCast(current.adapter->addWithUUID(s)); + AdminSessionIPtr session; + session = new AdminSessionI(userDN, _database, _timeout, _registryObserverTopic, _nodeObserverTopic); + return Glacier2::SessionPrx::uncheckedCast(current.adapter->addWithUUID(session)); } diff --git a/cpp/src/IceGrid/AdminSessionI.h b/cpp/src/IceGrid/AdminSessionI.h index 2cac2bf40a0..44ac5ed9b24 100644 --- a/cpp/src/IceGrid/AdminSessionI.h +++ b/cpp/src/IceGrid/AdminSessionI.h @@ -38,11 +38,14 @@ public: virtual void destroy(const Ice::Current&); + void setServantLocator(const SessionServantLocatorIPtr&, const AdminPrx&); + private: const RegistryObserverTopicPtr _registryObserverTopic; const NodeObserverTopicPtr _nodeObserverTopic; - + const AdminPrx _admin; + RegistryObserverPrx _registryObserver; NodeObserverPrx _nodeObserver; bool _updating; @@ -72,7 +75,6 @@ class AdminSSLSessionManagerI : virtual public Glacier2::SSLSessionManager public: AdminSSLSessionManagerI(const DatabasePtr&, int, const RegistryObserverTopicPtr& , const NodeObserverTopicPtr&); - virtual Glacier2::SessionPrx create(const Glacier2::SSLInfo&, const Glacier2::SessionControlPrx&, const Ice::Current&); diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index b70be8471ee..7ef372505b6 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -1149,12 +1149,6 @@ Database::getObjectInfosByType(const string& type) return infos; } -const TraceLevelsPtr& -Database::getTraceLevels() const -{ - return _traceLevels; -} - void Database::checkForAddition(const ApplicationHelper& app) { diff --git a/cpp/src/IceGrid/Database.h b/cpp/src/IceGrid/Database.h index e0606b27408..62a27b5f4f8 100644 --- a/cpp/src/IceGrid/Database.h +++ b/cpp/src/IceGrid/Database.h @@ -101,7 +101,8 @@ public: ObjectInfoSeq getObjectInfosByType(const std::string&); ObjectInfoSeq getAllObjectInfos(const std::string& = std::string()); - const TraceLevelsPtr& getTraceLevels() const; + const TraceLevelsPtr& getTraceLevels() const { return _traceLevels; } + const Ice::CommunicatorPtr& getCommunicator() const { return _communicator; } private: diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index 8f0cf36eace..466d7261ac5 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -359,7 +359,8 @@ RegistryI::start(bool nowarn) clientAdapter->add(new QueryI(_communicator, _database), queryId); Identity adminId = _communicator->stringToIdentity(instanceName + "/Admin"); - adminAdapter->add(new AdminI(_database, this, _traceLevels), adminId); + _adminServant = new AdminI(_database, this, _traceLevels); + adminAdapter->add(_adminServant, adminId); Identity clientSessionMgrId = _communicator->stringToIdentity(instanceName + "/SessionManager"); _clientSessionManager = new ClientSessionManagerI(_database, sessionTimeout, _waitQueue); @@ -517,8 +518,13 @@ RegistryI::createAdminSession(const string& user, const string& password, const throw exc; } + // + // We let the connection access the administrative interface. + // + AdminPrx admin = AdminPrx::uncheckedCast(_sessionServantLocator->add(_adminServant, current.con)); + AdminSessionIPtr session = _adminSessionManager->create(user); - session->setServantLocator(_sessionServantLocator); + session->setServantLocator(_sessionServantLocator, admin); AdminSessionPrx proxy = AdminSessionPrx::uncheckedCast(_sessionServantLocator->add(session, current.con)); _clientReaper->add(new SessionReapable(current.adapter, session, proxy)); return proxy; @@ -601,8 +607,13 @@ RegistryI::createAdminSessionFromSecureConnection(const Ice::Current& current) throw exc; } + // + // We let the connection access the administrative interface. + // + AdminPrx admin = AdminPrx::uncheckedCast(_sessionServantLocator->add(_adminServant, current.con)); + AdminSessionIPtr session = _adminSessionManager->create(userDN); - session->setServantLocator(_sessionServantLocator); + session->setServantLocator(_sessionServantLocator, admin); AdminSessionPrx proxy = AdminSessionPrx::uncheckedCast(_sessionServantLocator->add(session, current.con)); _clientReaper->add(new SessionReapable(current.adapter, session, proxy)); return proxy; diff --git a/cpp/src/IceGrid/RegistryI.h b/cpp/src/IceGrid/RegistryI.h index 0a82bcdf39c..6a758aea8b5 100644 --- a/cpp/src/IceGrid/RegistryI.h +++ b/cpp/src/IceGrid/RegistryI.h @@ -74,6 +74,7 @@ private: ReapThreadPtr _clientReaper; WaitQueuePtr _waitQueue; SessionServantLocatorIPtr _sessionServantLocator; + Ice::ObjectPtr _adminServant; ClientSessionManagerIPtr _clientSessionManager; Glacier2::PermissionsVerifierPrx _clientVerifier; |