Module: wine Branch: master Commit: f1be598efacde1c6faa4c471e6bad23d319ef842 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f1be598efacde1c6faa4c471e6...
Author: Juan Lang juan.lang@gmail.com Date: Wed Jun 8 18:22:22 2011 -0700
crypt32: Support CERT_COMPARE_NAME_STR_A in CertFindCertificateInStore.
---
dlls/crypt32/cert.c | 36 ++++++++++++++++++++++++++++++++++-- 1 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c index 12c013e..75b0e12 100644 --- a/dlls/crypt32/cert.c +++ b/dlls/crypt32/cert.c @@ -1516,7 +1516,36 @@ static BOOL compare_cert_by_name_str(PCCERT_CONTEXT pCertContext, return ret; }
-static PCCERT_CONTEXT find_cert_by_name_str(HCERTSTORE store, DWORD dwType, +static PCCERT_CONTEXT find_cert_by_name_str_a(HCERTSTORE store, DWORD dwType, + DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev) +{ + PCCERT_CONTEXT found = NULL; + + TRACE("%s\n", debugstr_a(pvPara)); + + if (pvPara) + { + int len = MultiByteToWideChar(CP_ACP, 0, pvPara, -1, NULL, 0); + LPWSTR str = CryptMemAlloc(len * sizeof(WCHAR)); + + if (str) + { + LPWSTR ptr; + + MultiByteToWideChar(CP_ACP, 0, pvPara, -1, str, len); + for (ptr = str; *ptr; ptr++) + *ptr = tolowerW(*ptr); + found = cert_compare_certs_in_store(store, prev, + compare_cert_by_name_str, dwType, dwFlags, str); + CryptMemFree(str); + } + } + else + found = find_cert_any(store, dwType, dwFlags, NULL, prev); + return found; +} + +static PCCERT_CONTEXT find_cert_by_name_str_w(HCERTSTORE store, DWORD dwType, DWORD dwFlags, const void *pvPara, PCCERT_CONTEXT prev) { PCCERT_CONTEXT found = NULL; @@ -1574,8 +1603,11 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore, case CERT_COMPARE_PUBLIC_KEY: compare = compare_cert_by_public_key; break; + case CERT_COMPARE_NAME_STR_A: + find = find_cert_by_name_str_a; + break; case CERT_COMPARE_NAME_STR_W: - find = find_cert_by_name_str; + find = find_cert_by_name_str_w; break; case CERT_COMPARE_SUBJECT_CERT: compare = compare_cert_by_subject_cert;