Author: roeie
Date: 2007-11-21 06:07:43 -0500 (Wed, 21 Nov 2007)
New Revision: 90070

Modified:
   trunk/mcs/class/System/System.Net/VMWHttpProvider.jvm.cs
Log:
merge -r88943:88947


Modified: trunk/mcs/class/System/System.Net/VMWHttpProvider.jvm.cs
===================================================================
--- trunk/mcs/class/System/System.Net/VMWHttpProvider.jvm.cs    2007-11-21 
11:00:50 UTC (rev 90069)
+++ trunk/mcs/class/System/System.Net/VMWHttpProvider.jvm.cs    2007-11-21 
11:07:43 UTC (rev 90070)
@@ -6,6 +6,12 @@
 using mainsoft.apache.commons.httpclient.methods;
 using [EMAIL PROTECTED];
 using mainsoft.apache.commons.httpclient.auth;
+using mainsoft.apache.commons.httpclient.auth.negotiate;
+using javax.security.auth;
+using org.ietf.jgss;
+using java.security;
+using System.Collections.Specialized;
+using System.Collections;
 
 namespace System.Net
 {
@@ -30,7 +36,7 @@
                protected bool _hasResponse;
                protected bool _hasRequest;
                protected Stream _writeStream;
-               private GHWebAsyncResult _asyncWrite;
+               private GHWebAsyncResult _asyncWrite;           
 
                private bool _isConnectionOpened;
                
@@ -62,6 +68,8 @@
                        {
                                _disableHttpConnectionPooling = bool.Parse(s);
                        }
+                       InitDefaultCredentialsProvider ();
+                       InitSPNProviders ();
                }
 
                internal override ServicePoint ServicePoint
@@ -169,17 +177,9 @@
                                                new NTCredentials(nc.UserName, 
nc.Password, host, domain));
                                }
                        }
-                       else if (String.Compare (type, "negotiate", 
StringComparison.InvariantCultureIgnoreCase) == 0) {
-                               if (!proxyCredentials) {
-                                       _state.setCredentials (new AuthScope 
(AuthScope.ANY_HOST,
-                                               AuthScope.ANY_PORT, 
AuthScope.ANY_REALM, "negotiate"),
-                                               new NTCredentials (nc.UserName, 
nc.Password, host, domain));
-                               }
-                               else {
-                                       _state.setProxyCredentials (new 
AuthScope (AuthScope.ANY_HOST,
-                                               AuthScope.ANY_PORT, 
AuthScope.ANY_REALM, "negotiate"),
-                                               new NTCredentials (nc.UserName, 
nc.Password, host, domain));
-                               }
+                       else if(String.Compare (type, "negotiate", 
StringComparison.InvariantCultureIgnoreCase) == 0)
+                       {
+                               SetAuthenticationScheme (AuthPolicy.NEGOTIATE);
                        }
                        else
                        {
@@ -195,27 +195,92 @@
                                                AuthScope.ANY_PORT, 
AuthScope.ANY_REALM, type),
                                                new 
UsernamePasswordCredentials(nc.UserName, nc.Password));
                                }
+                       }                                               
+               }
+
+               private void SetAuthenticationScheme (string type) {            
        
+                       _method.getHostAuthState ().setAuthScheme 
(AuthPolicy.getAuthScheme (type));                                              
              
+                       if (type != null && type.ToLower () == 
AuthPolicy.NEGOTIATE.ToLower ()) {                                       
+                               _method.getParams ().setParameter 
(CredentialsProvider__Finals.PROVIDER, new HTTPClientCredentialsBridge( 
DefaultCredentialsProvider));
+                               _method.getParams ().setParameter 
(NegotiateScheme.SPN_LIST_PARAM, SPNProviders);
+                       }                       
+               }
+
+               private java.util.ArrayList SPNProviders {
+                       get {
+                               return (java.util.ArrayList) 
AppDomain.CurrentDomain.GetData ("GH$SPNProviders");
                        }
-                       SetAuthenticationScheme (Char.ToUpper (type [0]) + 
type.Substring (1));
+                       set {
+                               AppDomain.CurrentDomain.SetData 
("GH$SPNProviders", value);
+                       }
+               }
 
+               private void InitSPNProviders () {
+                       if (SPNProviders != null)
+                               return;
+                       java.util.ArrayList spnProviders = new 
java.util.ArrayList ();
+                       NameValueCollection configAttributes = 
System.Configuration.ConfigurationSettings.AppSettings;
+                       string providersList = configAttributes 
["SPNProviders"];
+                       if (providersList == null)
+                               return;
+                       string[] tokens = providersList.Split (',');
+                       foreach (string spnClass in tokens) {
+                               try {
+                                       spnProviders.add 
(Activator.CreateInstance (Type.GetType (spnClass)));
+                               }
+                               catch (Exception) { }
+                       }
+                       SPNProviders = spnProviders;
                }
 
