From 6dfe7bc3a6a7f8e2f616fdb795db20f5eb35fe65 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang@gmail.com>
Date: Tue, 8 Sep 2009 22:11:27 -0700
Subject: [PATCH] crypt32: Implement CertGetNameStringW for
 CERT_NAME_EMAIL_TYPE.

---
 dlls/crypt32/str.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c
index 248686260d2..8de03a8d555 100644
--- a/dlls/crypt32/str.c
+++ b/dlls/crypt32/str.c
@@ -1008,6 +1008,31 @@ DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,
 
     switch (dwType)
     {
+    case CERT_NAME_EMAIL_TYPE:
+    {
+        CERT_ALT_NAME_INFO *info;
+        PCERT_ALT_NAME_ENTRY entry = cert_find_alt_name_entry(pCertContext,
+         altNameOID, CERT_ALT_NAME_RFC822_NAME, &info);
+
+        if (entry)
+        {
+            if (!pszNameString)
+                ret = strlenW(entry->pwszRfc822Name) + 1;
+            else
+            {
+                ret = min(strlenW(entry->pwszRfc822Name), cchNameString - 1);
+                memcpy(pszNameString, entry->pwszRfc822Name,
+                 ret * sizeof(WCHAR));
+                pszNameString[ret++] = 0;
+            }
+        }
+        if (info)
+            LocalFree(info);
+        if (!ret)
+            ret = cert_get_name_from_rdn_attr(pCertContext->dwCertEncodingType,
+             name, szOID_RSA_emailAddr, pszNameString, cchNameString);
+        break;
+    }
     case CERT_NAME_RDN_TYPE:
         if (name->cbData)
             ret = CertNameToStrW(pCertContext->dwCertEncodingType, name,
-- 
GitLab