]> granicus.if.org Git - postgresql/commitdiff
Remove support for OpenSSL versions older than 0.9.8.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 29 Aug 2016 17:16:02 +0000 (20:16 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 29 Aug 2016 17:16:02 +0000 (20:16 +0300)
OpenSSL officially only supports 1.0.1 and newer. Some OS distributions
still provide patches for 0.9.8, but anything older than that is not
interesting anymore. Let's simplify things by removing compatibility code.

Andreas Karlsson, with small changes by me.

contrib/pgcrypto/openssl.c
doc/src/sgml/installation.sgml
doc/src/sgml/libpq.sgml
doc/src/sgml/pgcrypto.sgml
src/backend/libpq/be-secure-openssl.c
src/interfaces/libpq/fe-secure-openssl.c
src/interfaces/libpq/libpq-int.h

index 976af7059152dd75dc01a15174e066357929d8a1..ffab5d2bb0e7468778bce0862774ac12d11172c1 100644 (file)
@@ -37,6 +37,7 @@
 #include <openssl/blowfish.h>
 #include <openssl/cast.h>
 #include <openssl/des.h>
+#include <openssl/aes.h>
 #include <openssl/rand.h>
 #include <openssl/err.h>
 
 #define MAX_KEY                (512/8)
 #define MAX_IV         (128/8)
 
-/*
- * Compatibility with OpenSSL 0.9.6
- *
- * It needs AES and newer DES and digest API.
- */
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
-
-/*
- * Nothing needed for OpenSSL 0.9.7+
- */
-
-#include <openssl/aes.h>
-#else                                                  /* old OPENSSL */
-
-/*
- * Emulate OpenSSL AES.
- */
-
-#include "rijndael.c"
-
-#define AES_ENCRYPT 1
-#define AES_DECRYPT 0
-#define AES_KEY                rijndael_ctx
-
-static int
-AES_set_encrypt_key(const uint8 *key, int kbits, AES_KEY *ctx)
-{
-       aes_set_key(ctx, key, kbits, 1);
-       return 0;
-}
-
-static int
-AES_set_decrypt_key(const uint8 *key, int kbits, AES_KEY *ctx)
-{
-       aes_set_key(ctx, key, kbits, 0);
-       return 0;
-}
-
-static void
-AES_ecb_encrypt(const uint8 *src, uint8 *dst, AES_KEY *ctx, int enc)
-{
-       memcpy(dst, src, 16);
-       if (enc)
-               aes_ecb_encrypt(ctx, dst, 16);
-       else
-               aes_ecb_decrypt(ctx, dst, 16);
-}
-
-static void
-AES_cbc_encrypt(const uint8 *src, uint8 *dst, int len, AES_KEY *ctx, uint8 *iv, int enc)
-{
-       memcpy(dst, src, len);
-       if (enc)
-       {
-               aes_cbc_encrypt(ctx, iv, dst, len);
-               memcpy(iv, dst + len - 16, 16);
-       }
-       else
-       {
-               aes_cbc_decrypt(ctx, iv, dst, len);
-               memcpy(iv, src + len - 16, 16);
-       }
-}
-
-/*
- * Emulate DES_* API
- */
-
-#define DES_key_schedule des_key_schedule
-#define DES_cblock des_cblock
-#define DES_set_key(k, ks) \
-               des_set_key((k), *(ks))
-#define DES_ecb_encrypt(i, o, k, e) \
-               des_ecb_encrypt((i), (o), *(k), (e))
-#define DES_ncbc_encrypt(i, o, l, k, iv, e) \
-               des_ncbc_encrypt((i), (o), (l), *(k), (iv), (e))
-#define DES_ecb3_encrypt(i, o, k1, k2, k3, e) \
-               des_ecb3_encrypt((des_cblock *)(i), (des_cblock *)(o), \
-                               *(k1), *(k2), *(k3), (e))
-#define DES_ede3_cbc_encrypt(i, o, l, k1, k2, k3, iv, e) \
-               des_ede3_cbc_encrypt((i), (o), \
-                               (l), *(k1), *(k2), *(k3), (iv), (e))
-
-/*
- * Emulate newer digest API.
- */
-
-static void
-EVP_MD_CTX_init(EVP_MD_CTX *ctx)
-{
-       memset(ctx, 0, sizeof(*ctx));
-}
-
-static int
-EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
-{
-       px_memset(ctx, 0, sizeof(*ctx));
-       return 1;
-}
-
-static int
-EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *md, void *engine)
-{
-       EVP_DigestInit(ctx, md);
-       return 1;
-}
-
-static int
-EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *res, unsigned int *len)
-{
-       EVP_DigestFinal(ctx, res, len);
-       return 1;
-}
-#endif   /* old OpenSSL */
-
-/*
- * Provide SHA2 for older OpenSSL < 0.9.8
- */
-#if OPENSSL_VERSION_NUMBER < 0x00908000L
-
-#include "sha2.c"
-#include "internal-sha2.c"
-
-typedef void (*init_f) (PX_MD *md);
-
-static int
-compat_find_digest(const char *name, PX_MD **res)
-{
-       init_f          init = NULL;
-
-       if (pg_strcasecmp(name, "sha224") == 0)
-               init = init_sha224;
-       else if (pg_strcasecmp(name, "sha256") == 0)
-               init = init_sha256;
-       else if (pg_strcasecmp(name, "sha384") == 0)
-               init = init_sha384;
-       else if (pg_strcasecmp(name, "sha512") == 0)
-               init = init_sha512;
-       else
-               return PXE_NO_HASH;
-
-       *res = px_alloc(sizeof(PX_MD));
-       init(*res);
-       return 0;
-}
-#else
-#define compat_find_digest(name, res)  (PXE_NO_HASH)
-#endif
-
 /*
  * Hashes
  */
