Robert Shearman : wininet: Don'
t continue to connect to a secure server without SSL support since it
won' t work.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Mar 6 15:27:48 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 9981f337e3aa38cc1b1cbf89f646030397540cd8
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9981f337e3aa38cc1b1cbf89f646030397540cd8
Author: Robert Shearman <rob at codeweavers.com>
Date: Mon Mar 6 17:31:09 2006 +0000
wininet: Don't continue to connect to a secure server without SSL support since it won't work.
Don't continue to connect to a secure server without SSL support since
it won't work. Return an error back to the application instead.
---
dlls/wininet/http.c | 11 +++++++++--
dlls/wininet/internet.h | 2 +-
dlls/wininet/netconnection.c | 31 ++++++++++++++++++-------------
3 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 9e74001..495b0b5 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1016,7 +1016,12 @@ HINTERNET WINAPI HTTP_HttpOpenRequestW(L
goto lend;
}
- NETCON_init(&lpwhr->netConnection, dwFlags & INTERNET_FLAG_SECURE);
+ if (!NETCON_init(&lpwhr->netConnection, dwFlags & INTERNET_FLAG_SECURE))
+ {
+ InternetCloseHandle( handle );
+ handle = NULL;
+ goto lend;
+ }
if (NULL != lpszObjectName && strlenW(lpszObjectName)) {
HRESULT rc;
@@ -2077,7 +2082,9 @@ static BOOL HTTP_HandleRedirect(LPWININE
szaddr, strlen(szaddr)+1);
NETCON_close(&lpwhr->netConnection);
- NETCON_init(&lpwhr->netConnection,lpwhr->hdr.dwFlags & INTERNET_FLAG_SECURE);
+
+ if (!NETCON_init(&lpwhr->netConnection,lpwhr->hdr.dwFlags & INTERNET_FLAG_SECURE))
+ return FALSE;
}
HeapFree(GetProcessHeap(), 0, lpwhr->lpszPath);
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 6df7e31..6399de9 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -468,7 +468,7 @@ VOID INTERNET_SendCallback(LPWININETHAND
LPHTTPHEADERW HTTP_GetHeader(LPWININETHTTPREQW lpwhr, LPCWSTR header);
BOOL NETCON_connected(WININET_NETCONNECTION *connection);
-void NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
+BOOL NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
BOOL NETCON_create(WININET_NETCONNECTION *connection, int domain,
int type, int protocol);
BOOL NETCON_close(WININET_NETCONNECTION *connection);
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index 97608b6..e046e04 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
@@ -111,7 +111,7 @@ MAKE_FUNCPTR(ERR_error_string);
#endif
-void NETCON_init(WININET_NETCONNECTION *connection, BOOL useSSL)
+BOOL NETCON_init(WININET_NETCONNECTION *connection, BOOL useSSL)
{
connection->useSSL = FALSE;
connection->socketFD = -1;
@@ -119,23 +119,23 @@ void NETCON_init(WININET_NETCONNECTION *
{
#if defined HAVE_OPENSSL_SSL_H && defined HAVE_OPENSSL_ERR_H
TRACE("using SSL connection\n");
- if (OpenSSL_ssl_handle) /* already initilzed everything */
- return;
+ if (OpenSSL_ssl_handle) /* already initialized everything */
+ return TRUE;
OpenSSL_ssl_handle = wine_dlopen(SONAME_LIBSSL, RTLD_NOW, NULL, 0);
if (!OpenSSL_ssl_handle)
{
ERR("trying to use a SSL connection, but couldn't load %s. Expect trouble.\n",
SONAME_LIBSSL);
- connection->useSSL = FALSE;
- return;
+ INTERNET_SetLastError(ERROR_INTERNET_SECURITY_CHANNEL_ERROR);
+ return FALSE;
}
OpenSSL_crypto_handle = wine_dlopen(SONAME_LIBCRYPTO, RTLD_NOW, NULL, 0);
if (!OpenSSL_crypto_handle)
{
ERR("trying to use a SSL connection, but couldn't load %s. Expect trouble.\n",
SONAME_LIBCRYPTO);
- connection->useSSL = FALSE;
- return;
+ INTERNET_SetLastError(ERROR_INTERNET_SECURITY_CHANNEL_ERROR);
+ return FALSE;
}
/* mmm nice ugly macroness */
@@ -144,8 +144,8 @@ void NETCON_init(WININET_NETCONNECTION *
if (!p##x) \
{ \
ERR("failed to load symbol %s\n", #x); \
- connection->useSSL = FALSE; \
- return; \
+ INTERNET_SetLastError(ERROR_INTERNET_SECURITY_CHANNEL_ERROR); \
+ return FALSE; \
}
DYNSSL(SSL_library_init);
@@ -172,8 +172,8 @@ void NETCON_init(WININET_NETCONNECTION *
if (!p##x) \
{ \
ERR("failed to load symbol %s\n", #x); \
- connection->useSSL = FALSE; \
- return; \
+ INTERNET_SetLastError(ERROR_INTERNET_SECURITY_CHANNEL_ERROR); \
+ return FALSE; \
}
DYNCRYPTO(BIO_new_fp);
DYNCRYPTO(ERR_get_error);
@@ -189,9 +189,11 @@ void NETCON_init(WININET_NETCONNECTION *
connection->peek_msg_mem = NULL;
#else
FIXME("can't use SSL, not compiled in.\n");
- connection->useSSL = FALSE;
+ INTERNET_SetLastError(ERROR_INTERNET_SECURITY_CHANNEL_ERROR);
+ return FALSE;
#endif
}
+ return TRUE;
}
BOOL NETCON_connected(WININET_NETCONNECTION *connection)
@@ -353,6 +355,7 @@ BOOL NETCON_secure_connect(WININET_NETCO
{
ERR("SSL_CTX_set_default_verify_paths failed: %s\n",
pERR_error_string(pERR_get_error(), 0));
+ INTERNET_SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
connection->ssl_s = pSSL_new(ctx);
@@ -360,6 +363,7 @@ BOOL NETCON_secure_connect(WININET_NETCO
{
ERR("SSL_new failed: %s\n",
pERR_error_string(pERR_get_error(), 0));
+ INTERNET_SetLastError(ERROR_OUTOFMEMORY);
goto fail;
}
@@ -367,6 +371,7 @@ BOOL NETCON_secure_connect(WININET_NETCO
{
ERR("SSL_set_fd failed: %s\n",
pERR_error_string(pERR_get_error(), 0));
+ INTERNET_SetLastError(ERROR_INTERNET_SECURITY_CHANNEL_ERROR);
goto fail;
}
@@ -397,7 +402,7 @@ BOOL NETCON_secure_connect(WININET_NETCO
hostname_unix = HeapAlloc(GetProcessHeap(), 0, len);
if (!hostname_unix)
{
- INTERNET_SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ INTERNET_SetLastError(ERROR_OUTOFMEMORY);
goto fail;
}
WideCharToMultiByte(CP_UNIXCP, 0, hostname, -1, hostname_unix, len, NULL, NULL);
More information about the wine-cvs
mailing list