summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2007-06-27 12:28:22 -0230
committerDwayne Boone <dwayne@zeroc.com>2007-06-27 12:28:22 -0230
commit434441f3aa26788c9898ebcdba9f14fdd01a8291 (patch)
treeddb80481e234fb1f066a37e21ad1c0a2768bde99 /cpp
parentBug 2270. (diff)
downloadice-434441f3aa26788c9898ebcdba9f14fdd01a8291.tar.bz2
ice-434441f3aa26788c9898ebcdba9f14fdd01a8291.tar.xz
ice-434441f3aa26788c9898ebcdba9f14fdd01a8291.zip
http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=2269 - do not exit if permissions verifier or session manager are not running at startup
Diffstat (limited to 'cpp')
-rw-r--r--cpp/CHANGES5
-rw-r--r--cpp/src/Glacier2/Glacier2Router.cpp140
-rw-r--r--cpp/src/Glacier2/SessionRouterI.cpp2
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp18
4 files changed, 128 insertions, 37 deletions
diff --git a/cpp/CHANGES b/cpp/CHANGES
index 4f5dd9c1482..174de79b38e 100644
--- a/cpp/CHANGES
+++ b/cpp/CHANGES
@@ -65,6 +65,11 @@ Changes since version 3.2.X (binary incompatible)
Changes since version 3.2.0
---------------------------
+- If the glacier2router can not contact the permissions verifier or
+ session manager on startup it now prints a warning and continues
+ rather than exiting. These warnings are disabled if the router is
+ started with the --nowarn command line option.
+
- Added support for protected class data members using the new
metadata tag ["protected"]. The tag can be applied to a Slice class
or to individual data members.
diff --git a/cpp/src/Glacier2/Glacier2Router.cpp b/cpp/src/Glacier2/Glacier2Router.cpp
index 9855723bd18..21b0fe278b0 100644
--- a/cpp/src/Glacier2/Glacier2Router.cpp
+++ b/cpp/src/Glacier2/Glacier2Router.cpp
@@ -93,9 +93,12 @@ Glacier2::RouterService::RouterService()
bool
Glacier2::RouterService::start(int argc, char* argv[])
{
+ bool nowarn;
+
IceUtil::Options opts;
opts.addOpt("h", "help");
opts.addOpt("v", "version");
+ opts.addOpt("", "nowarn");
vector<string> args;
try
@@ -119,6 +122,7 @@ Glacier2::RouterService::start(int argc, char* argv[])
print(ICE_STRING_VERSION);
return false;
}
+ nowarn = opts.isSet("nowarn");
if(!args.empty())
{
@@ -183,7 +187,23 @@ Glacier2::RouterService::start(int argc, char* argv[])
nullPermVerifId.category = instanceName;
nullPermVerifId.name = "NullPermissionsVerifier";
- ObjectPrx obj = communicator()->propertyToProxy(verifierProperty);
+ ObjectPrx obj;
+ try
+ {
+ obj = communicator()->propertyToProxy(verifierProperty);
+ if(!obj)
+ {
+ error("permissions verifier `" + verifierPropertyValue + "' is invalid");
+ return false;
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ ostringstream ostr;
+ ostr << ex;
+ error("permissions verifier `" + verifierPropertyValue + "' is invalid:\n" + ostr.str());
+ return false;
+ }
if(obj->ice_getIdentity() == nullPermVerifId)
{
verifier = PermissionsVerifierPrx::uncheckedCast(
@@ -194,18 +214,21 @@ Glacier2::RouterService::start(int argc, char* argv[])
try
{
verifier = PermissionsVerifierPrx::checkedCast(obj);
+ if(!verifier)
+ {
+ error("permissions verifier `" + verifierPropertyValue + "' is invalid");
+ return false;
+ }
}
catch(const Ice::Exception& ex)
{
- ostringstream ostr;
- ostr << ex;
- error("unable to contact permissions verifier `" + verifierPropertyValue + "'\n" + ostr.str());
- return false;
- }
- if(!verifier)
- {
- error("permissions verifier `" + verifierPropertyValue + "' is invalid");
- return false;
+ if(!nowarn)
+ {
+ ostringstream ostr;
+ ostr << ex;
+ warning("unable to contact permissions verifier `" + verifierPropertyValue + "'\n" + ostr.str());
+ }
+ verifier = PermissionsVerifierPrx::uncheckedCast(obj);
}
}
}
@@ -255,21 +278,36 @@ Glacier2::RouterService::start(int argc, char* argv[])
SessionManagerPrx sessionManager;
if(!sessionManagerPropertyValue.empty())
{
+ ObjectPrx obj;
try
{
- sessionManager = SessionManagerPrx::checkedCast(communicator()->propertyToProxy(sessionManagerProperty));
+ obj = communicator()->propertyToProxy(sessionManagerProperty);
}
catch(const Ice::Exception& ex)
{
ostringstream ostr;
ostr << ex;
- error("unable to contact session manager `" + sessionManagerPropertyValue + "'\n" + ostr.str());
+ error("session manager `" + sessionManagerPropertyValue + "' is invalid\n:" + ostr.str());
return false;
}
- if(!sessionManager)
+ try
{
- error("session manager `" + sessionManagerPropertyValue + "' is invalid");
- return false;
+ sessionManager = SessionManagerPrx::checkedCast(obj);
+ if(!sessionManager)
+ {
+ error("session manager `" + sessionManagerPropertyValue + "' is invalid");
+ return false;
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ if(!nowarn)
+ {
+ ostringstream ostr;
+ ostr << ex;
+ warning("unable to contact session manager `" + sessionManagerPropertyValue + "'\n" + ostr.str());
+ }
+ sessionManager = SessionManagerPrx::uncheckedCast(obj);
}
sessionManager =
SessionManagerPrx::uncheckedCast(sessionManager->ice_connectionCached(false)->ice_locatorCacheTimeout(
@@ -288,7 +326,23 @@ Glacier2::RouterService::start(int argc, char* argv[])
nullSSLPermVerifId.category = instanceName;
nullSSLPermVerifId.name = "NullSSLPermissionsVerifier";
- ObjectPrx obj = communicator()->propertyToProxy(sslVerifierProperty);
+ ObjectPrx obj;
+ try
+ {
+ obj = communicator()->propertyToProxy(sslVerifierProperty);
+ if(!obj)
+ {
+ error("ssl permissions verifier `" + verifierPropertyValue + "' is invalid");
+ return false;
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ ostringstream ostr;
+ ostr << ex;
+ error("ssl permissions verifier `" + sslVerifierPropertyValue + "' is invalid:\n" + ostr.str());
+ return false;
+ }
if(obj->ice_getIdentity() == nullSSLPermVerifId)
{
@@ -301,18 +355,22 @@ Glacier2::RouterService::start(int argc, char* argv[])
try
{
sslVerifier = SSLPermissionsVerifierPrx::checkedCast(obj);
+ if(!sslVerifier)
+ {
+ error("ssl permissions verifier `" + sslVerifierPropertyValue + "' is invalid");
+ return false;
+ }
}
catch(const Ice::Exception& ex)
{
- ostringstream ostr;
- ostr << ex;
- error("unable to contact ssl permissions verifier `" + sslVerifierPropertyValue + "'\n" + ostr.str());
- return false;
- }
- if(!sslVerifier)
- {
- error("ssl permissions verifier `" + sslVerifierPropertyValue + "' is invalid");
- return false;
+ if(!nowarn)
+ {
+ ostringstream ostr;
+ ostr << ex;
+ warning("unable to contact ssl permissions verifier `" + sslVerifierPropertyValue + "'\n" +
+ ostr.str());
+ }
+ sslVerifier = SSLPermissionsVerifierPrx::uncheckedCast(obj);
}
}
}
@@ -325,22 +383,37 @@ Glacier2::RouterService::start(int argc, char* argv[])
SSLSessionManagerPrx sslSessionManager;
if(!sslSessionManagerPropertyValue.empty())
{
+ ObjectPrx obj;
try
{
- sslSessionManager =
- SSLSessionManagerPrx::checkedCast(communicator()->propertyToProxy(sslSessionManagerProperty));
+ obj = communicator()->propertyToProxy(sslSessionManagerProperty);
}
catch(const Ice::Exception& ex)
{
ostringstream ostr;
ostr << ex;
- error("unable to ssl session manager `" + sslSessionManagerPropertyValue + "'\n" + ostr.str());
- return false;
+ error("ssl session manager `" + sslSessionManagerPropertyValue + "' is invalid:\n" + ostr.str());
+ return false
}
- if(!sslSessionManager)
+ try
{
- error("ssl session manager `" + sslSessionManagerPropertyValue + "' is invalid");
- return false;
+ sslSessionManager = SSLSessionManagerPrx::checkedCast(obj);
+ if(!sslSessionManager)
+ {
+ error("ssl session manager `" + sslSessionManagerPropertyValue + "' is invalid");
+ return false;
+ }
+ }
+ catch(const Ice::Exception& ex)
+ {
+ if(!nowarn)
+ {
+ ostringstream ostr;
+ ostr << ex;
+ warning("unable to contact ssl session manager `" + sslSessionManagerPropertyValue + "'\n" +
+ ostr.str());
+ }
+ sslSessionManager = SSLSessionManagerPrx::uncheckedCast(obj);
}
sslSessionManager =
SSLSessionManagerPrx::uncheckedCast(sslSessionManager->ice_connectionCached(false)->ice_locatorCacheTimeout(
@@ -463,7 +536,8 @@ Glacier2::RouterService::usage(const string& appName)
string options =
"Options:\n"
"-h, --help Show this message.\n"
- "-v, --version Display the Ice version.";
+ "-v, --version Display the Ice version.\n"
+ "--nowarn Suppress warnings.";
#ifdef _WIN32
if(checkSystem())
{
diff --git a/cpp/src/Glacier2/SessionRouterI.cpp b/cpp/src/Glacier2/SessionRouterI.cpp
index a095748b52d..642f4f527f7 100644
--- a/cpp/src/Glacier2/SessionRouterI.cpp
+++ b/cpp/src/Glacier2/SessionRouterI.cpp
@@ -804,7 +804,7 @@ Glacier2::SessionRouterI::createSessionInternal(const string& userId, bool allow
{
if(_sessionTraceLevel >= 1)
{
- Trace out(_logger, "Glacier2");
+ Warning out(_logger);
out << "exception while verifying password:\n" << ex;
}
diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp
index 901e351e8d7..84f242ab6f7 100644
--- a/cpp/src/IceGrid/RegistryI.cpp
+++ b/cpp/src/IceGrid/RegistryI.cpp
@@ -958,6 +958,12 @@ RegistryI::getPermissionsVerifier(const ObjectAdapterPtr& adapter,
try
{
verifier = _communicator->propertyToProxy(verifierProperty);
+ if(!verifier)
+ {
+ Error out(_communicator->getLogger());
+ out << "permissions verifier `" + verifierPropertyValue + "' is invalid";
+ return 0;
+ }
assert(_nullPermissionsVerifier);
if(verifier->ice_getIdentity() == _nullPermissionsVerifier->ice_getIdentity())
{
@@ -1057,6 +1063,12 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s
try
{
verifier = _communicator->propertyToProxy(verifierProperty);
+ if(!verifier)
+ {
+ Error out(_communicator->getLogger());
+ out << "ssl permissions verifier `" + verifierPropertyValue + "' is invalid";
+ return 0;
+ }
assert(_nullSSLPermissionsVerifier);
if(verifier->ice_getIdentity() == _nullSSLPermissionsVerifier->ice_getIdentity())
{
@@ -1066,7 +1078,7 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s
catch(const LocalException& ex)
{
Error out(_communicator->getLogger());
- out << "permissions verifier `" + verifierPropertyValue + "' is invalid:\n" << ex;
+ out << "ssl permissions verifier `" + verifierPropertyValue + "' is invalid:\n" << ex;
return 0;
}
}
@@ -1088,7 +1100,7 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s
if(!verifierPrx)
{
Error out(_communicator->getLogger());
- out << "permissions verifier `" + verifierProperty + "' is invalid";
+ out << "ssl permissions verifier `" + verifierProperty + "' is invalid";
return 0;
}
}
@@ -1097,7 +1109,7 @@ RegistryI::getSSLPermissionsVerifier(const IceGrid::LocatorPrx& locator, const s
if(!nowarn)
{
Warning out(_communicator->getLogger());
- out << "couldn't contact permissions verifier `" + verifierProperty + "':\n" << ex;
+ out << "couldn't contact ssl permissions verifier `" + verifierProperty + "':\n" << ex;
}
verifierPrx = Glacier2::SSLPermissionsVerifierPrx::uncheckedCast(verifier->ice_locator(locator));
}