Tyson Whitehead : crypt32: Add some CertGetNameStringW fallback cases.
Module: wine Branch: master Commit: 01c69eb3023d2b85827020a8da8bb43c19560450 URL: https://gitlab.winehq.org/wine/wine/-/commit/01c69eb3023d2b85827020a8da8bb43... Author: Tyson Whitehead <twhitehead(a)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. --- 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);
participants (1)
-
Alexandre Julliard