Jacek Caban : wininet: Move InternetQueryOption( INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT) to vtbl.
Alexandre Julliard
julliard at winehq.org
Wed Mar 12 06:44:22 CDT 2008
Module: wine
Branch: master
Commit: 7e63f95326b27e7a524a018b11a0307454120615
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7e63f95326b27e7a524a018b11a0307454120615
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Mar 12 02:24:23 2008 +0100
wininet: Move InternetQueryOption(INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT) to vtbl.
---
dlls/wininet/http.c | 63 ++++++++++++++++++++++++++++++++++++
dlls/wininet/internet.c | 82 -----------------------------------------------
2 files changed, 63 insertions(+), 82 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index aa8aecd..5ea8a45 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -55,6 +55,7 @@
#define NO_SHLWAPI_GDI
#include "shlwapi.h"
#include "sspi.h"
+#include "wincrypt.h"
#include "internet.h"
#include "wine/debug.h"
@@ -1478,6 +1479,68 @@ static DWORD HTTPREQ_QueryOption(WININETHANDLEHEADER *hdr, DWORD option, void *b
return ERROR_SUCCESS;
}
}
+
+ case INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT: {
+ PCCERT_CONTEXT context;
+
+ if(*size < sizeof(INTERNET_CERTIFICATE_INFOW)) {
+ *size = sizeof(INTERNET_CERTIFICATE_INFOW);
+ return ERROR_INSUFFICIENT_BUFFER;
+ }
+
+ context = (PCCERT_CONTEXT)NETCON_GetCert(&(req->netConnection));
+ if(context) {
+ INTERNET_CERTIFICATE_INFOW *info = (INTERNET_CERTIFICATE_INFOW*)buffer;
+ DWORD len;
+
+ memset(info, 0, sizeof(INTERNET_CERTIFICATE_INFOW));
+ info->ftExpiry = context->pCertInfo->NotAfter;
+ info->ftStart = context->pCertInfo->NotBefore;
+ if(unicode) {
+ len = CertNameToStrW(context->dwCertEncodingType,
+ &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, NULL, 0);
+ info->lpszSubjectInfo = LocalAlloc(0, len*sizeof(WCHAR));
+ if(info->lpszSubjectInfo)
+ CertNameToStrW(context->dwCertEncodingType,
+ &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
+ info->lpszSubjectInfo, len);
+ len = CertNameToStrW(context->dwCertEncodingType,
+ &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, NULL, 0);
+ info->lpszIssuerInfo = LocalAlloc(0, len*sizeof(WCHAR));
+ if (info->lpszIssuerInfo)
+ CertNameToStrW(context->dwCertEncodingType,
+ &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
+ info->lpszIssuerInfo, len);
+ }else {
+ INTERNET_CERTIFICATE_INFOA *infoA = (INTERNET_CERTIFICATE_INFOA*)info;
+
+ len = CertNameToStrA(context->dwCertEncodingType,
+ &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, NULL, 0);
+ infoA->lpszSubjectInfo = LocalAlloc(0, len);
+ if(infoA->lpszSubjectInfo)
+ CertNameToStrA(context->dwCertEncodingType,
+ &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
+ infoA->lpszSubjectInfo, len);
+ len = CertNameToStrA(context->dwCertEncodingType,
+ &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, NULL, 0);
+ infoA->lpszIssuerInfo = LocalAlloc(0, len);
+ if(infoA->lpszIssuerInfo)
+ CertNameToStrA(context->dwCertEncodingType,
+ &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
+ infoA->lpszIssuerInfo, len);
+ }
+
+ /*
+ * Contrary to MSDN, these do not appear to be set.
+ * lpszProtocolName
+ * lpszSignatureAlgName
+ * lpszEncryptionAlgName
+ * dwKeySize
+ */
+ CertFreeCertificateContext(context);
+ return ERROR_SUCCESS;
+ }
+ }
}
FIXME("Not implemented option %d\n", option);
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 89330f5..d5fbbc1 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -59,7 +59,6 @@
#include "winerror.h"
#define NO_SHLWAPI_STREAM
#include "shlwapi.h"
-#include "wincrypt.h"
#include "wine/exception.h"
@@ -2036,87 +2035,6 @@ static BOOL INET_QueryOptionHelper(BOOL bIsUnicode, HINTERNET hInternet, DWORD d
bSuccess = TRUE;
break;
- case INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT:
- if (!lpwhh)
- {
- INTERNET_SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
- if (*lpdwBufferLength < sizeof(INTERNET_CERTIFICATE_INFOW))
- {
- *lpdwBufferLength = sizeof(INTERNET_CERTIFICATE_INFOW);
- INTERNET_SetLastError(ERROR_INSUFFICIENT_BUFFER);
- }
- else if (lpwhh->htype == WH_HHTTPREQ)
- {
- LPWININETHTTPREQW lpwhr;
- PCCERT_CONTEXT context;
-
- lpwhr = (LPWININETHTTPREQW)lpwhh;
- context = (PCCERT_CONTEXT)NETCON_GetCert(&(lpwhr->netConnection));
- if (context)
- {
- LPINTERNET_CERTIFICATE_INFOW info = (LPINTERNET_CERTIFICATE_INFOW)lpBuffer;
- DWORD strLen;
-
- memset(info,0,sizeof(INTERNET_CERTIFICATE_INFOW));
- info->ftExpiry = context->pCertInfo->NotAfter;
- info->ftStart = context->pCertInfo->NotBefore;
- if (bIsUnicode)
- {
- strLen = CertNameToStrW(context->dwCertEncodingType,
- &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
- NULL, 0);
- info->lpszSubjectInfo = LocalAlloc(0,
- strLen * sizeof(WCHAR));
- if (info->lpszSubjectInfo)
- CertNameToStrW(context->dwCertEncodingType,
- &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
- info->lpszSubjectInfo, strLen);
- strLen = CertNameToStrW(context->dwCertEncodingType,
- &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
- NULL, 0);
- info->lpszIssuerInfo = LocalAlloc(0,
- strLen * sizeof(WCHAR));
- if (info->lpszIssuerInfo)
- CertNameToStrW(context->dwCertEncodingType,
- &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
- info->lpszIssuerInfo, strLen);
- }
- else
- {
- LPINTERNET_CERTIFICATE_INFOA infoA =
- (LPINTERNET_CERTIFICATE_INFOA)info;
-
- strLen = CertNameToStrA(context->dwCertEncodingType,
- &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
- NULL, 0);
- infoA->lpszSubjectInfo = LocalAlloc(0, strLen);
- if (infoA->lpszSubjectInfo)
- CertNameToStrA(context->dwCertEncodingType,
- &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
- infoA->lpszSubjectInfo, strLen);
- strLen = CertNameToStrA(context->dwCertEncodingType,
- &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
- NULL, 0);
- infoA->lpszIssuerInfo = LocalAlloc(0, strLen);
- if (infoA->lpszIssuerInfo)
- CertNameToStrA(context->dwCertEncodingType,
- &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
- infoA->lpszIssuerInfo, strLen);
- }
- /*
- * Contrary to MSDN, these do not appear to be set.
- * lpszProtocolName
- * lpszSignatureAlgName
- * lpszEncryptionAlgName
- * dwKeySize
- */
- CertFreeCertificateContext(context);
- bSuccess = TRUE;
- }
- }
- break;
case INTERNET_OPTION_VERSION:
{
TRACE("INTERNET_OPTION_VERSION\n");
More information about the wine-cvs
mailing list