mirror of
https://github.com/curl/curl.git
synced 2026-05-30 05:17:30 +03:00
tool_getparam: split opt_filestring into two sep functions
One for file name arguments and one for "strings". Closes #18546
This commit is contained in:
parent
c1be5459d9
commit
6434783168
1 changed files with 121 additions and 111 deletions
|
|
@ -2163,11 +2163,123 @@ static ParameterError opt_bool(struct OperationConfig *config,
|
|||
return PARAM_OK;
|
||||
}
|
||||
|
||||
/* opt_file handles file options */
|
||||
static ParameterError opt_file(struct OperationConfig *config,
|
||||
const struct LongShort *a,
|
||||
const char *nextarg)
|
||||
{
|
||||
ParameterError err = PARAM_OK;
|
||||
if((nextarg[0] == '-') && nextarg[1]) {
|
||||
/* if the filename looks like a command line option */
|
||||
warnf("The filename argument '%s' looks like a flag.", nextarg);
|
||||
}
|
||||
switch(a->cmd) {
|
||||
case C_ABSTRACT_UNIX_SOCKET: /* --abstract-unix-socket */
|
||||
config->abstract_unix_socket = TRUE;
|
||||
err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_CACERT: /* --cacert */
|
||||
err = getstr(&config->cacert, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_CAPATH: /* --capath */
|
||||
err = getstr(&config->capath, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_CERT: /* --cert */
|
||||
GetFileAndPassword(nextarg, &config->cert, &config->key_passwd);
|
||||
break;
|
||||
case C_CONFIG: /* --config */
|
||||
if(parseconfig(nextarg)) {
|
||||
errorf("cannot read config from '%s'", nextarg);
|
||||
err = PARAM_READ_ERROR;
|
||||
}
|
||||
break;
|
||||
case C_CRLFILE: /* --crlfile */
|
||||
err = getstr(&config->crlfile, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_DUMP_HEADER: /* --dump-header */
|
||||
err = getstr(&config->headerfile, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_ETAG_SAVE: /* --etag-save */
|
||||
if(config->num_urls > 1) {
|
||||
errorf("The etag options only work on a single URL");
|
||||
err = PARAM_BAD_USE;
|
||||
}
|
||||
else
|
||||
err = getstr(&config->etag_save_file, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_ETAG_COMPARE: /* --etag-compare */
|
||||
if(config->num_urls > 1) {
|
||||
errorf("The etag options only work on a single URL");
|
||||
err = PARAM_BAD_USE;
|
||||
}
|
||||
else
|
||||
err = getstr(&config->etag_compare_file, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_KEY: /* --key */
|
||||
err = getstr(&config->key, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_NETRC_FILE: /* --netrc-file */
|
||||
err = getstr(&config->netrc_file, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_OUTPUT: /* --output */
|
||||
err = parse_output(config, nextarg);
|
||||
break;
|
||||
case C_PROXY_CACERT: /* --proxy-cacert */
|
||||
err = getstr(&config->proxy_cacert, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_CAPATH: /* --proxy-capath */
|
||||
err = getstr(&config->proxy_capath, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_CERT: /* --proxy-cert */
|
||||
GetFileAndPassword(nextarg, &config->proxy_cert,
|
||||
&config->proxy_key_passwd);
|
||||
break;
|
||||
case C_PROXY_CRLFILE: /* --proxy-crlfile */
|
||||
err = getstr(&config->proxy_crlfile, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_KEY: /* --proxy-key */
|
||||
err = getstr(&config->proxy_key, nextarg, ALLOW_BLANK);
|
||||
break;
|
||||
case C_SSL_SESSIONS: /* --ssl-sessions */
|
||||
if(feature_ssls_export)
|
||||
err = getstr(&global->ssl_sessions, nextarg, DENY_BLANK);
|
||||
else
|
||||
err = PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
break;
|
||||
case C_STDERR: /* --stderr */
|
||||
tool_set_stderr_file(nextarg);
|
||||
break;
|
||||
case C_TRACE: /* --trace */
|
||||
err = getstr(&global->trace_dump, nextarg, DENY_BLANK);
|
||||
if(!err) {
|
||||
if(global->tracetype && (global->tracetype != TRACE_BIN))
|
||||
warnf("--trace overrides an earlier trace/verbose option");
|
||||
global->tracetype = TRACE_BIN;
|
||||
}
|
||||
break;
|
||||
case C_TRACE_ASCII: /* --trace-ascii */
|
||||
err = getstr(&global->trace_dump, nextarg, DENY_BLANK);
|
||||
if(!err) {
|
||||
if(global->tracetype && (global->tracetype != TRACE_ASCII))
|
||||
warnf("--trace-ascii overrides an earlier trace/verbose option");
|
||||
global->tracetype = TRACE_ASCII;
|
||||
}
|
||||
break;
|
||||
case C_UNIX_SOCKET: /* --unix-socket */
|
||||
config->abstract_unix_socket = FALSE;
|
||||
err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_UPLOAD_FILE: /* --upload-file */
|
||||
err = parse_upload_file(config, nextarg);
|
||||
break;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
/* opt_filestring handles string and file options */
|
||||
static ParameterError opt_filestring(struct OperationConfig *config,
|
||||
const struct LongShort *a,
|
||||
const char *nextarg)
|
||||
/* opt_string handles string options */
|
||||
static ParameterError opt_string(struct OperationConfig *config,
|
||||
const struct LongShort *a,
|
||||
const char *nextarg)
|
||||
{
|
||||
ParameterError err = PARAM_OK;
|
||||
curl_off_t value;
|
||||
|
|
@ -2227,22 +2339,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
/* IP addrs of DNS servers */
|
||||
err = getstr(&config->dns_servers, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_TRACE: /* --trace */
|
||||
err = getstr(&global->trace_dump, nextarg, DENY_BLANK);
|
||||
if(!err) {
|
||||
if(global->tracetype && (global->tracetype != TRACE_BIN))
|
||||
warnf("--trace overrides an earlier trace/verbose option");
|
||||
global->tracetype = TRACE_BIN;
|
||||
}
|
||||
break;
|
||||
case C_TRACE_ASCII: /* --trace-ascii */
|
||||
err = getstr(&global->trace_dump, nextarg, DENY_BLANK);
|
||||
if(!err) {
|
||||
if(global->tracetype && (global->tracetype != TRACE_ASCII))
|
||||
warnf("--trace-ascii overrides an earlier trace/verbose option");
|
||||
global->tracetype = TRACE_ASCII;
|
||||
}
|
||||
break;
|
||||
case C_LIMIT_RATE: /* --limit-rate */
|
||||
err = GetSizeParameter(nextarg, "rate", &value);
|
||||
if(!err) {
|
||||
|
|
@ -2272,9 +2368,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
config->authtype |= CURLAUTH_AWS_SIGV4;
|
||||
err = getstr(&config->aws_sigv4, nextarg, ALLOW_BLANK);
|
||||
break;
|
||||
case C_STDERR: /* --stderr */
|
||||
tool_set_stderr_file(nextarg);
|
||||
break;
|
||||
case C_INTERFACE: /* --interface */
|
||||
/* interface */
|
||||
err = getstr(&config->iface, nextarg, DENY_BLANK);
|
||||
|
|
@ -2406,10 +2499,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_SASL_AUTHZID: /* --sasl-authzid */
|
||||
err = getstr(&config->sasl_authzid, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_UNIX_SOCKET: /* --unix-socket */
|
||||
config->abstract_unix_socket = FALSE;
|
||||
err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_SERVICE_NAME: /* --proxy-service-name */
|
||||
err = getstr(&config->proxy_service_name, nextarg, DENY_BLANK);
|
||||
break;
|
||||
|
|
@ -2427,10 +2516,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_CONNECT_TO: /* --connect-to */
|
||||
err = add2list(&config->connect_to, nextarg);
|
||||
break;
|
||||
case C_ABSTRACT_UNIX_SOCKET: /* --abstract-unix-socket */
|
||||
config->abstract_unix_socket = TRUE;
|
||||
err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_TLS_MAX: /* --tls-max */
|
||||
err = str2tls_max(&config->ssl_version_max, nextarg);
|
||||
if(!err && (config->ssl_version_max < config->ssl_version)) {
|
||||
|
|
@ -2499,9 +2584,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_URL_QUERY: /* --url-query */
|
||||
err = url_query(nextarg, config);
|
||||
break;
|
||||
case C_DUMP_HEADER: /* --dump-header */
|
||||
err = getstr(&config->headerfile, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_REFERER: { /* --referer */
|
||||
size_t len = strlen(nextarg);
|
||||
/* does it end with ;auto ? */
|
||||
|
|
@ -2520,18 +2602,9 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
tool_safefree(config->referer);
|
||||
}
|
||||
break;
|
||||
case C_CERT: /* --cert */
|
||||
GetFileAndPassword(nextarg, &config->cert, &config->key_passwd);
|
||||
break;
|
||||
case C_CACERT: /* --cacert */
|
||||
err = getstr(&config->cacert, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_CERT_TYPE: /* --cert-type */
|
||||
err = getstr(&config->cert_type, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_KEY: /* --key */
|
||||
err = getstr(&config->key, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_KEY_TYPE: /* --key-type */
|
||||
err = getstr(&config->key_type, nextarg, DENY_BLANK);
|
||||
break;
|
||||
|
|
@ -2548,9 +2621,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_ECH: /* --ech */
|
||||
err = parse_ech(config, nextarg);
|
||||
break;
|
||||
case C_CAPATH: /* --capath */
|
||||
err = getstr(&config->capath, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PUBKEY: /* --pubkey */
|
||||
err = getstr(&config->pubkey, nextarg, DENY_BLANK);
|
||||
break;
|
||||
|
|
@ -2567,9 +2637,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
else
|
||||
err = getstr(&config->hostpubsha256, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_CRLFILE: /* --crlfile */
|
||||
err = getstr(&config->crlfile, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_TLSUSER: /* --tlsuser */
|
||||
if(!feature_tls_srp)
|
||||
err = PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
|
|
@ -2597,12 +2664,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_PROXY_PINNEDPUBKEY: /* --proxy-pinnedpubkey */
|
||||
err = getstr(&config->proxy_pinnedpubkey, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_SSL_SESSIONS: /* --ssl-sessions */
|
||||
if(feature_ssls_export)
|
||||
err = getstr(&global->ssl_sessions, nextarg, DENY_BLANK);
|
||||
else
|
||||
err = PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
break;
|
||||
case C_PROXY_TLSUSER: /* --proxy-tlsuser */
|
||||
if(!feature_tls_srp)
|
||||
err = PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
|
|
@ -2625,16 +2686,9 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
err = PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
|
||||
}
|
||||
break;
|
||||
case C_PROXY_CERT: /* --proxy-cert */
|
||||
GetFileAndPassword(nextarg, &config->proxy_cert,
|
||||
&config->proxy_key_passwd);
|
||||
break;
|
||||
case C_PROXY_CERT_TYPE: /* --proxy-cert-type */
|
||||
err = getstr(&config->proxy_cert_type, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_KEY: /* --proxy-key */
|
||||
err = getstr(&config->proxy_key, nextarg, ALLOW_BLANK);
|
||||
break;
|
||||
case C_PROXY_KEY_TYPE: /* --proxy-key-type */
|
||||
err = getstr(&config->proxy_key_type, nextarg, DENY_BLANK);
|
||||
break;
|
||||
|
|
@ -2644,34 +2698,9 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_PROXY_CIPHERS: /* --proxy-ciphers */
|
||||
err = getstr(&config->proxy_cipher_list, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_CRLFILE: /* --proxy-crlfile */
|
||||
err = getstr(&config->proxy_crlfile, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_LOGIN_OPTIONS: /* --login-options */
|
||||
err = getstr(&config->login_options, nextarg, ALLOW_BLANK);
|
||||
break;
|
||||
case C_PROXY_CACERT: /* --proxy-cacert */
|
||||
err = getstr(&config->proxy_cacert, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_PROXY_CAPATH: /* --proxy-capath */
|
||||
err = getstr(&config->proxy_capath, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_ETAG_SAVE: /* --etag-save */
|
||||
if(config->num_urls > 1) {
|
||||
errorf("The etag options only work on a single URL");
|
||||
err = PARAM_BAD_USE;
|
||||
}
|
||||
else
|
||||
err = getstr(&config->etag_save_file, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_ETAG_COMPARE: /* --etag-compare */
|
||||
if(config->num_urls > 1) {
|
||||
errorf("The etag options only work on a single URL");
|
||||
err = PARAM_BAD_USE;
|
||||
}
|
||||
else
|
||||
err = getstr(&config->etag_compare_file, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_CURVES: /* --curves */
|
||||
err = getstr(&config->ssl_ec_curves, nextarg, DENY_BLANK);
|
||||
break;
|
||||
|
|
@ -2695,25 +2724,13 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
case C_PROXY_HEADER: /* --proxy-header */
|
||||
err = parse_header(config, (cmdline_t)a->cmd, nextarg);
|
||||
break;
|
||||
case C_CONFIG: /* --config */
|
||||
if(parseconfig(nextarg)) {
|
||||
errorf("cannot read config from '%s'", nextarg);
|
||||
err = PARAM_READ_ERROR;
|
||||
}
|
||||
break;
|
||||
case C_MAX_TIME: /* --max-time */
|
||||
/* specified max time */
|
||||
err = secs2ms(&config->timeout_ms, nextarg);
|
||||
break;
|
||||
case C_NETRC_FILE: /* --netrc-file */
|
||||
err = getstr(&config->netrc_file, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_OUTPUT_DIR: /* --output-dir */
|
||||
err = getstr(&config->output_dir, nextarg, DENY_BLANK);
|
||||
break;
|
||||
case C_OUTPUT: /* --output */
|
||||
err = parse_output(config, nextarg);
|
||||
break;
|
||||
case C_FTP_PORT: /* --ftp-port */
|
||||
/* This makes the FTP sessions use PORT instead of PASV */
|
||||
/* use <eth0> or <192.168.10.10> style addresses. Anything except
|
||||
|
|
@ -2736,9 +2753,6 @@ static ParameterError opt_filestring(struct OperationConfig *config,
|
|||
/* Telnet options */
|
||||
err = add2list(&config->telnet_options, nextarg);
|
||||
break;
|
||||
case C_UPLOAD_FILE: /* --upload-file */
|
||||
err = parse_upload_file(config, nextarg);
|
||||
break;
|
||||
case C_USER: /* --user */
|
||||
/* user:password */
|
||||
err = getstr(&config->userpwd, nextarg, ALLOW_BLANK);
|
||||
|
|
@ -2947,18 +2961,14 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
break;
|
||||
}
|
||||
|
||||
if((ARGTYPE(a->desc) == ARG_FILE) &&
|
||||
(nextarg[0] == '-') && nextarg[1]) {
|
||||
/* if the filename looks like a command line option */
|
||||
warnf("The filename argument '%s' looks like a flag.",
|
||||
nextarg);
|
||||
}
|
||||
else if(has_leading_unicode((const unsigned char *)nextarg)) {
|
||||
if(has_leading_unicode((const unsigned char *)nextarg)) {
|
||||
warnf("The argument '%s' starts with a Unicode character. "
|
||||
"Maybe ASCII was intended?", nextarg);
|
||||
}
|
||||
/* ARG_FILE | ARG_STRG */
|
||||
err = opt_filestring(config, a, nextarg);
|
||||
if(ARGTYPE(a->desc) == ARG_FILE)
|
||||
err = opt_file(config, a, nextarg);
|
||||
else /* if(ARGTYPE(a->desc) == ARG_STRG) */
|
||||
err = opt_string(config, a, nextarg);
|
||||
if(a->desc & ARG_CLEAR)
|
||||
cleanarg(CURL_UNCONST(nextarg));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue