Module: wine Branch: master Commit: 56ebc04ab6fcda86b60697e6a8bc2119d804536c URL: http://source.winehq.org/git/wine.git/?a=commit;h=56ebc04ab6fcda86b60697e6a8...
Author: Juan Lang juan.lang@gmail.com Date: Thu Sep 30 13:09:04 2010 -0700
wininet: Returned certificate strings are always ASCII.
---
dlls/wininet/http.c | 61 ++++++++++++-------------------------------- dlls/wininet/tests/http.c | 4 --- 2 files changed, 17 insertions(+), 48 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 2266fcd..992a827 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -1820,60 +1820,33 @@ static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffe case INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT: { PCCERT_CONTEXT context;
- if(*size < sizeof(INTERNET_CERTIFICATE_INFOW)) { - *size = sizeof(INTERNET_CERTIFICATE_INFOW); + if(*size < sizeof(INTERNET_CERTIFICATE_INFOA)) { + *size = sizeof(INTERNET_CERTIFICATE_INFOA); return ERROR_INSUFFICIENT_BUFFER; }
context = (PCCERT_CONTEXT)NETCON_GetCert(&(req->netConnection)); if(context) { - INTERNET_CERTIFICATE_INFOW *info = (INTERNET_CERTIFICATE_INFOW*)buffer; + INTERNET_CERTIFICATE_INFOA *info = (INTERNET_CERTIFICATE_INFOA*)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 - */ + len = CertNameToStrA(context->dwCertEncodingType, + &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, NULL, 0); + info->lpszSubjectInfo = LocalAlloc(0, len); + if(info->lpszSubjectInfo) + CertNameToStrA(context->dwCertEncodingType, + &context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, + info->lpszSubjectInfo, len); + len = CertNameToStrA(context->dwCertEncodingType, + &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, NULL, 0); + info->lpszIssuerInfo = LocalAlloc(0, len); + if(info->lpszIssuerInfo) + CertNameToStrA(context->dwCertEncodingType, + &context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, + info->lpszIssuerInfo, len); CertFreeCertificateContext(context); return ERROR_SUCCESS; } diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c index 0637057..d06cdf2 100644 --- a/dlls/wininet/tests/http.c +++ b/dlls/wininet/tests/http.c @@ -2693,11 +2693,9 @@ static void test_secure_connection(void) ok(ret, "InternetQueryOption failed: %d\n", GetLastError()); if (ret) { - todo_wine ok(certificate_structA->lpszSubjectInfo && strlen(certificate_structA->lpszSubjectInfo) > 1, "expected a non-empty subject name\n"); - todo_wine ok(certificate_structA->lpszIssuerInfo && strlen(certificate_structA->lpszIssuerInfo) > 1, "expected a non-empty issuer name\n"); @@ -2726,11 +2724,9 @@ static void test_secure_connection(void) ok(ret, "InternetQueryOption failed: %d\n", GetLastError()); if (ret) { - todo_wine ok(certificate_structA->lpszSubjectInfo && strlen(certificate_structA->lpszSubjectInfo) > 1, "expected a non-empty subject name\n"); - todo_wine ok(certificate_structA->lpszIssuerInfo && strlen(certificate_structA->lpszIssuerInfo) > 1, "expected a non-empty issuer name\n");