httpauth: make multi-request auth work with custom port

When doing HTTP authentication and a port number set with CURLOPT_PORT,
the code would previously have the URL's port number override as if it
had been a redirect to an absolute URL.

Added test 1568 to verify.

Reported-by: UrsusArctos on github
Fixes #6397
Closes #6400
This commit is contained in:
Daniel Stenberg 2021-01-01 23:41:21 +01:00
parent 725ec470e2
commit 648712eec1
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
8 changed files with 158 additions and 13 deletions

View file

@ -1537,6 +1537,8 @@ CURLcode Curl_follow(struct Curl_easy *data,
bool reachedmax = FALSE;
CURLUcode uc;
DEBUGASSERT(type != FOLLOW_NONE);
if(type == FOLLOW_REDIR) {
if((data->set.maxredirs != -1) &&
(data->set.followlocation >= data->set.maxredirs)) {
@ -1568,8 +1570,11 @@ CURLcode Curl_follow(struct Curl_easy *data,
}
}
if(Curl_is_absolute_url(newurl, NULL, MAX_SCHEME_LEN))
/* This is an absolute URL, don't allow the custom port number */
if((type != FOLLOW_RETRY) &&
(data->req.httpcode != 401) && (data->req.httpcode != 407) &&
Curl_is_absolute_url(newurl, NULL, MAX_SCHEME_LEN))
/* If this is not redirect due to a 401 or 407 response and an absolute
URL: don't allow a custom port number */
disallowport = TRUE;
DEBUGASSERT(data->state.uh);