summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/RegistryI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/RegistryI.cpp')
-rw-r--r--cpp/src/IceGrid/RegistryI.cpp62
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;
}