diff options
author | Bernard Normier <bernard@zeroc.com> | 2016-07-27 10:28:00 -0400 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2016-07-27 10:28:00 -0400 |
commit | 9d8adf91dc5d99b236f0314a686a048e06e83510 (patch) | |
tree | 40675891ab3c1e4a912bf227f3a4c3e6e5278d3e /cpp/src | |
parent | ICE-7252 - Disable optimizer for VC140 x64 metrics test (diff) | |
download | ice-9d8adf91dc5d99b236f0314a686a048e06e83510.tar.bz2 ice-9d8adf91dc5d99b236f0314a686a048e06e83510.tar.xz ice-9d8adf91dc5d99b236f0314a686a048e06e83510.zip |
C++11 CertificateVerifier and PasswordPrompt
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/IceSSL/PluginI.cpp | 37 | ||||
-rw-r--r-- | cpp/src/IceSSL/PluginI.h | 5 | ||||
-rwxr-xr-x | cpp/src/IceSSL/Util.cpp | 26 | ||||
-rw-r--r-- | cpp/src/IceSSL/Util.h | 31 |
4 files changed, 97 insertions, 2 deletions
diff --git a/cpp/src/IceSSL/PluginI.cpp b/cpp/src/IceSSL/PluginI.cpp index 2e3cbe10414..cb515311c5a 100755 --- a/cpp/src/IceSSL/PluginI.cpp +++ b/cpp/src/IceSSL/PluginI.cpp @@ -41,17 +41,20 @@ registerIceSSL(bool loadOnInitialize) } +#ifndef ICE_CPP11_MAPPING IceSSL::CertificateVerifier::~CertificateVerifier() { // Out of line to avoid weak vtable } -IceSSL::NativeConnectionInfo::~NativeConnectionInfo() +IceSSL::PasswordPrompt::~PasswordPrompt() { // Out of line to avoid weak vtable } +#endif -IceSSL::PasswordPrompt::~PasswordPrompt() + +IceSSL::NativeConnectionInfo::~NativeConnectionInfo() { // Out of line to avoid weak vtable } @@ -130,17 +133,47 @@ IceSSL::PluginI::destroy() _engine = 0; } +#ifdef ICE_CPP11_MAPPING +void +IceSSL::PluginI::setCertificateVerifier(std::function<bool(const std::shared_ptr<NativeConnectionInfo>&)> verifier) +{ + if(verifier) + { + _engine->setCertificateVerifier(make_shared<CertificateVerifier>(std::move(verifier))); + } + else + { + _engine->setCertificateVerifier(nullptr); + } +} +#else void IceSSL::PluginI::setCertificateVerifier(const CertificateVerifierPtr& verifier) { _engine->setCertificateVerifier(verifier); } +#endif +#ifdef ICE_CPP11_MAPPING +void +IceSSL::PluginI::setPasswordPrompt(std::function<std::string()> prompt) +{ + if(prompt) + { + _engine->setPasswordPrompt(make_shared<PasswordPrompt>(std::move(prompt))); + } + else + { + _engine->setPasswordPrompt(nullptr); + } +} +#else void IceSSL::PluginI::setPasswordPrompt(const PasswordPromptPtr& prompt) { _engine->setPasswordPrompt(prompt); } +#endif #ifdef ICE_USE_OPENSSL void diff --git a/cpp/src/IceSSL/PluginI.h b/cpp/src/IceSSL/PluginI.h index ea0cf344ab4..b0f61028c21 100644 --- a/cpp/src/IceSSL/PluginI.h +++ b/cpp/src/IceSSL/PluginI.h @@ -32,8 +32,13 @@ public: // // From IceSSL::Plugin. // +#ifdef ICE_CPP11_MAPPING + virtual void setCertificateVerifier(std::function<bool(const std::shared_ptr<NativeConnectionInfo>&)>); + virtual void setPasswordPrompt(std::function<std::string()>); +#else virtual void setCertificateVerifier(const CertificateVerifierPtr&); virtual void setPasswordPrompt(const PasswordPromptPtr&); +#endif #ifdef ICE_USE_OPENSSL virtual void setContext(SSL_CTX*); diff --git a/cpp/src/IceSSL/Util.cpp b/cpp/src/IceSSL/Util.cpp index 6cb87ec31ec..5dc8bcf4b42 100755 --- a/cpp/src/IceSSL/Util.cpp +++ b/cpp/src/IceSSL/Util.cpp @@ -35,6 +35,32 @@ using namespace Ice; using namespace IceUtil; using namespace IceSSL; + +#ifdef ICE_CPP11_MAPPING +IceSSL::CertificateVerifier::CertificateVerifier(std::function<bool(const std::shared_ptr<NativeConnectionInfo>&)> v) : + _verify(std::move(v)) +{ +} + +bool +IceSSL::CertificateVerifier::verify(const NativeConnectionInfoPtr& info) +{ + return _verify(info); +} + +IceSSL::PasswordPrompt::PasswordPrompt(std::function<std::string()> p) : + _prompt(std::move(p)) +{ +} + +std::string +IceSSL::PasswordPrompt::getPassword() +{ + return _prompt(); +} +#endif + + #if !defined(ICE_USE_OPENSSL) namespace diff --git a/cpp/src/IceSSL/Util.h b/cpp/src/IceSSL/Util.h index 3e98050ee35..1ff3b12aab5 100644 --- a/cpp/src/IceSSL/Util.h +++ b/cpp/src/IceSSL/Util.h @@ -29,6 +29,37 @@ namespace IceSSL { +#ifdef ICE_CPP11_MAPPING +// +// Adapts the C++11 functions to C++98-like callbacks +// +class CertificateVerifier +{ +public: + + CertificateVerifier(std::function<bool(const std::shared_ptr<NativeConnectionInfo>&)>); + bool verify(const NativeConnectionInfoPtr&); + +private: + + std::function<bool(const std::shared_ptr<NativeConnectionInfo>&)> _verify; +}; +using CertificateVerifierPtr = std::shared_ptr<CertificateVerifier>; + +class PasswordPrompt +{ +public: + + PasswordPrompt(std::function<std::string()>); + std::string getPassword(); + +private: + + std::function<std::string()> _prompt; +}; +using PasswordPromptPtr = std::shared_ptr<PasswordPrompt>; +#endif + // // Constants for X509 certificate alt names (AltNameOther, AltNameORAddress, AltNameEDIPartyName and // AltNameObjectIdentifier) are not supported. |