Skip to content

Commit

Permalink
authneg: clear auth.multi flag at http_done
Browse files Browse the repository at this point in the history
This flag is meant for the current request based on authentication
state, once the request is done we can clear the flag.

Also change auth.multi to auth.multipass for better readability.

See discussion at curl#1095

Signed-off-by: Isaac Boukris <iboukris@gmail.com>
Reported-by: Michael Kaufmann
  • Loading branch information
iboukris committed Feb 1, 2017
1 parent 77350ce commit 57ce2ec
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
11 changes: 8 additions & 3 deletions lib/http.c
Original file line number Diff line number Diff line change
Expand Up @@ -645,10 +645,10 @@ output_auth_headers(struct connectdata *conn,
proxy ? "Proxy" : "Server", auth,
proxy ? (conn->http_proxy.user ? conn->http_proxy.user : "") :
(conn->user ? conn->user : ""));
authstatus->multi = (!authstatus->done) ? TRUE : FALSE;
authstatus->multipass = (!authstatus->done) ? TRUE : FALSE;
}
else
authstatus->multi = FALSE;
authstatus->multipass = FALSE;

return CURLE_OK;
}
Expand Down Expand Up @@ -1426,6 +1426,11 @@ CURLcode Curl_http_done(struct connectdata *conn,
struct Curl_easy *data = conn->data;
struct HTTP *http = data->req.protop;

/* Clear multipass flag. If authentication isn't done yet, then it will get
* a chance to be set back to true when we output the next auth header */
data->state.authhost.multipass = FALSE;
data->state.authproxy.multipass = FALSE;

Curl_unencode_cleanup(conn);

#ifdef USE_SPNEGO
Expand Down Expand Up @@ -1862,7 +1867,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
if(result)
return result;

if((data->state.authhost.multi || data->state.authproxy.multi) &&
if((data->state.authhost.multipass || data->state.authproxy.multipass) &&
(httpreq != HTTPREQ_GET) &&
(httpreq != HTTPREQ_HEAD)) {
/* Auth is required and we are not authenticated yet. Make a PUT or POST
Expand Down
4 changes: 2 additions & 2 deletions lib/urldata.h
Original file line number Diff line number Diff line change
Expand Up @@ -1278,8 +1278,8 @@ struct auth {
this resource */
bool done; /* TRUE when the auth phase is done and ready to do the *actual*
request */
bool multi; /* TRUE if this is not yet authenticated but within the auth
multipass negotiation */
bool multipass; /* TRUE if this is not yet authenticated but within the
auth multipass negotiation */
bool iestyle; /* TRUE if digest should be done IE-style or FALSE if it should
be RFC compliant */
};
Expand Down

0 comments on commit 57ce2ec

Please sign in to comment.