Juan Lang : winhttp: Return error directly from netconn_verify_cert.

Alexandre Julliard julliard at winehq.org
Tue Dec 15 09:40:16 CST 2009


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Dec 14 12:29:41 2009 -0800

winhttp: Return error directly from netconn_verify_cert.

---

 dlls/winhttp/net.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/dlls/winhttp/net.c b/dlls/winhttp/net.c
index df6b9d9..588b11b 100644
--- a/dlls/winhttp/net.c
+++ b/dlls/winhttp/net.c
@@ -251,15 +251,15 @@ static PCCERT_CONTEXT X509_to_cert_context(X509 *cert)
     return ret;
 }
 
-static BOOL netconn_verify_cert( PCCERT_CONTEXT cert, HCERTSTORE store,
-                                 WCHAR *server )
+static DWORD netconn_verify_cert( PCCERT_CONTEXT cert, HCERTSTORE store,
+                                  WCHAR *server )
 {
     BOOL ret;
     CERT_CHAIN_PARA chainPara = { sizeof(chainPara), { 0 } };
     PCCERT_CHAIN_CONTEXT chain;
     char oid_server_auth[] = szOID_PKIX_KP_SERVER_AUTH;
     char *server_auth[] = { oid_server_auth };
-    DWORD err;
+    DWORD err = ERROR_SUCCESS;
 
     TRACE("verifying %s\n", debugstr_w( server ));
     chainPara.RequestedUsage.Usage.cUsageIdentifier = 1;
@@ -286,8 +286,6 @@ static BOOL netconn_verify_cert( PCCERT_CONTEXT cert, HCERTSTORE store,
                 err = ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE;
             else
                 err = ERROR_WINHTTP_SECURE_INVALID_CERT;
-            set_last_error( err );
-            ret = FALSE;
         }
         else
         {
@@ -313,14 +311,14 @@ static BOOL netconn_verify_cert( PCCERT_CONTEXT cert, HCERTSTORE store,
                     err = ERROR_WINHTTP_SECURE_CERT_CN_INVALID;
                 else
                     err = ERROR_WINHTTP_SECURE_INVALID_CERT;
-                set_last_error( err );
-                ret = FALSE;
             }
         }
         CertFreeCertificateChain( chain );
     }
-    TRACE("returning %d\n", ret);
-    return ret;
+    else
+        err = ERROR_WINHTTP_SECURE_CHANNEL_ERROR;
+    TRACE("returning %08x\n", err);
+    return err;
 }
 
 static int netconn_secure_verify( int preverify_ok, X509_STORE_CTX *ctx )
@@ -361,7 +359,15 @@ static int netconn_secure_verify( int preverify_ok, X509_STORE_CTX *ctx )
             }
             if (!endCert) ret = FALSE;
             if (ret)
-                ret = netconn_verify_cert( endCert, store, server );
+            {
+                DWORD err = netconn_verify_cert( endCert, store, server );
+
+                if (err)
+                {
+                    set_last_error( err );
+                    ret = FALSE;
+                }
+            }
             CertFreeCertificateContext( endCert );
             CertCloseStore( store, 0 );
         }




More information about the wine-cvs mailing list