]> granicus.if.org Git - curl/commitdiff
Based on Augustus Saunders' comments and findings, the HTTP output auth
authorDaniel Stenberg <daniel@haxx.se>
Mon, 28 Mar 2005 22:19:31 +0000 (22:19 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 28 Mar 2005 22:19:31 +0000 (22:19 +0000)
function was fixed to use the proper proxy authentication when multiple ones
were added as accepted. test 239 and test 243 were added to repeat the
problems and verify the fixes.

lib/http.c
tests/data/Makefile.am
tests/data/test239 [new file with mode: 0644]
tests/data/test243 [new file with mode: 0644]

index 28799a6a44f223256fd3087ede9466cd136ef3b7..d86b34fa31f0a5c2340efabf7a07b07fd481c689 100644 (file)
@@ -407,7 +407,7 @@ Curl_http_output_auth(struct connectdata *conn,
   if (conn->bits.httpproxy &&
       (conn->bits.tunnel_proxy == proxytunnel)) {
 #if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI)
-    if(authproxy->want == CURLAUTH_NTLM) {
+    if(authproxy->picked == CURLAUTH_NTLM) {
       auth=(char *)"NTLM";
       result = Curl_output_ntlm(conn, TRUE);
       if(result)
@@ -415,7 +415,7 @@ Curl_http_output_auth(struct connectdata *conn,
     }
     else
 #endif
-      if(authproxy->want == CURLAUTH_BASIC) {
+      if(authproxy->picked == CURLAUTH_BASIC) {
         /* Basic */
         if(conn->bits.proxy_user_passwd &&
            !checkheaders(data, "Proxy-authorization:")) {
@@ -429,7 +429,7 @@ Curl_http_output_auth(struct connectdata *conn,
         authproxy->done = TRUE;
       }
 #ifndef CURL_DISABLE_CRYPTO_AUTH
-      else if(authproxy->want == CURLAUTH_DIGEST) {
+      else if(authproxy->picked == CURLAUTH_DIGEST) {
         auth=(char *)"Digest";
         result = Curl_output_digest(conn,
                                     TRUE, /* proxy */
@@ -463,7 +463,7 @@ Curl_http_output_auth(struct connectdata *conn,
     {
       auth = NULL;
 #ifdef HAVE_GSSAPI
-      if((authhost->want == CURLAUTH_GSSNEGOTIATE) &&
+      if((authhost->picked == CURLAUTH_GSSNEGOTIATE) &&
          data->state.negotiate.context &&
          !GSS_ERROR(data->state.negotiate.status)) {
         auth=(char *)"GSS-Negotiate";
index 2a0396b7f98516080352aaae51c736d894abcd3d..913c8226d505e8e96d6f4ecc993fbc65135d529b 100644 (file)
@@ -32,7 +32,8 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46        \
  test223 test224 test206 test207 test208 test209 test213 test240       \
  test241 test242 test519 test214 test215 test216 test217 test218       \
  test199 test225 test226 test227 test230 test231 test232 test228       \
- test229 test233 test234 test235 test236 test520 test237 test238
+ test229 test233 test234 test235 test236 test520 test237 test238 \
+ test239 test243
 
 # The following tests have been removed from the dist since they no longer
 # work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test239 b/tests/data/test239
new file mode 100644 (file)
index 0000000..6df716f
--- /dev/null
@@ -0,0 +1,80 @@
+# Server-side
+<reply>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear\r
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
+Content-Length: 33\r
+\r
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose\r
+Server: Microsoft-IIS/5.0\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length; 42\r
+\r
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required to proxy me my dear\r
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
+Content-Length: 33\r
+\r
+HTTP/1.1 200 Things are fine in proxy land swsclose\r
+Server: Microsoft-IIS/5.0\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length; 42\r
+\r
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP proxy-auth NTLM and then POST
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/239 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-ntlm -d "postit"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol nonewline=yes>
+POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1\r
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAAAgIAAAAAAAAgAAAAAAAAACAAAAA=\r
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13\r
+Host: %HOSTIP:%HTTPPORT\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 0\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+POST http://127.0.0.1:8990/239 HTTP/1.1\r
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEUAAAAYABgAXQAAAAAAAABAAAAABQAFAEAAAAAAAAAARQAAAAAAAAB1AAAAAYIAAHNpbGx5oB5CPMq0JDu5tbxLow3sHn3jfoYDE+7QJVE7DA0GyDEwvj2BxsBctP9tT4fnCtL1\r
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13\r
+Host: 127.0.0.1:8990\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 6\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+postit
+</protocol>
+</verify>
diff --git a/tests/data/test243 b/tests/data/test243
new file mode 100644 (file)
index 0000000..fd3f6a9
--- /dev/null
@@ -0,0 +1,108 @@
+# Server-side
+<reply>
+
+<data>
+HTTP/1.1 407 Authorization Required swsclose\r
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2\r
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+Proxy-Authenticate: NTLM\r
+Content-Type: text/html; charset=iso-8859-1\r
+Connection: close\r
+\r
+This is not the real page
+</data>
+
+# this is returned first since we get no proxy-auth
+<data1001>
+HTTP/1.1 407 Authorization Required to proxy me my dear\r
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
+Content-Length: 33\r
+\r
+Hey you, authenticate or go away!
+</data1001>
+
+# This is supposed to be returned when the server gets the second
+# Authorization: NTLM line passed-in from the client
+<data1002>
+HTTP/1.1 200 Things are fine in proxy land swsclose\r
+Server: Microsoft-IIS/5.0\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length; 42\r
+\r
+Contents of that page you requested, sir.
+</data1002>
+
+<datacheck>
+HTTP/1.1 407 Authorization Required swsclose\r
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2\r
+Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"\r
+Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"\r
+Proxy-Authenticate: NTLM\r
+Content-Type: text/html; charset=iso-8859-1\r
+Connection: close\r
+\r
+HTTP/1.1 407 Authorization Required to proxy me my dear\r
+Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
+Content-Length: 33\r
+\r
+HTTP/1.1 200 Things are fine in proxy land swsclose\r
+Server: Microsoft-IIS/5.0\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length; 42\r
+\r
+Contents of that page you requested, sir.
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+NTLM
+</features>
+ <name>
+HTTP POST with --proxy-anyauth, picking NTLM
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/243 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-anyauth -d "postit"
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent: curl/.*
+</strip>
+<protocol nonewline=yes>
+POST http://127.0.0.1:8990/243 HTTP/1.1\r
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13\r
+Host: 127.0.0.1:8990\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 6\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+postitPOST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1\r
+Proxy-Authorization: NTLM TlRMTVNTUAABAAAAAgIAAAAAAAAgAAAAAAAAACAAAAA=\r
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13\r
+Host: %HOSTIP:%HTTPPORT\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 0\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+POST http://127.0.0.1:8990/243 HTTP/1.1\r
+Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEUAAAAYABgAXQAAAAAAAABAAAAABQAFAEAAAAAAAAAARQAAAAAAAAB1AAAAAYIAAHNpbGx5oB5CPMq0JDu5tbxLow3sHn3jfoYDE+7QJVE7DA0GyDEwvj2BxsBctP9tT4fnCtL1\r
+User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13\r
+Host: 127.0.0.1:8990\r
+Pragma: no-cache\r
+Accept: */*\r
+Content-Length: 6\r
+Content-Type: application/x-www-form-urlencoded\r
+\r
+postit
+</protocol>
+</verify>