Juan Lang : wininet: Store WININET_NETCONNECTION * in SSL context.
Alexandre Julliard
julliard at winehq.org
Thu Dec 2 16:30:50 CST 2010
Module: wine
Branch: stable
Commit: f59f6fd6b532348e72ae676f56479174b6401075
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f59f6fd6b532348e72ae676f56479174b6401075
Author: Juan Lang <juan.lang at gmail.com>
Date: Tue Sep 28 16:33:19 2010 -0700
wininet: Store WININET_NETCONNECTION * in SSL context.
(cherry picked from commit ce0164c3f784e1768b74296b7a19c92d030a8723)
---
dlls/wininet/netconnection.c | 25 ++++++++++++++++++++++++-
1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index 07786d3..12aef21 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
@@ -117,6 +117,7 @@ static SSL_METHOD *meth;
static SSL_CTX *ctx;
static int hostname_idx;
static int error_idx;
+static int conn_idx;
#define MAKE_FUNCPTR(f) static typeof(f) * p##f
@@ -454,6 +455,15 @@ DWORD NETCON_init(WININET_NETCONNECTION *connection, BOOL useSSL)
LeaveCriticalSection(&init_ssl_cs);
return ERROR_OUTOFMEMORY;
}
+ conn_idx = pSSL_get_ex_new_index(0, (void *)"netconn index",
+ NULL, NULL, NULL);
+ if (conn_idx == -1)
+ {
+ ERR("SSL_get_ex_new_index failed; %s\n",
+ pERR_error_string(pERR_get_error(), 0));
+ LeaveCriticalSection(&init_ssl_cs);
+ return ERROR_OUTOFMEMORY;
+ }
pSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, netconn_secure_verify);
pCRYPTO_set_id_callback(ssl_thread_id);
@@ -665,7 +675,20 @@ DWORD NETCON_secure_connect(WININET_NETCONNECTION *connection, LPWSTR hostname)
ERR("SSL_connect failed: %d\n", res);
goto fail;
}
- pSSL_set_ex_data(connection->ssl_s, hostname_idx, hostname);
+ if (!pSSL_set_ex_data(connection->ssl_s, hostname_idx, hostname))
+ {
+ ERR("SSL_set_ex_data failed: %s\n",
+ pERR_error_string(pERR_get_error(), 0));
+ res = ERROR_INTERNET_SECURITY_CHANNEL_ERROR;
+ goto fail;
+ }
+ if (!pSSL_set_ex_data(connection->ssl_s, conn_idx, connection))
+ {
+ ERR("SSL_set_ex_data failed: %s\n",
+ pERR_error_string(pERR_get_error(), 0));
+ res = ERROR_INTERNET_SECURITY_CHANNEL_ERROR;
+ goto fail;
+ }
cert = pSSL_get_peer_certificate(connection->ssl_s);
if (!cert)
{
More information about the wine-cvs
mailing list