diff options
Diffstat (limited to 'cpp/src/IceGrid/RegistryI.cpp')
-rw-r--r-- | cpp/src/IceGrid/RegistryI.cpp | 62 |
1 files changed, 18 insertions, 44 deletions
diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index 0b4b88740fc..d3caad319de 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -14,7 +14,7 @@ #include <Ice/ProtocolPluginFacade.h> // Just to get the hostname #include <IceStorm/Service.h> -#include <IceSSL/Plugin.h> +#include <IceSSL/IceSSL.h> #include <Glacier2/PermissionsVerifier.h> #include <IceGrid/TraceLevels.h> @@ -1239,61 +1239,35 @@ RegistryI::getSSLInfo(const ConnectionPtr& connection, string& userDN) Glacier2::SSLInfo sslinfo; try { - IceSSL::ConnectionInfo info = IceSSL::getConnectionInfo(connection); - - if(info.remoteAddr.ss_family == AF_UNSPEC) - { - // - // The remote address may not be available on Windows XP SP2 when using IPv6. - // - sslinfo.remotePort = 0; - sslinfo.remoteHost = ""; - } - else - { - if(info.remoteAddr.ss_family == AF_INET) - { - sslinfo.remotePort = ntohs(reinterpret_cast<sockaddr_in*>(&info.remoteAddr)->sin_port); - } - else - { - sslinfo.remotePort = ntohs(reinterpret_cast<sockaddr_in6*>(&info.remoteAddr)->sin6_port); - } - sslinfo.remoteHost = IceInternal::inetAddrToString(info.remoteAddr); - } - - if(info.localAddr.ss_family == AF_INET) + IceSSL::SSLConnectionInfoPtr info = IceSSL::SSLConnectionInfoPtr::dynamicCast(connection->getInfo()); + if(!info) { - sslinfo.localPort = ntohs(reinterpret_cast<sockaddr_in*>(&info.localAddr)->sin_port); - } - else - { - sslinfo.localPort = ntohs(reinterpret_cast<sockaddr_in6*>(&info.localAddr)->sin6_port); + PermissionDeniedException exc; + exc.reason = "not ssl connection"; + throw exc; } - sslinfo.localHost = IceInternal::inetAddrToString(info.localAddr); - - sslinfo.cipher = info.cipher; - if(!info.certs.empty()) + sslinfo.remotePort = info->remotePort; + sslinfo.remoteHost = info->remoteAddress; + sslinfo.localPort = info->localPort; + sslinfo.localHost = info->localAddress; + sslinfo.cipher = info->cipher; + sslinfo.certs = info->certs; + if(info->certs.size() > 0) { - sslinfo.certs.resize(info.certs.size()); - for(unsigned int i = 0; i < info.certs.size(); ++i) - { - sslinfo.certs[i] = info.certs[i]->encode(); - } - userDN = info.certs[0]->getSubjectDN(); + userDN = IceSSL::Certificate::decode(info->certs[0])->getSubjectDN(); } } - catch(const IceSSL::ConnectionInvalidException&) + catch(const IceSSL::CertificateEncodingException&) { PermissionDeniedException exc; - exc.reason = "not ssl connection"; + exc.reason = "certificate encoding exception"; throw exc; } - catch(const IceSSL::CertificateEncodingException&) + catch(const Ice::LocalException&) { PermissionDeniedException exc; - exc.reason = "certificate encoding exception"; + exc.reason = "connection exception"; throw exc; } |