Juan Lang : secur32: Implement QueryContextAttributes for SECPKG_ATTR_REMOTE_CERT_CONTEXT.

Alexandre Julliard julliard at winehq.org
Thu Aug 6 10:49:08 CDT 2009


Module: wine
Branch: master
Commit: 5ee34ea870cbe1bf828c0c5a30a646d5cd776b14
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5ee34ea870cbe1bf828c0c5a30a646d5cd776b14

Author: Juan Lang <juan.lang at 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)




More information about the wine-cvs mailing list