@@ -275,7 +127,7 @@ px_find_digest(const char *name, PX_MD **res)
 
        md = EVP_get_digestbyname(name);
        if (md == NULL)
-               return compat_find_digest(name, res);
+               return PXE_NO_HASH;
 
        digest = px_alloc(sizeof(*digest));
        digest->algo = md;
index a9968756e652f2232b6bcca79665fe86f098cd8d..14a6d57aeaf7cd54ca97dfe718af9cb6a45f7714 100644 (file)
@@ -252,10 +252,17 @@ su - postgres
 
     <listitem>
      <para>
-      You need <application>Kerberos</>, <productname>OpenSSL</>,
-      <productname>OpenLDAP</>, and/or
-      <application>PAM</>, if you want to support authentication or
-      encryption using those services.
+      You need <productname>OpenSSL</>, if you want to support
+      encrypted client connections. The minimum required version is
+      0.9.8.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      You need <application>Kerberos</>, <productname>OpenLDAP</>,
+      and/or <application>PAM</>, if you want to support authentication
+      using those services.
      </para>
     </listitem>
 
@@ -2826,30 +2833,6 @@ MANPATH=/usr/lib/scohelp/%L/man:/usr/dt/man:/usr/man:/usr/share/man:scohelp:/usr
     </para>
    </sect3>
 
-   <sect3>
-    <title>Problems with OpenSSL</title>
-
-    <para>
-     When you build PostgreSQL with OpenSSL support you might get
-     compilation errors in the following files:
-     <itemizedlist>
-      <listitem><para><filename>src/backend/libpq/crypt.c</filename></para></listitem>
-      <listitem><para><filename>src/backend/libpq/password.c</filename></para></listitem>
-      <listitem><para><filename>src/interfaces/libpq/fe-auth.c</filename></para></listitem>
-      <listitem><para><filename>src/interfaces/libpq/fe-connect.c</filename></para></listitem>
-     </itemizedlist>
-
-     This is because of a namespace conflict between the standard
-     <filename>/usr/include/crypt.h</filename> header and the header
-     files provided by OpenSSL.
-    </para>
-
-    <para>
-     Upgrading your OpenSSL installation to version 0.9.6a fixes this
-     problem.  Solaris 9 and above has a newer version of OpenSSL.
-    </para>
-   </sect3>
-
    <sect3>
     <title>configure Complains About a Failed Test Program</title>
 
index 2f9350b10e1c4d03a6d4afd5d59de7dc87416da7..4e34f00e44de465f4e9ac97ae3d8bcf82f1c0d14 100644 (file)
@@ -1238,8 +1238,7 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname
       <listitem>
        <para>
         If set to 1 (default), data sent over SSL connections will be
-        compressed (this requires <productname>OpenSSL</> version
-        0.9.8 or later).
+        compressed.
         If set to 0, compression will be disabled (this requires
         <productname>OpenSSL</> 1.0.0 or later).
         This parameter is ignored if a connection without SSL is made,
