diff options
| -rw-r--r-- | docs/curl.1 | 11 | ||||
| -rw-r--r-- | src/main.c | 13 | 
2 files changed, 23 insertions, 1 deletions
diff --git a/docs/curl.1 b/docs/curl.1 index f1fe1b9a9..465aff4d7 100644 --- a/docs/curl.1 +++ b/docs/curl.1 @@ -815,6 +815,17 @@ to FTP to the machine host.domain.com with user name \&'myself' and password  .IP "--netrc-optional"  Very similar to \fI--netrc\fP, but this option makes the .netrc usage  \fBoptional\fP and not mandatory as the \fI--netrc\fP option does. + +.IP "--netrc-file" +This option is similar to \fI--netrc\fP, except that you provide the path +(absolute or relative) to the netrc file that Curl should use. +You can only specify one netrc file per invocation. If several +\fI--netrc-file\fP options are provided, only the \fBlast one\fP will be used. +(Added in 7.21.5) + +This option overrides any use of \fI--netrc\fP as they are mutually exclusive. +It will also abide by --netrc-optional if specified. +  .IP "--negotiate"  (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate method was  designed by Microsoft and is used in their web applications. It is primarily diff --git a/src/main.c b/src/main.c index 1c707f89f..8a1fab8bc 100644 --- a/src/main.c +++ b/src/main.c @@ -527,6 +527,7 @@ struct Configurable {                                changed */    bool netrc_opt;    bool netrc; +  char *netrc_file;    bool noprogress;    bool isatty;             /* updated internally only if the output is a tty */    struct getout *url_list; /* point to the first node */ @@ -842,6 +843,7 @@ static void help(void)      "    --negotiate     Use HTTP Negotiate Authentication (H)",      " -n/--netrc         Must read .netrc for user name and password",      "    --netrc-optional Use either .netrc or URL; overrides -n", +    "    --netrc-file <file> Set up the netrc filename to use",      " -N/--no-buffer     Disable buffering of the output stream",      "    --no-keepalive  Disable keepalive use on the connection",      "    --no-sessionid  Disable SSL session-ID reusing (SSL)", @@ -1949,6 +1951,7 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */      {"M", "manual",      FALSE},      {"n", "netrc",       FALSE},      {"no", "netrc-optional", FALSE}, +    {"ne", "netrc-file", TRUE},      {"N", "buffer",   FALSE}, /* listed as --no-buffer in the help */      {"o", "output",      TRUE},      {"O",  "remote-name", FALSE}, @@ -2915,6 +2918,9 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */          /* use .netrc or URL */          config->netrc_opt = toggle;          break; +      case 'e': /* netrc-file */ +        GetStr(&config->netrc_file, nextarg); +        break;        default:          /* pick info from .netrc, if this is used for http, curl will             automatically enfore user+password with the request */ @@ -4047,6 +4053,8 @@ static void free_config_fields(struct Configurable *config)      free(config->writeout);    if(config->httppost)      curl_formfree(config->httppost); +  if(config->netrc_file) +    free(config->netrc_file);    if(config->cert)      free(config->cert);    if(config->cacert) @@ -5183,11 +5191,14 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])          if(config->netrc_opt)            my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL); -        else if(config->netrc) +        else if(config->netrc || config->netrc_file)            my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_REQUIRED);          else            my_setopt(curl, CURLOPT_NETRC, CURL_NETRC_IGNORED); +        if(config->netrc_file) +          my_setopt(curl, CURLOPT_NETRC_FILE, config->netrc_file); +          my_setopt(curl, CURLOPT_FOLLOWLOCATION, config->followlocation);          my_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, config->unrestricted_auth);          my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii);  | 