-               private void SetAuthenticationScheme (string type) {
-                       try {
-                               _method.getHostAuthState ().setAuthScheme 
(AuthPolicy.getAuthScheme (type));
+               private [EMAIL PROTECTED] DefaultCredentialsProvider {
+                       get {
+                               return ([EMAIL PROTECTED]) 
AppDomain.CurrentDomain.GetData ("GH$DefaultCredentialsProvider");
                        }
-                       catch (Exception) {//ignore no such scheme, will be 
selected by the chalenges order
+                       set {
+                               AppDomain.CurrentDomain.SetData 
("GH$DefaultCredentialsProvider", value);
                        }
                }
-               private void InitProxyCredentials()
-               {
-                       if(this.Proxy == null)
+
+               private void InitDefaultCredentialsProvider () {
+                       if (DefaultCredentialsProvider != null)
                                return;
+                       [EMAIL PROTECTED] defaultProvider = null;
+                       NameValueCollection configAttributes = 
System.Configuration.ConfigurationSettings.AppSettings;
+                       
+                       string defaultProviderClass = configAttributes 
["DefaultCredentialsProvider"];
+                       if (defaultProviderClass != null) {
+                               try {                                   
+                                       defaultProvider = ([EMAIL PROTECTED])
+                                               Activator.CreateInstance 
(Type.GetType (defaultProviderClass));
+                               }
+                               catch (Exception e) {
+                                       Console.WriteLine ("Failed to 
initialize Credentials Provider: " + defaultProviderClass + " Message: " + 
e.Message);                                    
+                               }
+                       }                       
 
-                       if(!(this.Proxy is WebProxy))
+                       if (defaultProvider == null) 
+                               defaultProvider = new [EMAIL PROTECTED] ();
+
+                       defaultProvider.init (ConvertToTable 
(configAttributes));
+                       DefaultCredentialsProvider = defaultProvider;
+               }
+
+               private java.util.Properties ConvertToTable 
(NameValueCollection col) {
+                       java.util.Properties table = new java.util.Properties 
();
+                       foreach (String key in col.Keys)
+                               table.put (key, col [key]);
+                       return table;
+               }
+
+               private void InitProxyCredentials () {
+                       if (this.Proxy == null)
                                return;
-                       
-                       WebProxy proxy = (WebProxy)this.Proxy;
+
+                       if (!(this.Proxy is WebProxy))
+                               return;
+
+                       WebProxy proxy = (WebProxy) this.Proxy;
                        ICredentials creds = proxy.Credentials;
 
                        if(creds == null)
@@ -256,9 +321,11 @@
                {
                        if(_credentials == null)
                                return;
-                       if(_credentials is CredentialCache)
-                       {
-                               NetworkCredential nc = 
((CredentialCache)_credentials).GetCredential(GetOriginalAddress(), "basic");
+                       if (_credentials == CredentialCache.DefaultCredentials) 
{
+                               SetAuthenticationScheme (AuthPolicy.NEGOTIATE);
+                       }
+                       else if (_credentials is CredentialCache) {
+                               NetworkCredential nc = ((CredentialCache) 
_credentials).GetCredential (GetOriginalAddress (), "basic");
                                string type = "basic";
                                if(nc == null)
                                {
@@ -424,11 +491,10 @@
                                        java.util.ArrayList schemas = new 
java.util.ArrayList ();
                                        schemas.add ("Ntlm");
                                        schemas.add ("Digest");
-                                       schemas.add ("Basic");                  
                
+                                       schemas.add ("Basic");
                                        schemas.add ("Negotiate");
                                        _client.getParams ().setParameter 
(AuthPolicy.AUTH_SCHEME_PRIORITY, schemas);
-                                       if(!_disableHttpConnectionPooling) 
-                                       {
+                                       if (!_disableHttpConnectionPooling) {
                                                _sclient = _client;
                                        }
                                }
@@ -1146,4 +1212,20 @@
 
 
        }
+
+       class HTTPClientCredentialsBridge : CredentialsProvider
+       {
+               private [EMAIL PROTECTED] m_internalProvider;
+
+               public HTTPClientCredentialsBridge ([EMAIL PROTECTED] 
internalProvider) {
+                       m_internalProvider = internalProvider;
+               }
+
+               public Credentials getCredentials (AuthScheme scheme, string 
__p2, int __p3, bool __p4) {
+                       if (scheme.isComplete ())
+                               return null;                    
+                       GSSCredential creds = m_internalProvider.getCredentials 
();                     
+                       return new DelegatedCredentials (creds);
+               }
+       }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to