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); |