summaryrefslogtreecommitdiff
path: root/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
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')
-rw-r--r--cpp/src/IceGrid/AdminSessionI.cpp20
-rw-r--r--cpp/src/IceGrid/AdminSessionI.h6
-rw-r--r--cpp/src/IceGrid/Database.cpp6
-rw-r--r--cpp/src/IceGrid/Database.h3
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp17
-rw-r--r--cpp/src/IceGrid/RegistryI.h1
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;