secur32: Implement QueryContextAttributes for SECPKG_ATTR_REMOTE_CERT_CONTEXT
Juan Lang
juan.lang at gmail.com
Wed Aug 5 13:40:51 CDT 2009
Combined with http://www.winehq.org/pipermail/wine-patches/2009-August/076683.html
, fixes bug 19564.
--Juan
-------------- next part --------------
From df4aee9f49ffc88a083009e0f7203d2534d64eef Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Wed, 5 Aug 2009 10:43:57 -0700
Subject: [PATCH 10/10] Implement QueryContextAttributes for SECPKG_ATTR_REMOTE_CERT_CONTEXT
---
dlls/secur32/schannel.c | 25 +++++++++++++++++++++++++
1 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index b9644e3..dc4f3b3 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -48,6 +48,7 @@ MAKE_FUNCPTR(gnutls_alert_get);
MAKE_FUNCPTR(gnutls_alert_get_name);
MAKE_FUNCPTR(gnutls_certificate_allocate_credentials);
MAKE_FUNCPTR(gnutls_certificate_free_credentials);
+MAKE_FUNCPTR(gnutls_certificate_get_peers);
MAKE_FUNCPTR(gnutls_cipher_get);
MAKE_FUNCPTR(gnutls_credentials_set);
MAKE_FUNCPTR(gnutls_deinit);
@@ -873,6 +874,27 @@ static SECURITY_STATUS SEC_ENTRY schan_QueryContextAttributesW(
stream_sizes->cbBlockSize = block_size;
return SEC_E_OK;
}
+ case SECPKG_ATTR_REMOTE_CERT_CONTEXT:
+ {
+ unsigned int list_size;
+ const gnutls_datum_t *datum = pgnutls_certificate_get_peers(
+ ctx->session, &list_size);
+
+ datum = pgnutls_certificate_get_peers(ctx->session, &list_size);
+ if (datum)
+ {
+ PCCERT_CONTEXT *cert = buffer;
+
+ *cert = CertCreateCertificateContext(X509_ASN_ENCODING,
+ datum->data, datum->size);
+ if (!*cert)
+ return GetLastError();
+ else
+ return SEC_E_OK;
+ }
+ else
+ return SEC_E_INTERNAL_ERROR;
+ }
default:
FIXME("Unhandled attribute %#x\n", attribute);
@@ -890,6 +912,8 @@ static SECURITY_STATUS SEC_ENTRY schan_QueryContextAttributesA(
{
case SECPKG_ATTR_STREAM_SIZES:
return schan_QueryContextAttributesW(context_handle, attribute, buffer);
+ case SECPKG_ATTR_REMOTE_CERT_CONTEXT:
+ return schan_QueryContextAttributesW(context_handle, attribute, buffer);
default:
FIXME("Unhandled attribute %#x\n", attribute);
@@ -1222,6 +1246,7 @@ void SECUR32_initSchannelSP(void)
LOAD_FUNCPTR(gnutls_alert_get_name)
LOAD_FUNCPTR(gnutls_certificate_allocate_credentials)
LOAD_FUNCPTR(gnutls_certificate_free_credentials)
+ LOAD_FUNCPTR(gnutls_certificate_get_peers)
LOAD_FUNCPTR(gnutls_cipher_get)
LOAD_FUNCPTR(gnutls_credentials_set)
LOAD_FUNCPTR(gnutls_deinit)
--
1.6.3.2
More information about the wine-patches
mailing list