Commit 06fc3569 authored by Julien Chaffraix's avatar Julien Chaffraix
Browse files

curl: Added --netrc-file.

This enables people to specify a path to the netrc file to use.
The new option override --netrc if both are present. However it
does follow --netrc-optional if specified.
parent c4369f34
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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
+12 −1
Original line number Diff line number Diff line
@@ -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);