summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/IceSSL/OpenSSLEngine.cpp17
-rw-r--r--cpp/src/IceSSL/OpenSSLTransceiverI.cpp6
-rwxr-xr-xcpp/src/IceSSL/Util.cpp6
-rw-r--r--cpp/src/Slice/Preprocessor.cpp32
4 files changed, 45 insertions, 16 deletions
diff --git a/cpp/src/IceSSL/OpenSSLEngine.cpp b/cpp/src/IceSSL/OpenSSLEngine.cpp
index 8a6af245907..25320a03a8a 100644
--- a/cpp/src/IceSSL/OpenSSLEngine.cpp
+++ b/cpp/src/IceSSL/OpenSSLEngine.cpp
@@ -41,7 +41,7 @@ IceUtil::Mutex* staticMutex = 0;
int instanceCount = 0;
bool initOpenSSL = false;
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
IceUtil::Mutex* locks = 0;
#endif
@@ -53,7 +53,7 @@ extern "C"
// OpenSSL 1.1.0 introduces a new thread API and removes
// the need to use a custom thread callback.
//
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
//
// OpenSSL mutex callback.
//
@@ -124,7 +124,7 @@ IceSSL_opensslPasswordCallback(char* buf, int size, int flag, void* userData)
DH*
IceSSL_opensslDHCallback(SSL* ssl, int /*isExport*/, int keyLength)
{
-# if OPENSSL_VERSION_NUMBER >= 0x10100000L
+# if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
SSL_CTX* ctx = SSL_get_SSL_CTX(ssl);
# else
SSL_CTX* ctx = ssl->ctx;
@@ -154,7 +154,7 @@ public:
// OpenSSL 1.1.0 introduces a new thread API and removes
// the need to use a custom thread callback.
//
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
if(CRYPTO_get_locking_callback() == IceSSL_opensslLockCallback)
{
assert(locks);
@@ -222,11 +222,12 @@ OpenSSLEngine::OpenSSLEngine(const CommunicatorPtr& communicator) :
//
// OpenSSL 1.1.0 remove the need for library initialization and cleanup.
//
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
if(!CRYPTO_get_id_callback())
{
CRYPTO_set_id_callback(IceSSL_opensslThreadIdCallback);
}
+
//
// Create the mutexes and set the callbacks.
//
@@ -333,7 +334,7 @@ OpenSSLEngine::~OpenSSLEngine()
//
// OpenSSL 1.1.0 remove the need for library initialization and cleanup.
//
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
//
// Clean up OpenSSL resources.
//
@@ -406,7 +407,7 @@ OpenSSLEngine::initialize()
"IceSSL: unable to create SSL context:\n" + sslErrors());
}
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
int securityLevel = properties->getPropertyAsIntWithDefault(propPrefix + "SecurityLevel", -1);
if(securityLevel != -1)
{
@@ -961,7 +962,7 @@ OpenSSLEngine::parseProtocols(const StringSeq& protocols) const
SSL_METHOD*
OpenSSLEngine::getMethod(int /*protocols*/)
{
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
SSL_METHOD* meth = const_cast<SSL_METHOD*>(TLS_method());
#else
//
diff --git a/cpp/src/IceSSL/OpenSSLTransceiverI.cpp b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
index d3195e2b141..863b758791d 100644
--- a/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
+++ b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp
@@ -36,7 +36,7 @@ using namespace IceSSL;
//
// See: http://cvs.openssl.org/chngview?cn=22569
//
-#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL && !defined(LIBRESSL_VERSION_NUMBER)
namespace
{
@@ -170,13 +170,13 @@ IceSSL::TransceiverI::initialize(IceInternal::Buffer& readBuffer, IceInternal::B
//
// See: http://cvs.openssl.org/chngview?cn=22569
//
-#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL && !defined(LIBRESSL_VERSION_NUMBER)
IceUtilInternal::MutexPtrLock<IceUtil::Mutex> sync(sslMutex);
#endif
int ret = _incoming ? SSL_accept(_ssl) : SSL_connect(_ssl);
-#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x100000bfL && !defined(LIBRESSL_VERSION_NUMBER)
sync.release();
#endif
if(ret <= 0)
diff --git a/cpp/src/IceSSL/Util.cpp b/cpp/src/IceSSL/Util.cpp
index 0c227c7e279..f6fd6a92563 100755
--- a/cpp/src/IceSSL/Util.cpp
+++ b/cpp/src/IceSSL/Util.cpp
@@ -131,7 +131,7 @@ namespace
{
# ifndef OPENSSL_NO_DH
-# if OPENSSL_VERSION_NUMBER < 0x10100000L
+# if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
// The following arrays are predefined Diffie Hellman group parameters.
// These are known strong primes, distributed with the OpenSSL library
@@ -359,7 +359,7 @@ unsigned char dh4096[] =
//
// Convert a predefined parameter set into a DH value.
//
-# if OPENSSL_VERSION_NUMBER >= 0x10100000L
+# if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
static DH*
convertDH(const unsigned char* buf, int len)
{
@@ -449,7 +449,7 @@ IceSSL::DHParams::get(int keyLength)
// No match found. Use one of the predefined parameter sets instead.
//
IceUtil::Mutex::Lock sync(*this);
-# if OPENSSL_VERSION_NUMBER >= 0x10100000L
+# if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
if(keyLength >= 4096)
{
if(!_dh4096)
diff --git a/cpp/src/Slice/Preprocessor.cpp b/cpp/src/Slice/Preprocessor.cpp
index 912d024ab2e..2e0192edab9 100644
--- a/cpp/src/Slice/Preprocessor.cpp
+++ b/cpp/src/Slice/Preprocessor.cpp
@@ -382,12 +382,40 @@ Slice::Preprocessor::printMakefileDependencies(ostream& out, Language lang, cons
// First remove the backslash used to escape new lines.
//
string::size_type pos;
- while((pos = unprocessed.find("\\\n")) != string::npos)
+ while((pos = unprocessed.find(" \\\n")) != string::npos)
{
- unprocessed.replace(pos, 2, "\n");
+ unprocessed.replace(pos, 3, "\n");
}
//
+ // Split filenames in separate lines:
+ //
+ // /foo/A.ice /foo/B.ice becomes
+ // /foo/A.ice
+ // /foo/B.ice
+ //
+ // C:\foo\A.ice C:\foo\B.ice becomes
+ // C:\foo\A.ice
+ // C:\foo\B.ice
+ //
+ pos = 0;
+#ifdef _WIN32
+ while((pos = unprocessed.find(".ice ", pos)) != string::npos)
+ {
+ if(unprocessed.find(":", pos) == pos + 6)
+ {
+ unprocessed.replace(pos, 5, ".ice\n");
+ pos += 5;
+ }
+ }
+#else
+ while((pos = unprocessed.find(".ice /", pos)) != string::npos)
+ {
+ unprocessed.replace(pos, 5, ".ice\n");
+ }
+#endif
+
+ //
// Get the main output file name.
//
#ifdef _MSC_VER