Module: wine Branch: master Commit: 5ee34ea870cbe1bf828c0c5a30a646d5cd776b14 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5ee34ea870cbe1bf828c0c5a30...
Author: Juan Lang juan.lang@gmail.com Date: Wed Aug 5 10:43:57 2009 -0700
secur32: 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)