2 fixes for NTLM authentication
[mono.git] / mcs / class / System / Mono.Http / NtlmClient.cs
index 511fcbff37dfb003960a2c6e3a366093076fee3f..07f0fbc1e6ad6467cded948ac9bb220e27ef7990 100644 (file)
@@ -59,12 +59,23 @@ namespace Mono.Http
                        string password = cred.Password;
                        if (userName == null || userName == "")
                                return null;
-                       domain = domain != null && domain.Length > 0 ? domain : request.Headers ["Host"];
+
+                       if (String.IsNullOrEmpty (domain)) {
+                               int idx = userName.IndexOf ('\\');
+                               if (idx == -1) {
+                                       idx = userName.IndexOf ('/');
+                               }
+                               if (idx >= 0) {
+                                       domain = userName.Substring (0, idx);
+                                       userName = userName.Substring (idx + 1);
+                               }
+                       }
 
                        bool completed = false;
                        if (message == null) {
                                Type1Message type1 = new Type1Message ();
                                type1.Domain = domain;
+                               type1.Host = ""; // MS does not send it
                                message = type1;
                        } else if (message.Type == 1) {
                                // Should I check the credentials?
@@ -79,6 +90,7 @@ namespace Mono.Http
 
                                Type3Message type3 = new Type3Message ();
                                type3.Domain = domain;
+                               // type3.Host = ""; MS sends the machine name for type 3 packets
                                type3.Username = userName;
                                type3.Challenge = type2.Nonce;
                                type3.Password = password;
@@ -90,6 +102,7 @@ namespace Mono.Http
                                if (challenge == null || challenge == String.Empty) {
                                        Type1Message type1 = new Type1Message ();
                                        type1.Domain = domain;
+                                       type1.Host = ""; // MS does not send it
                                        message = type1;
                                } else {
                                        completed = true;