From b0f6e7cee48365d6b0cc9b52eeb8c151f2d86814 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Sat, 9 Sep 2006 11:45:27 +0000
Subject: [PATCH] Michele Bini fixed how the hostname is put in NTLM packages.
 As servers don't expect fully qualified names we need to cut them off at the
 first dot.

---
 CHANGES         |  3 +++
 RELEASE-NOTES   |  3 ++-
 lib/http_ntlm.c | 10 ++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/CHANGES b/CHANGES
index 55bf264d8..ac973884b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,9 @@
                                   Changelog
 
 Daniel (9 September 2006)
+- Michele Bini fixed how the hostname is put in NTLM packages. As servers
+  don't expect fully qualified names we need to cut them off at the first dot.
+
 - Peter Sylvester cleaned up and fixed the getsockname() uses in ftp.c. Some
   of them can be completetly removed though...
 
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 65ac9c6aa..942f59f7f 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -19,6 +19,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o (HTTP) NTLM hostname fix
  o getsockname usage fixes
  o SOCKS5 proxy connects can now time-out
  o SOCKS5 connects that require auth no longer segfaults when auth not given
@@ -45,6 +46,6 @@ advice from friends like these:
 
  Domenico Andreoli, Armel Asselin, Gisle Vanem, Yang Tse, Andrew Biggs,
  Peter Sylvester, David McCreedy, Dmitriy Sergeyev, Dmitry Rechkin,
- Jari Sundell, Ravi Pratap
+ Jari Sundell, Ravi Pratap, Michele Bini
 
         Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/http_ntlm.c b/lib/http_ntlm.c
index 24b89dded..7444a400c 100644
--- a/lib/http_ntlm.c
+++ b/lib/http_ntlm.c
@@ -277,6 +277,7 @@ CURLntlm Curl_input_ntlm(struct connectdata *conn,
         fprintf(stderr, "\n                  nonce=");
         print_hex(stderr, ntlm->nonce, 8);
         fprintf(stderr, "\n****\n");
+        fprintf(stderr, "**** Header %s\n ", header);
       });
 
       free(buffer);
@@ -708,6 +709,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
       *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
                               proxy?"Proxy-":"",
                               base64);
+      DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
       free(base64);
     }
     else
@@ -798,6 +800,13 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
       hostlen = 0;
     }
     else {
+      /* If the workstation if configured with a full DNS name (i.e.
+       * workstation.somewhere.net) gethostname() returns the fully qualified
+       * name, which NTLM doesn't like.
+       */
+      char *dot = strchr(host, '.');
+      if (dot)
+        *dot = '\0';
       hostlen = strlen(host);
     }
 
@@ -1011,6 +1020,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn,
       *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
                               proxy?"Proxy-":"",
                               base64);
+      DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
       free(base64);
     }
     else
-- 
2.40.0