Commit df7839b6 authored by Dan Fandrich's avatar Dan Fandrich
Browse files

Set and use more necessary options when some protocols are disabled

When curl and libcurl are built with some protocols disabled, they stop
setting and receiving some options that don't make sense with those
protocols.  In particular, when HTTP is disabled many options aren't set
that are used only by HTTP.  However, some options that appear to be
HTTP-only are actually used by other protocols as well (some despite
having HTTP in the name) and should be set, but weren't. This change now
causes some of these options to be set and used for more (or for all)
protocols. In particular, this fixes tests 646 through 649 in an
HTTP-disabled build, which use the MIME API in the mail protocols.
parent a352e21c
Loading
Loading
Loading
Loading
+13 −11
Original line number Original line Diff line number Diff line
@@ -1152,6 +1152,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
    data->set.httpreq = HTTPREQ_POST_FORM;
    data->set.httpreq = HTTPREQ_POST_FORM;
    data->set.opt_no_body = FALSE; /* this is implied */
    data->set.opt_no_body = FALSE; /* this is implied */
    break;
    break;
#endif   /* CURL_DISABLE_HTTP */


  case CURLOPT_MIMEPOST:
  case CURLOPT_MIMEPOST:
    /*
    /*
@@ -1194,6 +1195,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
    data->set.headers = va_arg(param, struct curl_slist *);
    data->set.headers = va_arg(param, struct curl_slist *);
    break;
    break;


#ifndef CURL_DISABLE_HTTP
  case CURLOPT_PROXYHEADER:
  case CURLOPT_PROXYHEADER:
    /*
    /*
     * Set a list with proxy headers to use (or replace internals with)
     * Set a list with proxy headers to use (or replace internals with)
@@ -1345,7 +1347,7 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
    }
    }


    break;
    break;
#endif /* CURL_DISABLE_COOKIES */
#endif /* !CURL_DISABLE_COOKIES */


  case CURLOPT_HTTPGET:
  case CURLOPT_HTTPGET:
    /*
    /*
@@ -1371,6 +1373,16 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
    data->set.httpversion = arg;
    data->set.httpversion = arg;
    break;
    break;


  case CURLOPT_EXPECT_100_TIMEOUT_MS:
    /*
     * Time to wait for a response to a HTTP request containing an
     * Expect: 100-continue header before sending the data anyway.
     */
    data->set.expect_100_timeout = va_arg(param, long);
    break;

#endif   /* CURL_DISABLE_HTTP */

  case CURLOPT_HTTPAUTH:
  case CURLOPT_HTTPAUTH:
    /*
    /*
     * Set HTTP Authentication type BITMASK.
     * Set HTTP Authentication type BITMASK.
@@ -1422,16 +1434,6 @@ CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
  }
  }
  break;
  break;


  case CURLOPT_EXPECT_100_TIMEOUT_MS:
    /*
     * Time to wait for a response to a HTTP request containing an
     * Expect: 100-continue header before sending the data anyway.
     */
    data->set.expect_100_timeout = va_arg(param, long);
    break;

#endif   /* CURL_DISABLE_HTTP */

  case CURLOPT_CUSTOMREQUEST:
  case CURLOPT_CUSTOMREQUEST:
    /*
    /*
     * Set a custom string to use as request
     * Set a custom string to use as request
+25 −21
Original line number Original line Diff line number Diff line
@@ -986,15 +986,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
        my_setopt(curl, CURLOPT_ERRORBUFFER, errorbuffer);
        my_setopt(curl, CURLOPT_ERRORBUFFER, errorbuffer);
        my_setopt(curl, CURLOPT_TIMEOUT_MS, (long)(config->timeout * 1000));
        my_setopt(curl, CURLOPT_TIMEOUT_MS, (long)(config->timeout * 1000));


        if(built_in_protos & CURLPROTO_HTTP) {

          long postRedir = 0;

          my_setopt(curl, CURLOPT_FOLLOWLOCATION,
                    config->followlocation?1L:0L);
          my_setopt(curl, CURLOPT_UNRESTRICTED_AUTH,
                    config->unrestricted_auth?1L:0L);

        switch(config->httpreq) {
        switch(config->httpreq) {
        case HTTPREQ_SIMPLEPOST:
        case HTTPREQ_SIMPLEPOST:
          my_setopt_str(curl, CURLOPT_POSTFIELDS,
          my_setopt_str(curl, CURLOPT_POSTFIELDS,
@@ -1009,10 +1000,27 @@ static CURLcode operate_do(struct GlobalConfig *global,
          break;
          break;
        }
        }


        /* new in libcurl 7.10.6 (default is Basic) */
        if(config->authtype)
          my_setopt_bitmask(curl, CURLOPT_HTTPAUTH, (long)config->authtype);

        my_setopt_slist(curl, CURLOPT_HTTPHEADER, config->headers);

        if(built_in_protos & (CURLPROTO_HTTP | CURLPROTO_RTSP)) {
          my_setopt_str(curl, CURLOPT_REFERER, config->referer);
          my_setopt_str(curl, CURLOPT_REFERER, config->referer);
          my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer?1L:0L);
          my_setopt_str(curl, CURLOPT_USERAGENT, config->useragent);
          my_setopt_str(curl, CURLOPT_USERAGENT, config->useragent);
          my_setopt_slist(curl, CURLOPT_HTTPHEADER, config->headers);
        }

        if(built_in_protos & CURLPROTO_HTTP) {

          long postRedir = 0;

          my_setopt(curl, CURLOPT_FOLLOWLOCATION,
                    config->followlocation?1L:0L);
          my_setopt(curl, CURLOPT_UNRESTRICTED_AUTH,
                    config->unrestricted_auth?1L:0L);

          my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer?1L:0L);


          /* new in libcurl 7.36.0 */
          /* new in libcurl 7.36.0 */
          if(config->proxyheaders) {
          if(config->proxyheaders) {
@@ -1029,10 +1037,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
            my_setopt_enum(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
            my_setopt_enum(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
          }
          }


          /* new in libcurl 7.10.6 (default is Basic) */
          if(config->authtype)
            my_setopt_bitmask(curl, CURLOPT_HTTPAUTH, (long)config->authtype);

          /* curl 7.19.1 (the 301 version existed in 7.18.2),
          /* curl 7.19.1 (the 301 version existed in 7.18.2),
             303 was added in 7.26.0 */
             303 was added in 7.26.0 */
          if(config->post301)
          if(config->post301)
+2 −2
Original line number Original line Diff line number Diff line
@@ -84,10 +84,10 @@ int main(int argc, char *argv[])
  curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1401");
  curl_easy_setopt(hnd, CURLOPT_URL, "http://%HOSTIP:%HTTPPORT/we/want/1401");
  curl_easy_setopt(hnd, CURLOPT_HEADER, 1L);
  curl_easy_setopt(hnd, CURLOPT_HEADER, 1L);
  curl_easy_setopt(hnd, CURLOPT_USERPWD, "fake:user");
  curl_easy_setopt(hnd, CURLOPT_USERPWD, "fake:user");
  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "MyUA");
  curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC);
  curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1);
  curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, slist1);
  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "MyUA");
  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
  curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_BASIC);
  curl_easy_setopt(hnd, CURLOPT_COOKIE, "chocolate=chip");
  curl_easy_setopt(hnd, CURLOPT_COOKIE, "chocolate=chip");
  curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
  curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);