Guillaume Cottenceau's patch that adds CURLOPT_UNRESTRICTED_AUTH that

disables the host name check in the FOLLOWLOCATION code. With that option
set, libcurl will send user+password to all hosts.
This commit is contained in:
Daniel Stenberg
2003-03-31 04:41:05 +00:00
parent e6eb49e7e0
commit 25f611ca42
5 changed files with 22 additions and 2 deletions

View File

@@ -349,6 +349,11 @@ new location and follow new Location: headers all the way until no more such
headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number
of redirects libcurl will follow. of redirects libcurl will follow.
.TP .TP
.B CURLOPT_UNRESTRICTED_AUTH
A non-zero parameter tells the library it can continue to send authentication
(user+password) when following locations, even when hostname changed. Note
that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
.TP
.B CURLOPT_MAXREDIRS .B CURLOPT_MAXREDIRS
Pass a long. The set number will be the redirection limit. If that many Pass a long. The set number will be the redirection limit. If that many
redirections have been followed, the next redirect will cause an error redirections have been followed, the next redirect will cause an error

View File

@@ -619,6 +619,11 @@ typedef enum {
/* Set aliases for HTTP 200 in the HTTP Response header */ /* Set aliases for HTTP 200 in the HTTP Response header */
CINIT(HTTP200ALIASES, OBJECTPOINT, 104), CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
/* Continue to send authentication (user+password) when following locations,
even when hostname changed. This can potentionally send off the name
and password to whatever host the server decides. */
CINIT(UNRESTRICTED_AUTH, LONG, 105),
CURLOPT_LASTENTRY /* the last unused */ CURLOPT_LASTENTRY /* the last unused */
} CURLoption; } CURLoption;
@@ -809,7 +814,7 @@ CURLcode curl_global_init(long flags);
void curl_global_cleanup(void); void curl_global_cleanup(void);
/* This is the version number */ /* This is the version number */
#define LIBCURL_VERSION "7.10.4-pre2" #define LIBCURL_VERSION "7.10.4-pre5"
#define LIBCURL_VERSION_NUM 0x070a04 #define LIBCURL_VERSION_NUM 0x070a04
/* linked-list structure for the CURLOPT_QUOTE option (and other) */ /* linked-list structure for the CURLOPT_QUOTE option (and other) */

View File

@@ -663,7 +663,8 @@ CURLcode Curl_http(struct connectdata *conn)
host due to a location-follow, we do some weirdo checks here */ host due to a location-follow, we do some weirdo checks here */
if(!data->state.this_is_a_follow || if(!data->state.this_is_a_follow ||
!data->state.auth_host || !data->state.auth_host ||
curl_strequal(data->state.auth_host, conn->hostname)) { curl_strequal(data->state.auth_host, conn->hostname) ||
data->set.http_disable_hostname_check_before_authentication) {
sprintf(data->state.buffer, "%s:%s", sprintf(data->state.buffer, "%s:%s",
data->state.user, data->state.passwd); data->state.user, data->state.passwd);
if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer), if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer),

View File

@@ -503,6 +503,14 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
*/ */
data->set.http_follow_location = va_arg(param, long)?TRUE:FALSE; data->set.http_follow_location = va_arg(param, long)?TRUE:FALSE;
break; break;
case CURLOPT_UNRESTRICTED_AUTH:
/*
* Send authentication (user+password) when following locations, even when
* hostname changed.
*/
data->set.http_disable_hostname_check_before_authentication =
va_arg(param, long)?TRUE:FALSE;
break;
case CURLOPT_HTTP_VERSION: case CURLOPT_HTTP_VERSION:
/* /*
* This sets a requested HTTP version to be used. The value is one of * This sets a requested HTTP version to be used. The value is one of

View File

@@ -736,6 +736,7 @@ struct UserDefined {
bool hide_progress; bool hide_progress;
bool http_fail_on_error; bool http_fail_on_error;
bool http_follow_location; bool http_follow_location;
bool http_disable_hostname_check_before_authentication;
bool include_header; bool include_header;
#define http_include_header include_header /* former name */ #define http_include_header include_header /* former name */