Ken Thomases : secur32: Extract schan_imp_init/deinit functions.
Alexandre Julliard
julliard at winehq.org
Mon Mar 14 14:29:44 CDT 2011
Module: wine
Branch: master
Commit: 2cecf544277a99c2db62d301c0b1ca2a34989117
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2cecf544277a99c2db62d301c0b1ca2a34989117
Author: Ken Thomases <ken at codeweavers.com>
Date: Sun Mar 13 18:58:31 2011 -0500
secur32: Extract schan_imp_init/deinit functions.
---
dlls/secur32/schannel.c | 149 ++++++++++++++++++++++++++--------------------
1 files changed, 84 insertions(+), 65 deletions(-)
diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index da19b36..0e49112 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -391,6 +391,86 @@ static void schan_imp_free_certificate_credentials(schan_imp_certificate_credent
pgnutls_certificate_free_credentials((gnutls_certificate_credentials)c);
}
+static void schan_gnutls_log(int level, const char *msg)
+{
+ TRACE("<%d> %s", level, msg);
+}
+
+static BOOL schan_imp_init(void)
+{
+ int ret;
+
+ libgnutls_handle = wine_dlopen(SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0);
+ if (!libgnutls_handle)
+ {
+ WARN("Failed to load libgnutls.\n");
+ return FALSE;
+ }
+
+#define LOAD_FUNCPTR(f) \
+ if (!(p##f = wine_dlsym(libgnutls_handle, #f, NULL, 0))) \
+ { \
+ ERR("Failed to load %s\n", #f); \
+ goto fail; \
+ }
+
+ LOAD_FUNCPTR(gnutls_alert_get)
+ LOAD_FUNCPTR(gnutls_alert_get_name)
+ LOAD_FUNCPTR(gnutls_certificate_allocate_credentials)
+ LOAD_FUNCPTR(gnutls_certificate_free_credentials)
+ LOAD_FUNCPTR(gnutls_certificate_get_peers)
+ LOAD_FUNCPTR(gnutls_cipher_get)
+ LOAD_FUNCPTR(gnutls_cipher_get_key_size)
+ LOAD_FUNCPTR(gnutls_credentials_set)
+ LOAD_FUNCPTR(gnutls_deinit)
+ LOAD_FUNCPTR(gnutls_global_deinit)
+ LOAD_FUNCPTR(gnutls_global_init)
+ LOAD_FUNCPTR(gnutls_global_set_log_function)
+ LOAD_FUNCPTR(gnutls_global_set_log_level)
+ LOAD_FUNCPTR(gnutls_handshake)
+ LOAD_FUNCPTR(gnutls_init)
+ LOAD_FUNCPTR(gnutls_kx_get)
+ LOAD_FUNCPTR(gnutls_mac_get)
+ LOAD_FUNCPTR(gnutls_mac_get_key_size)
+ LOAD_FUNCPTR(gnutls_perror)
+ LOAD_FUNCPTR(gnutls_protocol_get_version)
+ LOAD_FUNCPTR(gnutls_set_default_priority)
+ LOAD_FUNCPTR(gnutls_record_recv);
+ LOAD_FUNCPTR(gnutls_record_send);
+ LOAD_FUNCPTR(gnutls_transport_set_errno)
+ LOAD_FUNCPTR(gnutls_transport_set_ptr)
+ LOAD_FUNCPTR(gnutls_transport_set_pull_function)
+ LOAD_FUNCPTR(gnutls_transport_set_push_function)
+#undef LOAD_FUNCPTR
+
+ ret = pgnutls_global_init();
+ if (ret != GNUTLS_E_SUCCESS)
+ {
+ pgnutls_perror(ret);
+ goto fail;
+ }
+
+ if (TRACE_ON(secur32))
+ {
+ pgnutls_global_set_log_level(4);
+ pgnutls_global_set_log_function(schan_gnutls_log);
+ }
+
+ return TRUE;
+
+fail:
+ wine_dlclose(libgnutls_handle, NULL, 0);
+ libgnutls_handle = NULL;
+ return FALSE;
+}
+
+static void schan_imp_deinit(void)
+{
+ pgnutls_global_deinit();
+ wine_dlclose(libgnutls_handle, NULL, 0);
+ libgnutls_handle = NULL;
+}
+
#define SCHAN_INVALID_HANDLE ~0UL
@@ -1520,11 +1600,6 @@ static SECURITY_STATUS SEC_ENTRY schan_DeleteSecurityContext(PCtxtHandle context
return SEC_E_OK;
}
-static void schan_gnutls_log(int level, const char *msg)
-{
- TRACE("<%d> %s", level, msg);
-}
-
static const SecurityFunctionTableA schanTableA = {
1,
NULL, /* EnumerateSecurityPackagesA */
@@ -1616,63 +1691,9 @@ void SECUR32_initSchannelSP(void)
(SEC_WCHAR *)schannelComment },
};
SecureProvider *provider;
- int ret;
- libgnutls_handle = wine_dlopen(SONAME_LIBGNUTLS, RTLD_NOW, NULL, 0);
- if (!libgnutls_handle)
- {
- WARN("Failed to load libgnutls.\n");
+ if (!schan_imp_init())
return;
- }
-
-#define LOAD_FUNCPTR(f) \
- if (!(p##f = wine_dlsym(libgnutls_handle, #f, NULL, 0))) \
- { \
- ERR("Failed to load %s\n", #f); \
- goto fail; \
- }
-
- LOAD_FUNCPTR(gnutls_alert_get)
- LOAD_FUNCPTR(gnutls_alert_get_name)
- LOAD_FUNCPTR(gnutls_certificate_allocate_credentials)
- LOAD_FUNCPTR(gnutls_certificate_free_credentials)
- LOAD_FUNCPTR(gnutls_certificate_get_peers)
- LOAD_FUNCPTR(gnutls_cipher_get)
- LOAD_FUNCPTR(gnutls_cipher_get_key_size)
- LOAD_FUNCPTR(gnutls_credentials_set)
- LOAD_FUNCPTR(gnutls_deinit)
- LOAD_FUNCPTR(gnutls_global_deinit)
- LOAD_FUNCPTR(gnutls_global_init)
- LOAD_FUNCPTR(gnutls_global_set_log_function)
- LOAD_FUNCPTR(gnutls_global_set_log_level)
- LOAD_FUNCPTR(gnutls_handshake)
- LOAD_FUNCPTR(gnutls_init)
- LOAD_FUNCPTR(gnutls_kx_get)
- LOAD_FUNCPTR(gnutls_mac_get)
- LOAD_FUNCPTR(gnutls_mac_get_key_size)
- LOAD_FUNCPTR(gnutls_perror)
- LOAD_FUNCPTR(gnutls_protocol_get_version)
- LOAD_FUNCPTR(gnutls_set_default_priority)
- LOAD_FUNCPTR(gnutls_record_recv);
- LOAD_FUNCPTR(gnutls_record_send);
- LOAD_FUNCPTR(gnutls_transport_set_errno)
- LOAD_FUNCPTR(gnutls_transport_set_ptr)
- LOAD_FUNCPTR(gnutls_transport_set_pull_function)
- LOAD_FUNCPTR(gnutls_transport_set_push_function)
-#undef LOAD_FUNCPTR
-
- ret = pgnutls_global_init();
- if (ret != GNUTLS_E_SUCCESS)
- {
- pgnutls_perror(ret);
- goto fail;
- }
-
- if (TRACE_ON(secur32))
- {
- pgnutls_global_set_log_level(4);
- pgnutls_global_set_log_function(schan_gnutls_log);
- }
schan_handle_table = HeapAlloc(GetProcessHeap(), 0, 64 * sizeof(*schan_handle_table));
if (!schan_handle_table)
@@ -1696,8 +1717,7 @@ void SECUR32_initSchannelSP(void)
fail:
HeapFree(GetProcessHeap(), 0, schan_handle_table);
schan_handle_table = NULL;
- wine_dlclose(libgnutls_handle, NULL, 0);
- libgnutls_handle = NULL;
+ schan_imp_deinit();
return;
}
@@ -1705,7 +1725,7 @@ void SECUR32_deinitSchannelSP(void)
{
SIZE_T i = schan_handle_count;
- if (!libgnutls_handle) return;
+ if (!schan_handle_table) return;
/* deinitialized sessions first because a pointer to the credentials
* may be stored for the session. */
@@ -1730,8 +1750,7 @@ void SECUR32_deinitSchannelSP(void)
}
}
HeapFree(GetProcessHeap(), 0, schan_handle_table);
- pgnutls_global_deinit();
- wine_dlclose(libgnutls_handle, NULL, 0);
+ schan_imp_deinit();
}
#else /* SONAME_LIBGNUTLS */
More information about the wine-cvs
mailing list