Juan Lang : crypt32: Implement CryptFormatObject for the Netscape string OIDs.
Alexandre Julliard
julliard at winehq.org
Mon Nov 24 09:16:34 CST 2008
Module: wine
Branch: master
Commit: afc7a7989701946efa55b2cbcb6025450f1d5c01
URL: http://source.winehq.org/git/wine.git/?a=commit;h=afc7a7989701946efa55b2cbcb6025450f1d5c01
Author: Juan Lang <juan.lang at gmail.com>
Date: Fri Nov 21 07:44:19 2008 -0800
crypt32: Implement CryptFormatObject for the Netscape string OIDs.
---
dlls/crypt32/object.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/dlls/crypt32/object.c b/dlls/crypt32/object.c
index 5784cc9..df5e509 100644
--- a/dlls/crypt32/object.c
+++ b/dlls/crypt32/object.c
@@ -2253,6 +2253,42 @@ static BOOL WINAPI CRYPT_FormatSpcFinancialCriteria(DWORD dwCertEncodingType,
return ret;
}
+static BOOL WINAPI CRYPT_FormatUnicodeString(DWORD dwCertEncodingType,
+ DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct,
+ LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat,
+ DWORD *pcbFormat)
+{
+ CERT_NAME_VALUE *value;
+ DWORD size;
+ BOOL ret;
+
+ if (!cbEncoded)
+ {
+ SetLastError(E_INVALIDARG);
+ return FALSE;
+ }
+ if ((ret = CryptDecodeObjectEx(dwCertEncodingType, X509_UNICODE_ANY_STRING,
+ pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL, &value, &size)))
+ {
+ if (!pbFormat)
+ *pcbFormat = value->Value.cbData;
+ else if (*pcbFormat < value->Value.cbData)
+ {
+ *pcbFormat = value->Value.cbData;
+ SetLastError(ERROR_MORE_DATA);
+ ret = FALSE;
+ }
+ else
+ {
+ LPWSTR str = pbFormat;
+
+ *pcbFormat = value->Value.cbData;
+ strcpyW(str, (LPWSTR)value->Value.pbData);
+ }
+ }
+ return ret;
+}
+
typedef BOOL (WINAPI *CryptFormatObjectFunc)(DWORD, DWORD, DWORD, void *,
LPCSTR, const BYTE *, DWORD, void *, DWORD *);
@@ -2318,6 +2354,14 @@ static CryptFormatObjectFunc CRYPT_GetBuiltinFormatFunction(DWORD encodingType,
format = CRYPT_FormatEnhancedKeyUsage;
else if (!strcmp(lpszStructType, szOID_NETSCAPE_CERT_TYPE))
format = CRYPT_FormatNetscapeCertType;
+ else if (!strcmp(lpszStructType, szOID_NETSCAPE_BASE_URL) ||
+ !strcmp(lpszStructType, szOID_NETSCAPE_REVOCATION_URL) ||
+ !strcmp(lpszStructType, szOID_NETSCAPE_CA_REVOCATION_URL) ||
+ !strcmp(lpszStructType, szOID_NETSCAPE_CERT_RENEWAL_URL) ||
+ !strcmp(lpszStructType, szOID_NETSCAPE_CA_POLICY_URL) ||
+ !strcmp(lpszStructType, szOID_NETSCAPE_SSL_SERVER_NAME) ||
+ !strcmp(lpszStructType, szOID_NETSCAPE_COMMENT))
+ format = CRYPT_FormatUnicodeString;
else if (!strcmp(lpszStructType, SPC_FINANCIAL_CRITERIA_OBJID))
format = CRYPT_FormatSpcFinancialCriteria;
return format;
More information about the wine-cvs
mailing list