Author: akhaldi Date: Mon Sep 28 11:23:36 2015 New Revision: 69395
URL: http://svn.reactos.org/svn/reactos?rev=69395&view=rev Log: [GNUTLS] Get rid of what's left of the GnuTLS back-end. CORE-9065
Removed: trunk/reactos/dll/win32/schannel/msvc_typeof_hack.h trunk/reactos/dll/win32/schannel/schannel_gnutls.c trunk/reactos/include/reactos/libs/gnutls/ Modified: trunk/reactos/boot/bootdata/packages/reactos.dff.in
Modified: trunk/reactos/boot/bootdata/packages/reactos.dff.in URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/packages/reac... ============================================================================== --- trunk/reactos/boot/bootdata/packages/reactos.dff.in [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/packages/reactos.dff.in [iso-8859-1] Mon Sep 28 11:23:36 2015 @@ -69,7 +69,6 @@ 50 = security\templates 51 = system32\CatRoot 52 = system32\CatRoot2 -53 = system32\gnutls
.InfEnd
@@ -107,13 +106,4 @@ "modules/optional/vmx_svga.sys" 2 optional "modules/optional/wine_gecko-2.34-x86.msi" 4 optional "boot/bootdata/bootcdregtest/AHKAppTests.cmd" 7 optional -"modules/optional/gnutls/libgcc_s_sjlj-1.dll" 53 optional -"modules/optional/gnutls/libgmp-10.dll" 53 optional -"modules/optional/gnutls/libgnutls-28.dll" 53 optional -"modules/optional/gnutls/libgnutls-xssl-0.dll" 53 optional -"modules/optional/gnutls/libhogweed-2-5.dll" 53 optional -"modules/optional/gnutls/libnettle-4-7.dll" 53 optional -"modules/optional/gnutls/libp11-kit-0.dll" 53 optional -"modules/optional/gnutls/libwinpthread-1.dll" 53 optional -"modules/optional/gnutls/zlib1.dll" 53 optional ; DON'T REMOVE THE FOLLOWING NEW LINE ! THIS MEANS YOU !
Removed: trunk/reactos/dll/win32/schannel/msvc_typeof_hack.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/schannel/msvc_typ... ============================================================================== --- trunk/reactos/dll/win32/schannel/msvc_typeof_hack.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/schannel/msvc_typeof_hack.h (removed) @@ -1,48 +0,0 @@ - -#pragma once - -#define typeof(_X) __typeof_ ## _X - -typedef gnutls_alert_description_t (__cdecl typeof(gnutls_alert_get))(gnutls_session_t session); -typedef const char* (__cdecl typeof(gnutls_alert_get_name))(gnutls_alert_description_t alert); -typedef void (__cdecl typeof(gnutls_certificate_free_credentials))(gnutls_certificate_credentials_t sc); -typedef int (__cdecl typeof(gnutls_certificate_allocate_credentials))(gnutls_certificate_credentials_t - * res); -typedef const gnutls_datum_t* (__cdecl typeof(gnutls_certificate_get_peers))(gnutls_session_t - session, unsigned int - *list_size); -typedef gnutls_cipher_algorithm_t (__cdecl typeof(gnutls_cipher_get))(gnutls_session_t session); -typedef size_t (__cdecl typeof(gnutls_cipher_get_key_size))(gnutls_cipher_algorithm_t algorithm); -typedef int (__cdecl typeof(gnutls_credentials_set))(gnutls_session_t session, - gnutls_credentials_type_t type, void *cred); -typedef void (__cdecl typeof(gnutls_deinit))(gnutls_session_t session); -typedef int (__cdecl typeof(gnutls_global_init))(void); -typedef void (__cdecl typeof(gnutls_global_deinit))(void); -typedef void (__cdecl typeof(gnutls_global_set_log_function))(gnutls_log_func log_func); -typedef void (__cdecl typeof(gnutls_global_set_log_level))(int level); -typedef int (__cdecl typeof(gnutls_handshake))(gnutls_session_t session); -typedef int (__cdecl typeof(gnutls_init))(gnutls_session_t * session, unsigned int flags); -typedef gnutls_kx_algorithm_t (__cdecl typeof(gnutls_kx_get))(gnutls_session_t session); -typedef gnutls_mac_algorithm_t (__cdecl typeof(gnutls_mac_get))(gnutls_session_t session); -typedef size_t (__cdecl typeof(gnutls_mac_get_key_size))(gnutls_mac_algorithm_t algorithm); -typedef void (__cdecl typeof(gnutls_perror))(int error); -typedef gnutls_protocol_t (__cdecl typeof(gnutls_protocol_get_version))(gnutls_session_t session); -typedef int (__cdecl typeof(gnutls_priority_set_direct))(gnutls_session_t session, - const char *priorities, - const char **err_pos); -typedef size_t (__cdecl typeof(gnutls_record_get_max_size))(gnutls_session_t session); -typedef ssize_t (__cdecl typeof(gnutls_record_recv))(gnutls_session_t session, void *data, - size_t data_size); -typedef ssize_t (__cdecl typeof(gnutls_record_send))(gnutls_session_t session, const void *data, - size_t data_size); -typedef int (__cdecl typeof(gnutls_server_name_set))(gnutls_session_t session, - gnutls_server_name_type_t type, - const void *name, size_t name_length); -typedef gnutls_transport_ptr_t (__cdecl typeof(gnutls_transport_get_ptr))(gnutls_session_t session); -typedef void (__cdecl typeof(gnutls_transport_set_errno))(gnutls_session_t session, int err); -typedef void (__cdecl typeof(gnutls_transport_set_ptr))(gnutls_session_t session, - gnutls_transport_ptr_t ptr); -typedef void (__cdecl typeof(gnutls_transport_set_push_function))(gnutls_session_t session, - gnutls_push_func push_func); -typedef void (__cdecl typeof(gnutls_transport_set_pull_function))(gnutls_session_t session, - gnutls_pull_func pull_func);
Removed: trunk/reactos/dll/win32/schannel/schannel_gnutls.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/schannel/schannel... ============================================================================== --- trunk/reactos/dll/win32/schannel/schannel_gnutls.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/schannel/schannel_gnutls.c (removed) @@ -1,605 +0,0 @@ -/* - * GnuTLS-based implementation of the schannel (SSL/TLS) provider. - * - * Copyright 2005 Juan Lang - * Copyright 2008 Henri Verbeet - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "precomp.h" - -#include <wine/config.h> -#include <wine/port.h> -#include <wine/library.h> -#include <strsafe.h> - -#ifdef SONAME_LIBGNUTLS -#include <gnutls/gnutls.h> -#include <gnutls/crypto.h> -#endif - -#define __wine_dbch_secur32 __wine_dbch_schannel - -#if defined(SONAME_LIBGNUTLS) && !defined(HAVE_SECURITY_SECURITY_H) && !defined(SONAME_LIBMBEDTLS) - -static void *libgnutls_handle; - -#ifdef _MSC_VER -#include "msvc_typeof_hack.h" -#endif - -#define MAKE_FUNCPTR(f) static typeof(f) * p##f -MAKE_FUNCPTR(gnutls_alert_get); -MAKE_FUNCPTR(gnutls_alert_get_name); -MAKE_FUNCPTR(gnutls_certificate_allocate_credentials); -MAKE_FUNCPTR(gnutls_certificate_free_credentials); -MAKE_FUNCPTR(gnutls_certificate_get_peers); -MAKE_FUNCPTR(gnutls_cipher_get); -MAKE_FUNCPTR(gnutls_cipher_get_key_size); -MAKE_FUNCPTR(gnutls_credentials_set); -MAKE_FUNCPTR(gnutls_deinit); -MAKE_FUNCPTR(gnutls_global_deinit); -MAKE_FUNCPTR(gnutls_global_init); -MAKE_FUNCPTR(gnutls_global_set_log_function); -MAKE_FUNCPTR(gnutls_global_set_log_level); -MAKE_FUNCPTR(gnutls_handshake); -MAKE_FUNCPTR(gnutls_init); -MAKE_FUNCPTR(gnutls_kx_get); -MAKE_FUNCPTR(gnutls_mac_get); -MAKE_FUNCPTR(gnutls_mac_get_key_size); -MAKE_FUNCPTR(gnutls_perror); -MAKE_FUNCPTR(gnutls_protocol_get_version); -MAKE_FUNCPTR(gnutls_priority_set_direct); -MAKE_FUNCPTR(gnutls_record_get_max_size); -MAKE_FUNCPTR(gnutls_record_recv); -MAKE_FUNCPTR(gnutls_record_send); -MAKE_FUNCPTR(gnutls_server_name_set); -MAKE_FUNCPTR(gnutls_transport_get_ptr); -MAKE_FUNCPTR(gnutls_transport_set_errno); -MAKE_FUNCPTR(gnutls_transport_set_ptr); -MAKE_FUNCPTR(gnutls_transport_set_pull_function); -MAKE_FUNCPTR(gnutls_transport_set_push_function); -#undef MAKE_FUNCPTR - - - -static ssize_t schan_pull_adapter(gnutls_transport_ptr_t transport, - void *buff, size_t buff_len) -{ - struct schan_transport *t = (struct schan_transport*)transport; - gnutls_session_t s = (gnutls_session_t)schan_session_for_transport(t); - - int ret = schan_pull(transport, buff, &buff_len); - if (ret) - { - pgnutls_transport_set_errno(s, ret); - return -1; - } - - return buff_len; -} - -static ssize_t schan_push_adapter(gnutls_transport_ptr_t transport, - const void *buff, size_t buff_len) -{ - struct schan_transport *t = (struct schan_transport*)transport; - gnutls_session_t s = (gnutls_session_t)schan_session_for_transport(t); - - int ret = schan_push(transport, buff, &buff_len); - if (ret) - { - pgnutls_transport_set_errno(s, ret); - return -1; - } - - return buff_len; -} - -static const struct { - DWORD enable_flag; - const char *gnutls_flag; -} protocol_priority_flags[] = { - {SP_PROT_TLS1_2_CLIENT, "VERS-TLS1.2"}, - {SP_PROT_TLS1_1_CLIENT, "VERS-TLS1.1"}, - {SP_PROT_TLS1_0_CLIENT, "VERS-TLS1.0"}, - {SP_PROT_SSL3_CLIENT, "VERS-SSL3.0"} - /* {SP_PROT_SSL2_CLIENT} is not supported by GnuTLS */ -}; - -DWORD schan_imp_enabled_protocols(void) -{ - /* NOTE: No support for SSL 2.0 */ - return SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT; -} - -BOOL schan_imp_create_session(schan_imp_session *session, schan_credentials *cred) -{ - gnutls_session_t *s = (gnutls_session_t*)session; - char priority[64] = "NORMAL", *p; - unsigned i; - - int err = pgnutls_init(s, cred->credential_use == SECPKG_CRED_INBOUND ? GNUTLS_SERVER : GNUTLS_CLIENT); - if (err != GNUTLS_E_SUCCESS) - { - pgnutls_perror(err); - return FALSE; - } - - p = priority + strlen(priority); - for(i=0; i < sizeof(protocol_priority_flags)/sizeof(*protocol_priority_flags); i++) { - *p++ = ':'; - *p++ = (cred->enabled_protocols & protocol_priority_flags[i].enable_flag) ? '+' : '-'; - strcpy(p, protocol_priority_flags[i].gnutls_flag); - p += strlen(p); - } - - TRACE("Using %s priority\n", debugstr_a(priority)); - err = pgnutls_priority_set_direct(*s, priority, NULL); - if (err != GNUTLS_E_SUCCESS) - { - pgnutls_perror(err); - pgnutls_deinit(*s); - return FALSE; - } - - err = pgnutls_credentials_set(*s, GNUTLS_CRD_CERTIFICATE, - (gnutls_certificate_credentials_t)cred->credentials); - if (err != GNUTLS_E_SUCCESS) - { - pgnutls_perror(err); - pgnutls_deinit(*s); - return FALSE; - } - - pgnutls_transport_set_pull_function(*s, schan_pull_adapter); - pgnutls_transport_set_push_function(*s, schan_push_adapter); - - return TRUE; -} - -void schan_imp_dispose_session(schan_imp_session session) -{ - gnutls_session_t s = (gnutls_session_t)session; - pgnutls_deinit(s); -} - -void schan_imp_set_session_transport(schan_imp_session session, - struct schan_transport *t) -{ - gnutls_session_t s = (gnutls_session_t)session; - pgnutls_transport_set_ptr(s, (gnutls_transport_ptr_t)t); -} - -void schan_imp_set_session_target(schan_imp_session session, const char *target) -{ - gnutls_session_t s = (gnutls_session_t)session; - - pgnutls_server_name_set( s, GNUTLS_NAME_DNS, target, strlen(target) ); -} - -SECURITY_STATUS schan_imp_handshake(schan_imp_session session) -{ - gnutls_session_t s = (gnutls_session_t)session; - int err; - - while(1) { - err = pgnutls_handshake(s); - switch(err) { - case GNUTLS_E_SUCCESS: - TRACE("Handshake completed\n"); - return SEC_E_OK; - - case GNUTLS_E_AGAIN: - TRACE("Continue...\n"); - return SEC_I_CONTINUE_NEEDED; - - case GNUTLS_E_WARNING_ALERT_RECEIVED: - { - gnutls_alert_description_t alert = pgnutls_alert_get(s); - - WARN("WARNING ALERT: %d %s\n", alert, pgnutls_alert_get_name(alert)); - - switch(alert) { - case GNUTLS_A_UNRECOGNIZED_NAME: - TRACE("Ignoring\n"); - continue; - default: - return SEC_E_INTERNAL_ERROR; - } - } - - case GNUTLS_E_FATAL_ALERT_RECEIVED: - { - gnutls_alert_description_t alert = pgnutls_alert_get(s); - WARN("FATAL ALERT: %d %s\n", alert, pgnutls_alert_get_name(alert)); - return SEC_E_INTERNAL_ERROR; - } - - default: - pgnutls_perror(err); - return SEC_E_INTERNAL_ERROR; - } - } - - /* Never reached */ - return SEC_E_OK; -} - -static unsigned int schannel_get_cipher_block_size(gnutls_cipher_algorithm_t cipher) -{ - const struct - { - gnutls_cipher_algorithm_t cipher; - unsigned int block_size; - } - algorithms[] = - { - {GNUTLS_CIPHER_3DES_CBC, 8}, - {GNUTLS_CIPHER_AES_128_CBC, 16}, - {GNUTLS_CIPHER_AES_256_CBC, 16}, - {GNUTLS_CIPHER_ARCFOUR_128, 1}, - {GNUTLS_CIPHER_ARCFOUR_40, 1}, - {GNUTLS_CIPHER_DES_CBC, 8}, - {GNUTLS_CIPHER_NULL, 1}, - {GNUTLS_CIPHER_RC2_40_CBC, 8}, - }; - unsigned int i; - - for (i = 0; i < sizeof(algorithms) / sizeof(*algorithms); ++i) - { - if (algorithms[i].cipher == cipher) - return algorithms[i].block_size; - } - - FIXME("Unknown cipher %#x, returning 1\n", cipher); - - return 1; -} - -static DWORD schannel_get_protocol(gnutls_protocol_t proto) -{ - /* FIXME: currently schannel only implements client connections, but - * there's no reason it couldn't be used for servers as well. The - * context doesn't tell us which it is, so assume client for now. - */ - switch (proto) - { - case GNUTLS_SSL3: return SP_PROT_SSL3_CLIENT; - case GNUTLS_TLS1_0: return SP_PROT_TLS1_0_CLIENT; - case GNUTLS_TLS1_1: return SP_PROT_TLS1_1_CLIENT; - case GNUTLS_TLS1_2: return SP_PROT_TLS1_2_CLIENT; - default: - FIXME("unknown protocol %d\n", proto); - return 0; - } -} - -static ALG_ID schannel_get_cipher_algid(gnutls_cipher_algorithm_t cipher) -{ - switch (cipher) - { - case GNUTLS_CIPHER_UNKNOWN: - case GNUTLS_CIPHER_NULL: return 0; - case GNUTLS_CIPHER_ARCFOUR_40: - case GNUTLS_CIPHER_ARCFOUR_128: return CALG_RC4; - case GNUTLS_CIPHER_DES_CBC: - case GNUTLS_CIPHER_3DES_CBC: return CALG_DES; - case GNUTLS_CIPHER_AES_128_CBC: - case GNUTLS_CIPHER_AES_256_CBC: return CALG_AES; - case GNUTLS_CIPHER_RC2_40_CBC: return CALG_RC2; - default: - FIXME("unknown algorithm %d\n", cipher); - return 0; - } -} - -static ALG_ID schannel_get_mac_algid(gnutls_mac_algorithm_t mac) -{ - switch (mac) - { - case GNUTLS_MAC_UNKNOWN: - case GNUTLS_MAC_NULL: return 0; - case GNUTLS_MAC_MD5: return CALG_MD5; - case GNUTLS_MAC_SHA1: - case GNUTLS_MAC_SHA256: - case GNUTLS_MAC_SHA384: - case GNUTLS_MAC_SHA512: return CALG_SHA; - default: - FIXME("unknown algorithm %d\n", mac); - return 0; - } -} - -static ALG_ID schannel_get_kx_algid(gnutls_kx_algorithm_t kx) -{ - switch (kx) - { - case GNUTLS_KX_RSA: return CALG_RSA_KEYX; - case GNUTLS_KX_DHE_DSS: - case GNUTLS_KX_DHE_RSA: return CALG_DH_EPHEM; - default: - FIXME("unknown algorithm %d\n", kx); - return 0; - } -} - -unsigned int schan_imp_get_session_cipher_block_size(schan_imp_session session) -{ - gnutls_session_t s = (gnutls_session_t)session; - gnutls_cipher_algorithm_t cipher = pgnutls_cipher_get(s); - return schannel_get_cipher_block_size(cipher); -} - -unsigned int schan_imp_get_max_message_size(schan_imp_session session) -{ - return pgnutls_record_get_max_size((gnutls_session_t)session); -} - -SECURITY_STATUS schan_imp_get_connection_info(schan_imp_session session, - SecPkgContext_ConnectionInfo *info) -{ - gnutls_session_t s = (gnutls_session_t)session; - gnutls_protocol_t proto = pgnutls_protocol_get_version(s); - gnutls_cipher_algorithm_t alg = pgnutls_cipher_get(s); - gnutls_mac_algorithm_t mac = pgnutls_mac_get(s); - gnutls_kx_algorithm_t kx = pgnutls_kx_get(s); - - info->dwProtocol = schannel_get_protocol(proto); - info->aiCipher = schannel_get_cipher_algid(alg); - info->dwCipherStrength = pgnutls_cipher_get_key_size(alg) * 8; - info->aiHash = schannel_get_mac_algid(mac); - info->dwHashStrength = pgnutls_mac_get_key_size(mac) * 8; - info->aiExch = schannel_get_kx_algid(kx); - /* FIXME: info->dwExchStrength? */ - info->dwExchStrength = 0; - return SEC_E_OK; -} - -SECURITY_STATUS schan_imp_get_session_peer_certificate(schan_imp_session session, HCERTSTORE store, - PCCERT_CONTEXT *ret) -{ - gnutls_session_t s = (gnutls_session_t)session; - PCCERT_CONTEXT cert = NULL; - const gnutls_datum_t *datum; - unsigned list_size, i; - BOOL res; - - datum = pgnutls_certificate_get_peers(s, &list_size); - if(!datum) - return SEC_E_INTERNAL_ERROR; - - for(i = 0; i < list_size; i++) { - res = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING, datum[i].data, datum[i].size, - CERT_STORE_ADD_REPLACE_EXISTING, i ? NULL : &cert); - if(!res) { - if(i) - CertFreeCertificateContext(cert); - return GetLastError(); - } - } - - *ret = cert; - return SEC_E_OK; -} - -SECURITY_STATUS schan_imp_send(schan_imp_session session, const void *buffer, - SIZE_T *length) -{ - gnutls_session_t s = (gnutls_session_t)session; - ssize_t ret; - -again: - ret = pgnutls_record_send(s, buffer, *length); - - if (ret >= 0) - *length = ret; - else if (ret == GNUTLS_E_AGAIN) - { - struct schan_transport *t = (struct schan_transport *)pgnutls_transport_get_ptr(s); - SIZE_T count = 0; - - if (schan_get_buffer(t, &t->out, &count)) - goto again; - - return SEC_I_CONTINUE_NEEDED; - } - else - { - pgnutls_perror(ret); - return SEC_E_INTERNAL_ERROR; - } - - return SEC_E_OK; -} - -SECURITY_STATUS schan_imp_recv(schan_imp_session session, void *buffer, - SIZE_T *length) -{ - gnutls_session_t s = (gnutls_session_t)session; - ssize_t ret; - -again: - ret = pgnutls_record_recv(s, buffer, *length); - - if (ret >= 0) - *length = ret; - else if (ret == GNUTLS_E_AGAIN) - { - struct schan_transport *t = (struct schan_transport *)pgnutls_transport_get_ptr(s); - SIZE_T count = 0; - - if (schan_get_buffer(t, &t->in, &count)) - goto again; - - return SEC_I_CONTINUE_NEEDED; - } - else - { - pgnutls_perror(ret); - return SEC_E_INTERNAL_ERROR; - } - - return SEC_E_OK; -} - -BOOL schan_imp_allocate_certificate_credentials(schan_credentials *c) -{ - int ret = pgnutls_certificate_allocate_credentials((gnutls_certificate_credentials_t*)&c->credentials); - if (ret != GNUTLS_E_SUCCESS) - pgnutls_perror(ret); - return (ret == GNUTLS_E_SUCCESS); -} - -void schan_imp_free_certificate_credentials(schan_credentials *c) -{ - pgnutls_certificate_free_credentials(c->credentials); -} - -static void schan_gnutls_log(int level, const char *msg) -{ - TRACE("<%d> %s", level, msg); -} - -BOOL schan_imp_init(void) -{ - int ret; - -#ifndef __REACTOS__ - 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; \ - } -#else -/* - static const WCHAR RosSchannelKey[] = L"Software\ReactOS\Schannel"; - static const WCHAR PathValue[] = L"GnuTLSPath"; - WCHAR Path[MAX_PATH]; - DWORD PathSize = sizeof(Path), ValueType; - HKEY Key; - DWORD Error; - - Error = RegOpenKeyW(HKEY_LOCAL_MACHINE, RosSchannelKey, &Key); - if(Error != ERROR_SUCCESS) - return FALSE; - - Error = RegQueryValueExW(Key, PathValue, NULL, &ValueType, (LPBYTE)Path, &PathSize); - RegCloseKey(Key); - if ((Error != ERROR_SUCCESS) || (ValueType != REG_SZ)) - return FALSE; - wcscat(Path, L"\"); - wcscat(Path, SONAME_LIBGNUTLS); -*/ - WCHAR Path[MAX_PATH]; - DWORD PathSize = sizeof(Path); - PathSize = GetSystemDirectoryW(Path, PathSize); - if(!PathSize) - return FALSE; - wcscat(Path, L"\"); - wcscat(Path, SONAME_LIBGNUTLS); - - libgnutls_handle = LoadLibraryExW(Path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - if (!libgnutls_handle) - { - ERR("Could not load %S.\n", Path); - return FALSE; - } - -#define LOAD_FUNCPTR(f) \ - if (!(p##f = (void*)GetProcAddress(libgnutls_handle, #f))) \ - { \ - ERR("Failed to load %s\n", #f); \ - goto fail; \ - } -#endif // __REACTOS__ - - 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_priority_set_direct) - LOAD_FUNCPTR(gnutls_record_get_max_size); - LOAD_FUNCPTR(gnutls_record_recv); - LOAD_FUNCPTR(gnutls_record_send); - LOAD_FUNCPTR(gnutls_server_name_set) - LOAD_FUNCPTR(gnutls_transport_get_ptr) - 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: -#ifndef __REACTOS__ - wine_dlclose(libgnutls_handle, NULL, 0); -#else - FreeLibrary(libgnutls_handle); -#endif - libgnutls_handle = NULL; - return FALSE; -} - -void schan_imp_deinit(void) -{ - pgnutls_global_deinit(); -#ifndef __REACTOS__ - wine_dlclose(libgnutls_handle, NULL, 0); -#else - FreeLibrary(libgnutls_handle); -#endif - libgnutls_handle = NULL; -} - -#endif /* SONAME_LIBGNUTLS && !HAVE_SECURITY_SECURITY_H && !SONAME_LIBMBEDTLS */