Module: wine Branch: stable Commit: 694997f4f9aa24a93d2ab3ab097b36ee245d565a URL: https://gitlab.winehq.org/wine/wine/-/commit/694997f4f9aa24a93d2ab3ab097b36e...
Author: Tyson Whitehead twhitehead@gmail.com Date: Tue Mar 14 09:57:48 2023 -0400
crypt32: Add some CertGetNameStringW fallback cases.
When called with CERT_NAME_ATTR_TYPE and pvTypePara=NULL, Windows did the first of email, CN, OU, or O while Wine just did email.
(cherry picked from commit 01c69eb3023d2b85827020a8da8bb43c19560450)
---
dlls/crypt32/str.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c index d74df308e4a..42046369652 100644 --- a/dlls/crypt32/str.c +++ b/dlls/crypt32/str.c @@ -965,11 +965,22 @@ static DWORD cert_get_name_from_rdn_attr(DWORD encodingType, if (CryptDecodeObjectEx(encodingType, X509_NAME, name->pbData, name->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &nameInfo, &bytes)) { - PCERT_RDN_ATTR nameAttr; + PCERT_RDN_ATTR nameAttr = NULL;
- if (!oid) - oid = szOID_RSA_emailAddr; - nameAttr = CertFindRDNAttr(oid, nameInfo); + if (oid) + nameAttr = CertFindRDNAttr(oid, nameInfo); + else + { + static const LPCSTR attributeOIDs[] = + { + szOID_RSA_emailAddr, szOID_COMMON_NAME, + szOID_ORGANIZATIONAL_UNIT_NAME, szOID_ORGANIZATION_NAME + }; + DWORD i; + + for (i = 0; !nameAttr && i < ARRAY_SIZE(attributeOIDs); i++) + nameAttr = CertFindRDNAttr(attributeOIDs[i], nameInfo); + } if (nameAttr) ret = rdn_value_to_strW(nameAttr->dwValueType, &nameAttr->Value, pszNameString, cchNameString, TRUE);