Merge pull request #3800 from madewokherd/mingwbuild
[mono.git] / mcs / class / System / Mono.Net.Security / MonoTlsStream.cs
index 22eb330a0ab8cde428c83dbaee30da9b1cf29f38..6e0e2a9b1f0740cfe7ebbcb7b0aaa98b56191efd 100644 (file)
 #if MONO_SECURITY_ALIAS
 extern alias MonoSecurity;
 #endif
-#if MONO_X509_ALIAS
-extern alias PrebuiltSystem;
-#endif
 
 #if MONO_SECURITY_ALIAS
 using MonoSecurity::Mono.Security.Interface;
 #else
 using Mono.Security.Interface;
 #endif
-#if MONO_X509_ALIAS
-using XX509CertificateCollection = PrebuiltSystem::System.Security.Cryptography.X509Certificates.X509CertificateCollection;
-#else
-using XX509CertificateCollection = System.Security.Cryptography.X509Certificates.X509CertificateCollection;
-#endif
 #endif
 
 using System;
@@ -83,7 +75,7 @@ namespace Mono.Net.Security
                }
 
 #if SECURITY_DEP
-               readonly ChainValidationHelper validationHelper;
+//             readonly ChainValidationHelper validationHelper;
                readonly MonoTlsSettings settings;
 
                public MonoTlsStream (HttpWebRequest request, NetworkStream networkStream)
@@ -95,10 +87,7 @@ namespace Mono.Net.Security
                        provider = request.TlsProvider ?? MonoTlsProviderFactory.GetProviderInternal ();
                        status = WebExceptionStatus.SecureChannelFailure;
 
-                       if (settings == null)
-                               settings = new MonoTlsSettings ();
-
-                       validationHelper = ChainValidationHelper.Create (ref settings, this);
+                       /*validationHelper =*/ ChainValidationHelper.Create (provider.Provider, ref settings, this);
                }
 
                internal Stream CreateStream (byte[] buffer)
@@ -107,18 +96,24 @@ namespace Mono.Net.Security
 
                        try {
                                sslStream.AuthenticateAsClient (
-                                       request.Address.Host, (XX509CertificateCollection)(object)request.ClientCertificates,
+                                       request.Host, request.ClientCertificates,
                                        (SslProtocols)ServicePointManager.SecurityProtocol,
                                        ServicePointManager.CheckCertificateRevocationList);
 
                                status = WebExceptionStatus.Success;
+                       } catch (Exception) {
+                               status = WebExceptionStatus.SecureChannelFailure;
+                               throw;
                        } finally {
                                if (CertificateValidationFailed)
                                        status = WebExceptionStatus.TrustFailure;
 
-                               request.ServicePoint.SetClientCertificate (sslStream.InternalLocalCertificate);
-                               if (status != WebExceptionStatus.Success)
+                               if (status == WebExceptionStatus.Success)
+                                       request.ServicePoint.UpdateClientCertificate (sslStream.InternalLocalCertificate);
+                               else {
+                                       request.ServicePoint.UpdateClientCertificate (null);
                                        sslStream = null;
+                               }
                        }
 
                        try {