summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/RegistryI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-05-22 16:30:01 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-05-22 16:30:01 +0000
commit67b1e7d79f390dd5098aac0a226cc71775f4904d (patch)
tree81da7fc9bff0612eea851618a066c3463420e4ef /cpp/src/IceGrid/RegistryI.cpp
parentAdded session servant locator to secure access to session servants. (diff)
downloadice-67b1e7d79f390dd5098aac0a226cc71775f4904d.tar.bz2
ice-67b1e7d79f390dd5098aac0a226cc71775f4904d.tar.xz
ice-67b1e7d79f390dd5098aac0a226cc71775f4904d.zip
Amin object is now also per-session
Diffstat (limited to 'cpp/src/IceGrid/RegistryI.cpp')
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp17
1 files changed, 14 insertions, 3 deletions
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;