index c4cefde4f787b4beb4e37f74b1210fb112e813f2..bf514aacf3560eeca78afff632cbfc8f612e73aa 100644 (file)
@@ -1184,12 +1184,12 @@ gen_random_uuid() returns uuid
       <row>
        <entry>SHA224/256/384/512</entry>
        <entry>yes</entry>
-       <entry>yes (Note 1)</entry>
+       <entry>yes</entry>
       </row>
       <row>
        <entry>Other digest algorithms</entry>
        <entry>no</entry>
-       <entry>yes (Note 2)</entry>
+       <entry>yes (Note 1)</entry>
       </row>
       <row>
        <entry>Blowfish</entry>
@@ -1199,7 +1199,7 @@ gen_random_uuid() returns uuid
       <row>
        <entry>AES</entry>
        <entry>yes</entry>
-       <entry>yes (Note 3)</entry>
+       <entry>yes</entry>
       </row>
       <row>
        <entry>DES/3DES/CAST5</entry>
@@ -1230,12 +1230,6 @@ gen_random_uuid() returns uuid
    </para>
 
    <orderedlist>
-    <listitem>
-     <para>
-      SHA2 algorithms were added to OpenSSL in version 0.9.8.  For
-      older versions, <filename>pgcrypto</> will use built-in code.
-     </para>
-    </listitem>
     <listitem>
      <para>
       Any digest algorithm OpenSSL supports is automatically picked up.
@@ -1243,12 +1237,6 @@ gen_random_uuid() returns uuid
       explicitly.
      </para>
     </listitem>
-    <listitem>
-     <para>
-      AES is included in OpenSSL since version 0.9.7.  For
-      older versions, <filename>pgcrypto</> will use built-in code.
-     </para>
-    </listitem>
    </orderedlist>
   </sect3>
 
index f6adb155c6e2fcdb61a2031465016ffd8c68f321..e5f434ca17a0b2cfe1ebe314ce4e83406e0edb94 100644 (file)
 
 #include <openssl/ssl.h>
 #include <openssl/dh.h>
-#if SSLEAY_VERSION_NUMBER >= 0x0907000L
 #include <openssl/conf.h>
-#endif
-#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_ECDH)
+#ifndef OPENSSL_NO_ECDH
 #include <openssl/ec.h>
 #endif
 
@@ -166,9 +164,7 @@ be_tls_init(void)
 
        if (!SSL_context)
        {
-#if SSLEAY_VERSION_NUMBER >= 0x0907000L
                OPENSSL_config(NULL);
-#endif
                SSL_library_init();
                SSL_load_error_strings();
 
@@ -978,7 +974,7 @@ info_cb(const SSL *ssl, int type, int args)
 static void
 initialize_ecdh(void)
 {
-#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_ECDH)
+#ifndef OPENSSL_NO_ECDH
        EC_KEY     *ecdh;
        int                     nid;
 
index f6ce1c7a13d8ee47a093eb5f407208a77a769908..d8716128ec9ba2f9dc18a5a3a1af7b5b34c58eb9 100644 (file)
@@ -54,9 +54,7 @@
 #endif
 
 #include <openssl/ssl.h>
-#if (SSLEAY_VERSION_NUMBER >= 0x00907000L)
 #include <openssl/conf.h>
-#endif
 #ifdef USE_SSL_ENGINE
 #include <openssl/engine.h>
 #endif
@@ -848,9 +846,7 @@ pgtls_init(PGconn *conn)
        {
                if (pq_init_ssl_lib)
                {
-#if SSLEAY_VERSION_NUMBER >= 0x00907000L
                        OPENSSL_config(NULL);
-#endif
                        SSL_library_init();
                        SSL_load_error_strings();
                }
index 1183323a4456a84184d7fdbedc6e7d00aed928fe..a94ead04ff321a108cd84486dd5ad08370d60d5c 100644 (file)
@@ -77,7 +77,7 @@ typedef struct
 #include <openssl/ssl.h>
 #include <openssl/err.h>
 
-#if (SSLEAY_VERSION_NUMBER >= 0x00907000L) && !defined(OPENSSL_NO_ENGINE)
+#ifndef OPENSSL_NO_ENGINE
 #define USE_SSL_ENGINE
 #endif
 #endif   /* USE_OPENSSL */