]> granicus.if.org Git - curl/commit
http: Fix proxy connection reuse with basic-auth
authorIsaac Boukris <iboukris@gmail.com>
Thu, 23 Mar 2017 19:28:28 +0000 (21:28 +0200)
committerJay Satiro <raysatiro@yahoo.com>
Tue, 28 Mar 2017 07:54:43 +0000 (03:54 -0400)
commit7975d10cf8a3fe9b35867509b9ef10d06614eb3a
tree1285a6d7bfd9bb69e1b765d4fa9c1eba00503fb8
parentb04e4ebdd87619d7235ac574275ed11f2a540721
http: Fix proxy connection reuse with basic-auth

When using basic-auth, connections and proxy connections
can be re-used with different Authorization headers since
it does not authenticate the connection (like NTLM does).

For instance, the below command should re-use the proxy
connection, but it currently doesn't:
curl -v -U alice:a -x http://localhost:8181 http://localhost/
  --next -U bob:b -x http://localhost:8181 http://localhost/

This is a regression since refactoring of ConnectionExists()
as part of: cb4e2be7c6d42ca0780f8e0a747cecf9ba45f151

Fix the above by removing the username and password compare
when re-using proxy connection at proxy_info_matches().

However, this fix brings back another bug would make curl
to re-print the old proxy-authorization header of previous
proxy basic-auth connection because it wasn't cleared.

For instance, in the below command the second request should
fail if the proxy requires authentication, but would succeed
after the above fix (and before aforementioned commit):
curl -v -U alice:a -x http://localhost:8181 http://localhost/
  --next -x http://localhost:8181 http://localhost/

Fix this by clearing conn->allocptr.proxyuserpwd after use
unconditionally, same as we do for conn->allocptr.userpwd.

Also fix test 540 to not expect digest auth header to be
resent when connection is reused.

Signed-off-by: Isaac Boukris <iboukris@gmail.com>
Closes https://github.com/curl/curl/pull/1350
lib/http.c
lib/url.c
tests/data/test540