]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Add checks for OpenSSL 1.1.0f API changes (#54)
authorAmos Jeffries <yadij@users.noreply.github.com>
Wed, 30 Aug 2017 16:38:07 +0000 (04:38 +1200)
committerAmos Jeffries <yadij@users.noreply.github.com>
Mon, 27 Nov 2017 05:24:29 +0000 (18:24 +1300)
acinclude/lib-checks.m4
configure.ac
src/ssl/gadgets.cc
src/ssl/gadgets.h
src/ssl/support.cc

index 68bf33a1830742e78049f2c7dbd94874562afe74..af488e4458b11434593a63c0fb4f95d69549385c 100644 (file)
@@ -259,6 +259,31 @@ return 0;
   SQUID_STATE_ROLLBACK(check_const_SSL_CTX_sess_set_get_cb)
 ])
 
+dnl Checks whether the X509_get0_signature() has const arguments
+AC_DEFUN([SQUID_CHECK_OPENSSL_CONST_X509_GET0_SIGNATURE_ARGS],[
+  AH_TEMPLATE(SQUID_USE_CONST_X509_GET0_SIGNATURE_ARGS, "Define if X509_get0_signature() accepts const parameters")
+  SQUID_STATE_SAVE(check_const_X509_get0_signature_args)
+  AC_MSG_CHECKING("whether X509_get0_signature() accepts const parameters")
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+#include <openssl/ssl.h>
+    ],[
+#if HAVE_LIBCRYPTO_X509_GET0_SIGNATURE
+        const ASN1_BIT_STRING *sig = nullptr;
+        const X509_ALGOR *sig_alg;
+        X509_get0_signature(&sig, &sig_alg, nullptr);
+#else
+#error Missing X509_get0_signature()
+#endif
+    ])
+  ],[
+   AC_DEFINE(SQUID_USE_CONST_X509_GET0_SIGNATURE_ARGS, 1)
+   AC_MSG_RESULT([yes])
+  ],[
+   AC_MSG_RESULT([no])
+  ])
+  SQUID_STATE_ROLLBACK(check_const_X509_get0_signature_args)
+])
+
 dnl Try to handle TXT_DB related  problems:
 dnl 1) The type of TXT_DB::data member changed in openSSL-1.0.1 version
 dnl 2) The IMPLEMENT_LHASH_* openSSL macros in openSSL-1.0.1 and later releases is not
index 2968c56958171b9c4a8a4ebe80342dc5ad3ab89f..8a0d665bc19ec2aecb560267e5deeede7295a16a 100644 (file)
@@ -1367,6 +1367,7 @@ if test "x$with_openssl" = "xyes"; then
     SQUID_CHECK_OPENSSL_CONST_SSL_METHOD
     SQUID_CHECK_OPENSSL_CONST_CRYPTO_EX_DATA
     SQUID_CHECK_OPENSSL_CONST_SSL_SESSION_CB_ARG
+    SQUID_CHECK_OPENSSL_CONST_X509_GET0_SIGNATURE_ARGS
     SQUID_CHECK_OPENSSL_TXTDB
     SQUID_CHECK_OPENSSL_HELLO_OVERWRITE_HACK
   fi
index cd7dad5b8ac769940d95642fee3e0417b7bb4feb..c7331bac9adbc309f545c1a2d74f4075d0db40ce 100644 (file)
@@ -222,14 +222,7 @@ Ssl::CertificateProperties::CertificateProperties():
 static void
 printX509Signature(const Security::CertPointer &cert, std::string &out)
 {
-    ASN1_BIT_STRING *sig = nullptr;
-#if HAVE_LIBCRYPTO_X509_GET0_SIGNATURE
-    X509_ALGOR *sig_alg;
-    X509_get0_signature(&sig, &sig_alg, cert.get());
-#else
-    sig = cert->signature;
-#endif
-
+    const ASN1_BIT_STRING *sig = Ssl::X509_get_signature(cert);
     if (sig && sig->data) {
         const unsigned char *s = sig->data;
         for (int i = 0; i < sig->length; ++i) {
@@ -952,3 +945,21 @@ Ssl::CertificatesCmp(const Security::CertPointer &cert1, const Security::CertPoi
     return ret;
 }
 
+const ASN1_BIT_STRING *
+Ssl::X509_get_signature(const Security::CertPointer &cert)
+{
+#if HAVE_LIBCRYPTO_X509_GET0_SIGNATURE
+#if SQUID_USE_CONST_X509_GET0_SIGNATURE_ARGS
+    const ASN1_BIT_STRING *sig = nullptr;
+    const X509_ALGOR *sig_alg = nullptr;
+#else
+    ASN1_BIT_STRING *sig = nullptr;
+    X509_ALGOR *sig_alg = nullptr;
+#endif
+    X509_get0_signature(&sig, &sig_alg, cert.get());
+    return sig;
+#else
+    return cert->signature;
+#endif
+}
+
index b0e7f9004ee1100ac68790ddbfb25bed1bbacbf0..2c084d34eca27d61040fcbe541dbe86380f37c88 100644 (file)
@@ -278,6 +278,11 @@ const char *getOrganization(X509 *x509);
 /// \ingroup ServerProtocolSSLAPI
 /// \return whether both certificates exist and are the same (e.g., have identical ASN.1 images)
 bool CertificatesCmp(const Security::CertPointer &cert1, const Security::CertPointer &cert2);
+
+/// wrapper for OpenSSL X509_get0_signature() which takes care of
+/// portability issues with older OpenSSL versions
+const ASN1_BIT_STRING *X509_get_signature(const Security::CertPointer &);
+
 } // namespace Ssl
 #endif // SQUID_SSL_GADGETS_H
 
index 99b73f2ef67e1ae5bc51fe1cbfe98a513e695c32..5e37ce1e01d99327f7c100cf986b7be1cad8c438 100644 (file)
@@ -1366,15 +1366,8 @@ bool Ssl::generateUntrustedCert(Security::CertPointer &untrustedCert, EVP_PKEY_P
 void Ssl::InRamCertificateDbKey(const Ssl::CertificateProperties &certProperties, SBuf &key)
 {
     bool origSignatureAsKey = false;
-    if (certProperties.mimicCert.get()) {
-        ASN1_BIT_STRING *sig = nullptr;
-#if HAVE_LIBCRYPTO_X509_GET0_SIGNATURE
-        X509_ALGOR *sig_alg;
-        X509_get0_signature(&sig, &sig_alg, certProperties.mimicCert.get());
-#else
-        sig = certProperties.mimicCert->signature;
-#endif
-        if (sig) {
+    if (certProperties.mimicCert) {
+        if (auto *sig = Ssl::X509_get_signature(certProperties.mimicCert)) {
             origSignatureAsKey = true;
             key.append((const char *)sig->data, sig->length);
         }