Jacek Caban : secur32: Fixed compilation on very old gnutls versions.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jun 18 07:55:03 CDT 2015


Module: wine
Branch: master
Commit: cae3f98c6938663aab248f6551e9cc7cfbc1ce09
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cae3f98c6938663aab248f6551e9cc7cfbc1ce09

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jun 18 13:06:08 2015 +0200

secur32: Fixed compilation on very old gnutls versions.

---

 dlls/secur32/schannel_gnutls.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/dlls/secur32/schannel_gnutls.c b/dlls/secur32/schannel_gnutls.c
index c0b6f80..d2c64fc 100644
--- a/dlls/secur32/schannel_gnutls.c
+++ b/dlls/secur32/schannel_gnutls.c
@@ -41,6 +41,9 @@
 WINE_DEFAULT_DEBUG_CHANNEL(secur32);
 WINE_DECLARE_DEBUG_CHANNEL(winediag);
 
+/* Not present in gnutls version < 2.9.10. */
+extern int gnutls_cipher_get_block_size(gnutls_cipher_algorithm_t algorithm);
+
 static void *libgnutls_handle;
 #define MAKE_FUNCPTR(f) static typeof(f) * p##f
 MAKE_FUNCPTR(gnutls_alert_get);
@@ -77,10 +80,34 @@ MAKE_FUNCPTR(gnutls_transport_set_push_function);
 #undef MAKE_FUNCPTR
 
 #if GNUTLS_VERSION_MAJOR < 3
+#define GNUTLS_CIPHER_AES_192_CBC 92
 #define GNUTLS_CIPHER_AES_128_GCM 93
 #define GNUTLS_CIPHER_AES_256_GCM 94
 #endif
 
+static int compat_cipher_get_block_size(gnutls_cipher_algorithm_t cipher)
+{
+    switch(cipher) {
+    case GNUTLS_CIPHER_3DES_CBC:
+        return 8;
+    case GNUTLS_CIPHER_AES_128_CBC:
+    case GNUTLS_CIPHER_AES_256_CBC:
+        return 16;
+    case GNUTLS_CIPHER_ARCFOUR_128:
+    case GNUTLS_CIPHER_ARCFOUR_40:
+        return 1;
+    case GNUTLS_CIPHER_DES_CBC:
+        return 8;
+    case GNUTLS_CIPHER_NULL:
+        return 1;
+    case GNUTLS_CIPHER_RC2_40_CBC:
+        return 8;
+    default:
+        FIXME("Unknown cipher %#x, returning 1\n", cipher);
+        return 1;
+    }
+}
+
 static ssize_t schan_pull_adapter(gnutls_transport_ptr_t transport,
                                       void *buff, size_t buff_len)
 {
@@ -474,7 +501,6 @@ BOOL schan_imp_init(void)
     LOAD_FUNCPTR(gnutls_certificate_free_credentials)
     LOAD_FUNCPTR(gnutls_certificate_get_peers)
     LOAD_FUNCPTR(gnutls_cipher_get)
-    LOAD_FUNCPTR(gnutls_cipher_get_block_size)
     LOAD_FUNCPTR(gnutls_cipher_get_key_size)
     LOAD_FUNCPTR(gnutls_credentials_set)
     LOAD_FUNCPTR(gnutls_deinit)
@@ -501,6 +527,12 @@ BOOL schan_imp_init(void)
     LOAD_FUNCPTR(gnutls_transport_set_push_function)
 #undef LOAD_FUNCPTR
 
+    if (!(pgnutls_cipher_get_block_size = wine_dlsym(libgnutls_handle, "gnutls_cipher_get_block_size", NULL, 0)))
+    {
+        WARN("gnutls_cipher_get_block_size not found\n");
+        pgnutls_cipher_get_block_size = compat_cipher_get_block_size;
+    }
+
     ret = pgnutls_global_init();
     if (ret != GNUTLS_E_SUCCESS)
     {




More information about the wine-cvs mailing list