]> granicus.if.org Git - curl/commitdiff
Guillaume Cottenceau's patch that adds CURLOPT_UNRESTRICTED_AUTH that
authorDaniel Stenberg <daniel@haxx.se>
Mon, 31 Mar 2003 04:41:05 +0000 (04:41 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 31 Mar 2003 04:41:05 +0000 (04:41 +0000)
disables the host name check in the FOLLOWLOCATION code. With that option
set, libcurl will send user+password to all hosts.

docs/libcurl/curl_easy_setopt.3
include/curl/curl.h
lib/http.c
lib/url.c
lib/urldata.h

index a1bb2c6df9dd3e5e27e22277a41e6d16d307ea8f..4763c871a68f555526db93bfea2850449da3c58d 100644 (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
 of redirects libcurl will follow.
 .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
 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
index e9c8c1dbda6f1f2d02215ba96ae9315a3f3cfa93..e7f5d5fd9a33fdbe60197487cfee4118070ac462 100644 (file)
@@ -619,6 +619,11 @@ typedef enum {
   /* Set aliases for HTTP 200 in the HTTP Response header */
   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 */
 } CURLoption;
 
@@ -809,7 +814,7 @@ CURLcode curl_global_init(long flags);
 void curl_global_cleanup(void);
 
 /* This is the version number */
-#define LIBCURL_VERSION "7.10.4-pre2"
+#define LIBCURL_VERSION "7.10.4-pre5"
 #define LIBCURL_VERSION_NUM 0x070a04
 
 /* linked-list structure for the CURLOPT_QUOTE option (and other) */
index 850731ce311aa119018930b1006cb0eba41f1c96..1a9bd2a1d727fd5e66e6f51721cb33a00b19a622 100644 (file)
@@ -663,7 +663,8 @@ CURLcode Curl_http(struct connectdata *conn)
        host due to a location-follow, we do some weirdo checks here */
     if(!data->state.this_is_a_follow ||
        !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",
               data->state.user, data->state.passwd);
       if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer),
index 8a61d05ae80812061bbd1970362da4bd993033fb..43e92b9615158445e6a78b8a86e7f41050ffee6a 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -503,6 +503,14 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
      */
     data->set.http_follow_location = va_arg(param, long)?TRUE:FALSE;
     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:
     /*
      * This sets a requested HTTP version to be used. The value is one of
index 93ad35b6034f49896a77cba56a0962c4ac0c97c9..eb59521742363bd47d6f14645f08d88da7252d30 100644 (file)
@@ -736,6 +736,7 @@ struct UserDefined {
   bool hide_progress;
   bool http_fail_on_error;
   bool http_follow_location;
+  bool http_disable_hostname_check_before_authentication;
   bool include_header;
 #define http_include_header include_header /* former name */