tool_getparam: add "TLS required" flag for each such option

... and check it early, once.

Closes #16159
This commit is contained in:
Daniel Stenberg 2025-02-03 22:43:36 +01:00
parent 943de21619
commit 2f00a7d5a7
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
4 changed files with 91 additions and 113 deletions

View file

@ -68,20 +68,20 @@ static ParameterError getstr(char **str, const char *val, bool allowblank)
/* this array MUST be alphasorted based on the 'lname' */ /* this array MUST be alphasorted based on the 'lname' */
static const struct LongShort aliases[]= { static const struct LongShort aliases[]= {
{"abstract-unix-socket", ARG_FILE, ' ', C_ABSTRACT_UNIX_SOCKET}, {"abstract-unix-socket", ARG_FILE, ' ', C_ABSTRACT_UNIX_SOCKET},
{"alpn", ARG_BOOL|ARG_NO, ' ', C_ALPN}, {"alpn", ARG_BOOL|ARG_NO|ARG_TLS, ' ', C_ALPN},
{"alt-svc", ARG_STRG, ' ', C_ALT_SVC}, {"alt-svc", ARG_STRG, ' ', C_ALT_SVC},
{"anyauth", ARG_BOOL, ' ', C_ANYAUTH}, {"anyauth", ARG_BOOL, ' ', C_ANYAUTH},
{"append", ARG_BOOL, 'a', C_APPEND}, {"append", ARG_BOOL, 'a', C_APPEND},
{"aws-sigv4", ARG_STRG, ' ', C_AWS_SIGV4}, {"aws-sigv4", ARG_STRG, ' ', C_AWS_SIGV4},
{"basic", ARG_BOOL, ' ', C_BASIC}, {"basic", ARG_BOOL, ' ', C_BASIC},
{"buffer", ARG_BOOL|ARG_NO, 'N', C_BUFFER}, {"buffer", ARG_BOOL|ARG_NO, 'N', C_BUFFER},
{"ca-native", ARG_BOOL, ' ', C_CA_NATIVE}, {"ca-native", ARG_BOOL|ARG_TLS, ' ', C_CA_NATIVE},
{"cacert", ARG_FILE, ' ', C_CACERT}, {"cacert", ARG_FILE|ARG_TLS, ' ', C_CACERT},
{"capath", ARG_FILE, ' ', C_CAPATH}, {"capath", ARG_FILE|ARG_TLS, ' ', C_CAPATH},
{"cert", ARG_FILE, 'E', C_CERT}, {"cert", ARG_FILE|ARG_TLS, 'E', C_CERT},
{"cert-status", ARG_BOOL, ' ', C_CERT_STATUS}, {"cert-status", ARG_BOOL|ARG_TLS, ' ', C_CERT_STATUS},
{"cert-type", ARG_STRG, ' ', C_CERT_TYPE}, {"cert-type", ARG_STRG|ARG_TLS, ' ', C_CERT_TYPE},
{"ciphers", ARG_STRG, ' ', C_CIPHERS}, {"ciphers", ARG_STRG|ARG_TLS, ' ', C_CIPHERS},
{"clobber", ARG_BOOL|ARG_NO, ' ', C_CLOBBER}, {"clobber", ARG_BOOL|ARG_NO, ' ', C_CLOBBER},
{"compressed", ARG_BOOL, ' ', C_COMPRESSED}, {"compressed", ARG_BOOL, ' ', C_COMPRESSED},
{"compressed-ssh", ARG_BOOL, ' ', C_COMPRESSED_SSH}, {"compressed-ssh", ARG_BOOL, ' ', C_COMPRESSED_SSH},
@ -94,8 +94,8 @@ static const struct LongShort aliases[]= {
{"create-dirs", ARG_BOOL, ' ', C_CREATE_DIRS}, {"create-dirs", ARG_BOOL, ' ', C_CREATE_DIRS},
{"create-file-mode", ARG_STRG, ' ', C_CREATE_FILE_MODE}, {"create-file-mode", ARG_STRG, ' ', C_CREATE_FILE_MODE},
{"crlf", ARG_BOOL, ' ', C_CRLF}, {"crlf", ARG_BOOL, ' ', C_CRLF},
{"crlfile", ARG_FILE, ' ', C_CRLFILE}, {"crlfile", ARG_FILE|ARG_TLS, ' ', C_CRLFILE},
{"curves", ARG_STRG, ' ', C_CURVES}, {"curves", ARG_STRG|ARG_TLS, ' ', C_CURVES},
{"data", ARG_STRG, 'd', C_DATA}, {"data", ARG_STRG, 'd', C_DATA},
{"data-ascii", ARG_STRG, ' ', C_DATA_ASCII}, {"data-ascii", ARG_STRG, ' ', C_DATA_ASCII},
{"data-binary", ARG_STRG, ' ', C_DATA_BINARY}, {"data-binary", ARG_STRG, ' ', C_DATA_BINARY},
@ -111,14 +111,14 @@ static const struct LongShort aliases[]= {
{"dns-ipv4-addr", ARG_STRG, ' ', C_DNS_IPV4_ADDR}, {"dns-ipv4-addr", ARG_STRG, ' ', C_DNS_IPV4_ADDR},
{"dns-ipv6-addr", ARG_STRG, ' ', C_DNS_IPV6_ADDR}, {"dns-ipv6-addr", ARG_STRG, ' ', C_DNS_IPV6_ADDR},
{"dns-servers", ARG_STRG, ' ', C_DNS_SERVERS}, {"dns-servers", ARG_STRG, ' ', C_DNS_SERVERS},
{"doh-cert-status", ARG_BOOL, ' ', C_DOH_CERT_STATUS}, {"doh-cert-status", ARG_BOOL|ARG_TLS, ' ', C_DOH_CERT_STATUS},
{"doh-insecure", ARG_BOOL, ' ', C_DOH_INSECURE}, {"doh-insecure", ARG_BOOL|ARG_TLS, ' ', C_DOH_INSECURE},
{"doh-url" , ARG_STRG, ' ', C_DOH_URL}, {"doh-url" , ARG_STRG|ARG_TLS, ' ', C_DOH_URL},
{"dump-ca-embed", ARG_NONE, ' ', C_DUMP_CA_EMBED}, {"dump-ca-embed", ARG_NONE|ARG_TLS, ' ', C_DUMP_CA_EMBED},
{"dump-header", ARG_FILE, 'D', C_DUMP_HEADER}, {"dump-header", ARG_FILE, 'D', C_DUMP_HEADER},
{"ech", ARG_STRG, ' ', C_ECH}, {"ech", ARG_STRG|ARG_TLS, ' ', C_ECH},
{"egd-file", ARG_STRG, ' ', C_EGD_FILE}, {"egd-file", ARG_STRG, ' ', C_EGD_FILE},
{"engine", ARG_STRG, ' ', C_ENGINE}, {"engine", ARG_STRG|ARG_TLS, ' ', C_ENGINE},
{"eprt", ARG_BOOL, ' ', C_EPRT}, {"eprt", ARG_BOOL, ' ', C_EPRT},
{"epsv", ARG_BOOL, ' ', C_EPSV}, {"epsv", ARG_BOOL, ' ', C_EPSV},
{"etag-compare", ARG_FILE, ' ', C_ETAG_COMPARE}, {"etag-compare", ARG_FILE, ' ', C_ETAG_COMPARE},
@ -139,11 +139,11 @@ static const struct LongShort aliases[]= {
{"ftp-port", ARG_STRG, 'P', C_FTP_PORT}, {"ftp-port", ARG_STRG, 'P', C_FTP_PORT},
{"ftp-pret", ARG_BOOL, ' ', C_FTP_PRET}, {"ftp-pret", ARG_BOOL, ' ', C_FTP_PRET},
{"ftp-skip-pasv-ip", ARG_BOOL, ' ', C_FTP_SKIP_PASV_IP}, {"ftp-skip-pasv-ip", ARG_BOOL, ' ', C_FTP_SKIP_PASV_IP},
{"ftp-ssl", ARG_BOOL, ' ', C_FTP_SSL}, {"ftp-ssl", ARG_BOOL|ARG_TLS, ' ', C_FTP_SSL},
{"ftp-ssl-ccc", ARG_BOOL, ' ', C_FTP_SSL_CCC}, {"ftp-ssl-ccc", ARG_BOOL|ARG_TLS, ' ', C_FTP_SSL_CCC},
{"ftp-ssl-ccc-mode", ARG_STRG, ' ', C_FTP_SSL_CCC_MODE}, {"ftp-ssl-ccc-mode", ARG_STRG|ARG_TLS, ' ', C_FTP_SSL_CCC_MODE},
{"ftp-ssl-control", ARG_BOOL, ' ', C_FTP_SSL_CONTROL}, {"ftp-ssl-control", ARG_BOOL|ARG_TLS, ' ', C_FTP_SSL_CONTROL},
{"ftp-ssl-reqd", ARG_BOOL, ' ', C_FTP_SSL_REQD}, {"ftp-ssl-reqd", ARG_BOOL|ARG_TLS, ' ', C_FTP_SSL_REQD},
{"get", ARG_BOOL, 'G', C_GET}, {"get", ARG_BOOL, 'G', C_GET},
{"globoff", ARG_BOOL, 'g', C_GLOBOFF}, {"globoff", ARG_BOOL, 'g', C_GLOBOFF},
{"happy-eyeballs-timeout-ms", ARG_STRG, ' ', C_HAPPY_EYEBALLS_TIMEOUT_MS}, {"happy-eyeballs-timeout-ms", ARG_STRG, ' ', C_HAPPY_EYEBALLS_TIMEOUT_MS},
@ -154,14 +154,14 @@ static const struct LongShort aliases[]= {
{"help", ARG_BOOL, 'h', C_HELP}, {"help", ARG_BOOL, 'h', C_HELP},
{"hostpubmd5", ARG_STRG, ' ', C_HOSTPUBMD5}, {"hostpubmd5", ARG_STRG, ' ', C_HOSTPUBMD5},
{"hostpubsha256", ARG_STRG, ' ', C_HOSTPUBSHA256}, {"hostpubsha256", ARG_STRG, ' ', C_HOSTPUBSHA256},
{"hsts", ARG_STRG, ' ', C_HSTS}, {"hsts", ARG_STRG|ARG_TLS, ' ', C_HSTS},
{"http0.9", ARG_BOOL, ' ', C_HTTP0_9}, {"http0.9", ARG_BOOL, ' ', C_HTTP0_9},
{"http1.0", ARG_NONE, '0', C_HTTP1_0}, {"http1.0", ARG_NONE, '0', C_HTTP1_0},
{"http1.1", ARG_NONE, ' ', C_HTTP1_1}, {"http1.1", ARG_NONE, ' ', C_HTTP1_1},
{"http2", ARG_NONE, ' ', C_HTTP2}, {"http2", ARG_NONE, ' ', C_HTTP2},
{"http2-prior-knowledge", ARG_NONE, ' ', C_HTTP2_PRIOR_KNOWLEDGE}, {"http2-prior-knowledge", ARG_NONE, ' ', C_HTTP2_PRIOR_KNOWLEDGE},
{"http3", ARG_NONE, ' ', C_HTTP3}, {"http3", ARG_NONE|ARG_TLS, ' ', C_HTTP3},
{"http3-only", ARG_NONE, ' ', C_HTTP3_ONLY}, {"http3-only", ARG_NONE|ARG_TLS, ' ', C_HTTP3_ONLY},
{"ignore-content-length", ARG_BOOL, ' ', C_IGNORE_CONTENT_LENGTH}, {"ignore-content-length", ARG_BOOL, ' ', C_IGNORE_CONTENT_LENGTH},
{"include", ARG_BOOL, ' ', C_INCLUDE}, {"include", ARG_BOOL, ' ', C_INCLUDE},
{"insecure", ARG_BOOL, 'k', C_INSECURE}, {"insecure", ARG_BOOL, 'k', C_INSECURE},
@ -177,8 +177,8 @@ static const struct LongShort aliases[]= {
{"keepalive", ARG_BOOL|ARG_NO, ' ', C_KEEPALIVE}, {"keepalive", ARG_BOOL|ARG_NO, ' ', C_KEEPALIVE},
{"keepalive-cnt", ARG_STRG, ' ', C_KEEPALIVE_CNT}, {"keepalive-cnt", ARG_STRG, ' ', C_KEEPALIVE_CNT},
{"keepalive-time", ARG_STRG, ' ', C_KEEPALIVE_TIME}, {"keepalive-time", ARG_STRG, ' ', C_KEEPALIVE_TIME},
{"key", ARG_FILE, ' ', C_KEY}, {"key", ARG_FILE|ARG_TLS, ' ', C_KEY},
{"key-type", ARG_STRG, ' ', C_KEY_TYPE}, {"key-type", ARG_STRG|ARG_TLS, ' ', C_KEY_TYPE},
{"krb", ARG_STRG, ' ', C_KRB}, {"krb", ARG_STRG, ' ', C_KRB},
{"krb4", ARG_STRG, ' ', C_KRB4}, {"krb4", ARG_STRG, ' ', C_KRB4},
{"libcurl", ARG_STRG, ' ', C_LIBCURL}, {"libcurl", ARG_STRG, ' ', C_LIBCURL},
@ -215,7 +215,7 @@ static const struct LongShort aliases[]= {
{"parallel-max", ARG_STRG, ' ', C_PARALLEL_MAX}, {"parallel-max", ARG_STRG, ' ', C_PARALLEL_MAX},
{"pass", ARG_STRG, ' ', C_PASS}, {"pass", ARG_STRG, ' ', C_PASS},
{"path-as-is", ARG_BOOL, ' ', C_PATH_AS_IS}, {"path-as-is", ARG_BOOL, ' ', C_PATH_AS_IS},
{"pinnedpubkey", ARG_STRG, ' ', C_PINNEDPUBKEY}, {"pinnedpubkey", ARG_STRG|ARG_TLS, ' ', C_PINNEDPUBKEY},
{"post301", ARG_BOOL, ' ', C_POST301}, {"post301", ARG_BOOL, ' ', C_POST301},
{"post302", ARG_BOOL, ' ', C_POST302}, {"post302", ARG_BOOL, ' ', C_POST302},
{"post303", ARG_BOOL, ' ', C_POST303}, {"post303", ARG_BOOL, ' ', C_POST303},
@ -228,31 +228,33 @@ static const struct LongShort aliases[]= {
{"proxy", ARG_STRG, 'x', C_PROXY}, {"proxy", ARG_STRG, 'x', C_PROXY},
{"proxy-anyauth", ARG_BOOL, ' ', C_PROXY_ANYAUTH}, {"proxy-anyauth", ARG_BOOL, ' ', C_PROXY_ANYAUTH},
{"proxy-basic", ARG_BOOL, ' ', C_PROXY_BASIC}, {"proxy-basic", ARG_BOOL, ' ', C_PROXY_BASIC},
{"proxy-ca-native", ARG_BOOL, ' ', C_PROXY_CA_NATIVE}, {"proxy-ca-native", ARG_BOOL|ARG_TLS, ' ', C_PROXY_CA_NATIVE},
{"proxy-cacert", ARG_FILE, ' ', C_PROXY_CACERT}, {"proxy-cacert", ARG_FILE|ARG_TLS, ' ', C_PROXY_CACERT},
{"proxy-capath", ARG_FILE, ' ', C_PROXY_CAPATH}, {"proxy-capath", ARG_FILE|ARG_TLS, ' ', C_PROXY_CAPATH},
{"proxy-cert", ARG_FILE, ' ', C_PROXY_CERT}, {"proxy-cert", ARG_FILE|ARG_TLS, ' ', C_PROXY_CERT},
{"proxy-cert-type", ARG_STRG, ' ', C_PROXY_CERT_TYPE}, {"proxy-cert-type", ARG_STRG|ARG_TLS, ' ', C_PROXY_CERT_TYPE},
{"proxy-ciphers", ARG_STRG, ' ', C_PROXY_CIPHERS}, {"proxy-ciphers", ARG_STRG|ARG_TLS, ' ', C_PROXY_CIPHERS},
{"proxy-crlfile", ARG_FILE, ' ', C_PROXY_CRLFILE}, {"proxy-crlfile", ARG_FILE|ARG_TLS, ' ', C_PROXY_CRLFILE},
{"proxy-digest", ARG_BOOL, ' ', C_PROXY_DIGEST}, {"proxy-digest", ARG_BOOL, ' ', C_PROXY_DIGEST},
{"proxy-header", ARG_STRG, ' ', C_PROXY_HEADER}, {"proxy-header", ARG_STRG, ' ', C_PROXY_HEADER},
{"proxy-http2", ARG_BOOL, ' ', C_PROXY_HTTP2}, {"proxy-http2", ARG_BOOL, ' ', C_PROXY_HTTP2},
{"proxy-insecure", ARG_BOOL, ' ', C_PROXY_INSECURE}, {"proxy-insecure", ARG_BOOL, ' ', C_PROXY_INSECURE},
{"proxy-key", ARG_FILE, ' ', C_PROXY_KEY}, {"proxy-key", ARG_FILE|ARG_TLS, ' ', C_PROXY_KEY},
{"proxy-key-type", ARG_STRG, ' ', C_PROXY_KEY_TYPE}, {"proxy-key-type", ARG_STRG|ARG_TLS, ' ', C_PROXY_KEY_TYPE},
{"proxy-negotiate", ARG_BOOL, ' ', C_PROXY_NEGOTIATE}, {"proxy-negotiate", ARG_BOOL, ' ', C_PROXY_NEGOTIATE},
{"proxy-ntlm", ARG_BOOL, ' ', C_PROXY_NTLM}, {"proxy-ntlm", ARG_BOOL, ' ', C_PROXY_NTLM},
{"proxy-pass", ARG_STRG, ' ', C_PROXY_PASS}, {"proxy-pass", ARG_STRG, ' ', C_PROXY_PASS},
{"proxy-pinnedpubkey", ARG_STRG, ' ', C_PROXY_PINNEDPUBKEY}, {"proxy-pinnedpubkey", ARG_STRG|ARG_TLS, ' ', C_PROXY_PINNEDPUBKEY},
{"proxy-service-name", ARG_STRG, ' ', C_PROXY_SERVICE_NAME}, {"proxy-service-name", ARG_STRG, ' ', C_PROXY_SERVICE_NAME},
{"proxy-ssl-allow-beast", ARG_BOOL, ' ', C_PROXY_SSL_ALLOW_BEAST}, {"proxy-ssl-allow-beast", ARG_BOOL|ARG_TLS, ' ',
{"proxy-ssl-auto-client-cert", ARG_BOOL, ' ', C_PROXY_SSL_AUTO_CLIENT_CERT}, C_PROXY_SSL_ALLOW_BEAST},
{"proxy-tls13-ciphers", ARG_STRG, ' ', C_PROXY_TLS13_CIPHERS}, {"proxy-ssl-auto-client-cert", ARG_BOOL|ARG_TLS, ' ',
{"proxy-tlsauthtype", ARG_STRG, ' ', C_PROXY_TLSAUTHTYPE}, C_PROXY_SSL_AUTO_CLIENT_CERT},
{"proxy-tlspassword", ARG_STRG, ' ', C_PROXY_TLSPASSWORD}, {"proxy-tls13-ciphers", ARG_STRG|ARG_TLS, ' ', C_PROXY_TLS13_CIPHERS},
{"proxy-tlsuser", ARG_STRG, ' ', C_PROXY_TLSUSER}, {"proxy-tlsauthtype", ARG_STRG|ARG_TLS, ' ', C_PROXY_TLSAUTHTYPE},
{"proxy-tlsv1", ARG_NONE, ' ', C_PROXY_TLSV1}, {"proxy-tlspassword", ARG_STRG|ARG_TLS, ' ', C_PROXY_TLSPASSWORD},
{"proxy-tlsuser", ARG_STRG|ARG_TLS, ' ', C_PROXY_TLSUSER},
{"proxy-tlsv1", ARG_NONE|ARG_TLS, ' ', C_PROXY_TLSV1},
{"proxy-user", ARG_STRG, 'U', C_PROXY_USER}, {"proxy-user", ARG_STRG, 'U', C_PROXY_USER},
{"proxy1.0", ARG_STRG, ' ', C_PROXY1_0}, {"proxy1.0", ARG_STRG, ' ', C_PROXY1_0},
{"proxytunnel", ARG_BOOL, 'p', C_PROXYTUNNEL}, {"proxytunnel", ARG_BOOL, 'p', C_PROXYTUNNEL},
@ -294,15 +296,17 @@ static const struct LongShort aliases[]= {
{"socks5-hostname", ARG_STRG, ' ', C_SOCKS5_HOSTNAME}, {"socks5-hostname", ARG_STRG, ' ', C_SOCKS5_HOSTNAME},
{"speed-limit", ARG_STRG, 'Y', C_SPEED_LIMIT}, {"speed-limit", ARG_STRG, 'Y', C_SPEED_LIMIT},
{"speed-time", ARG_STRG, 'y', C_SPEED_TIME}, {"speed-time", ARG_STRG, 'y', C_SPEED_TIME},
{"ssl", ARG_BOOL, ' ', C_SSL}, {"ssl", ARG_BOOL|ARG_TLS, ' ', C_SSL},
{"ssl-allow-beast", ARG_BOOL, ' ', C_SSL_ALLOW_BEAST}, {"ssl-allow-beast", ARG_BOOL|ARG_TLS, ' ', C_SSL_ALLOW_BEAST},
{"ssl-auto-client-cert", ARG_BOOL, ' ', C_SSL_AUTO_CLIENT_CERT}, {"ssl-auto-client-cert", ARG_BOOL|ARG_TLS, ' ',
{"ssl-no-revoke", ARG_BOOL, ' ', C_SSL_NO_REVOKE}, C_SSL_AUTO_CLIENT_CERT},
{"ssl-reqd", ARG_BOOL, ' ', C_SSL_REQD}, {"ssl-no-revoke", ARG_BOOL|ARG_TLS, ' ', C_SSL_NO_REVOKE},
{"ssl-revoke-best-effort", ARG_BOOL, ' ', C_SSL_REVOKE_BEST_EFFORT}, {"ssl-reqd", ARG_BOOL|ARG_TLS, ' ', C_SSL_REQD},
{"ssl-sessions", ARG_FILE, ' ', C_SSL_SESSIONS}, {"ssl-revoke-best-effort", ARG_BOOL|ARG_TLS, ' ',
{"sslv2", ARG_NONE, '2', C_SSLV2}, C_SSL_REVOKE_BEST_EFFORT},
{"sslv3", ARG_NONE, '3', C_SSLV3}, {"ssl-sessions", ARG_FILE|ARG_TLS, ' ', C_SSL_SESSIONS},
{"sslv2", ARG_NONE|ARG_TLS, '2', C_SSLV2},
{"sslv3", ARG_NONE|ARG_TLS, '3', C_SSLV3},
{"stderr", ARG_FILE, ' ', C_STDERR}, {"stderr", ARG_FILE, ' ', C_STDERR},
{"styled-output", ARG_BOOL, ' ', C_STYLED_OUTPUT}, {"styled-output", ARG_BOOL, ' ', C_STYLED_OUTPUT},
{"suppress-connect-headers", ARG_BOOL, ' ', C_SUPPRESS_CONNECT_HEADERS}, {"suppress-connect-headers", ARG_BOOL, ' ', C_SUPPRESS_CONNECT_HEADERS},
@ -316,17 +320,17 @@ static const struct LongShort aliases[]= {
{"tftp-blksize", ARG_STRG, ' ', C_TFTP_BLKSIZE}, {"tftp-blksize", ARG_STRG, ' ', C_TFTP_BLKSIZE},
{"tftp-no-options", ARG_BOOL, ' ', C_TFTP_NO_OPTIONS}, {"tftp-no-options", ARG_BOOL, ' ', C_TFTP_NO_OPTIONS},
{"time-cond", ARG_STRG, 'z', C_TIME_COND}, {"time-cond", ARG_STRG, 'z', C_TIME_COND},
{"tls-earlydata", ARG_BOOL, ' ', C_TLS_EARLYDATA}, {"tls-earlydata", ARG_BOOL|ARG_TLS, ' ', C_TLS_EARLYDATA},
{"tls-max", ARG_STRG, ' ', C_TLS_MAX}, {"tls-max", ARG_STRG|ARG_TLS, ' ', C_TLS_MAX},
{"tls13-ciphers", ARG_STRG, ' ', C_TLS13_CIPHERS}, {"tls13-ciphers", ARG_STRG|ARG_TLS, ' ', C_TLS13_CIPHERS},
{"tlsauthtype", ARG_STRG, ' ', C_TLSAUTHTYPE}, {"tlsauthtype", ARG_STRG|ARG_TLS, ' ', C_TLSAUTHTYPE},
{"tlspassword", ARG_STRG, ' ', C_TLSPASSWORD}, {"tlspassword", ARG_STRG|ARG_TLS, ' ', C_TLSPASSWORD},
{"tlsuser", ARG_STRG, ' ', C_TLSUSER}, {"tlsuser", ARG_STRG|ARG_TLS, ' ', C_TLSUSER},
{"tlsv1", ARG_NONE, '1', C_TLSV1}, {"tlsv1", ARG_NONE|ARG_TLS, '1', C_TLSV1},
{"tlsv1.0", ARG_NONE, ' ', C_TLSV1_0}, {"tlsv1.0", ARG_NONE|ARG_TLS, ' ', C_TLSV1_0},
{"tlsv1.1", ARG_NONE, ' ', C_TLSV1_1}, {"tlsv1.1", ARG_NONE|ARG_TLS, ' ', C_TLSV1_1},
{"tlsv1.2", ARG_NONE, ' ', C_TLSV1_2}, {"tlsv1.2", ARG_NONE|ARG_TLS, ' ', C_TLSV1_2},
{"tlsv1.3", ARG_NONE, ' ', C_TLSV1_3}, {"tlsv1.3", ARG_NONE|ARG_TLS, ' ', C_TLSV1_3},
{"tr-encoding", ARG_BOOL, ' ', C_TR_ENCODING}, {"tr-encoding", ARG_BOOL, ' ', C_TR_ENCODING},
{"trace", ARG_FILE, ' ', C_TRACE}, {"trace", ARG_FILE, ' ', C_TRACE},
{"trace-ascii", ARG_FILE, ' ', C_TRACE_ASCII}, {"trace-ascii", ARG_FILE, ' ', C_TRACE_ASCII},
@ -1693,6 +1697,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
err = PARAM_NO_PREFIX; err = PARAM_NO_PREFIX;
break; break;
} }
else if((a->desc & ARG_TLS) && !feature_ssl) {
err = PARAM_LIBCURL_DOESNT_SUPPORT;
break;
}
if(!nextarg) if(!nextarg)
/* this is a precaution mostly to please scan-build, as all arguments /* this is a precaution mostly to please scan-build, as all arguments
@ -1918,15 +1926,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break; break;
case C_FTP_SSL: /* --ftp-ssl */ case C_FTP_SSL: /* --ftp-ssl */
case C_SSL: /* --ssl */ case C_SSL: /* --ssl */
if(toggle && !feature_ssl) config->ftp_ssl = toggle;
err = PARAM_LIBCURL_DOESNT_SUPPORT; if(config->ftp_ssl)
else { warnf(global,
config->ftp_ssl = toggle; "--%s is an insecure option, consider --ssl-reqd instead",
if(config->ftp_ssl) a->lname);
warnf(global,
"--%s is an insecure option, consider --ssl-reqd instead",
a->lname);
}
break; break;
case C_FTP_PASV: /* --ftp-pasv */ case C_FTP_PASV: /* --ftp-pasv */
Curl_safefree(config->ftpport); Curl_safefree(config->ftpport);
@ -2026,20 +2030,13 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break; break;
case C_FTP_SSL_REQD: /* --ftp-ssl-reqd */ case C_FTP_SSL_REQD: /* --ftp-ssl-reqd */
case C_SSL_REQD: /* --ssl-reqd */ case C_SSL_REQD: /* --ssl-reqd */
if(toggle && !feature_ssl) {
err = PARAM_LIBCURL_DOESNT_SUPPORT;
break;
}
config->ftp_ssl_reqd = toggle; config->ftp_ssl_reqd = toggle;
break; break;
case C_SESSIONID: /* --sessionid */ case C_SESSIONID: /* --sessionid */
config->disable_sessionid = !toggle; config->disable_sessionid = !toggle;
break; break;
case C_FTP_SSL_CONTROL: /* --ftp-ssl-control */ case C_FTP_SSL_CONTROL: /* --ftp-ssl-control */
if(toggle && !feature_ssl) config->ftp_ssl_control = toggle;
err = PARAM_LIBCURL_DOESNT_SUPPORT;
else
config->ftp_ssl_control = toggle;
break; break;
case C_FTP_SSL_CCC: /* --ftp-ssl-ccc */ case C_FTP_SSL_CCC: /* --ftp-ssl-ccc */
config->ftp_ssl_ccc = toggle; config->ftp_ssl_ccc = toggle;
@ -2174,8 +2171,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK); err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK);
break; break;
case C_TLS_EARLYDATA: /* --tls-earlydata */ case C_TLS_EARLYDATA: /* --tls-earlydata */
if(feature_ssl) config->ssl_allow_earlydata = toggle;
config->ssl_allow_earlydata = toggle;
break; break;
case C_TLS_MAX: /* --tls-max */ case C_TLS_MAX: /* --tls-max */
err = str2tls_max(&config->ssl_version_max, nextarg); err = str2tls_max(&config->ssl_version_max, nextarg);
@ -2438,16 +2434,13 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
} }
break; break;
case C_SSL_ALLOW_BEAST: /* --ssl-allow-beast */ case C_SSL_ALLOW_BEAST: /* --ssl-allow-beast */
if(feature_ssl) config->ssl_allow_beast = toggle;
config->ssl_allow_beast = toggle;
break; break;
case C_SSL_AUTO_CLIENT_CERT: /* --ssl-auto-client-cert */ case C_SSL_AUTO_CLIENT_CERT: /* --ssl-auto-client-cert */
if(feature_ssl) config->ssl_auto_client_cert = toggle;
config->ssl_auto_client_cert = toggle;
break; break;
case C_PROXY_SSL_AUTO_CLIENT_CERT: /* --proxy-ssl-auto-client-cert */ case C_PROXY_SSL_AUTO_CLIENT_CERT: /* --proxy-ssl-auto-client-cert */
if(feature_ssl) config->proxy_ssl_auto_client_cert = toggle;
config->proxy_ssl_auto_client_cert = toggle;
break; break;
case C_PINNEDPUBKEY: /* --pinnedpubkey */ case C_PINNEDPUBKEY: /* --pinnedpubkey */
err = getstr(&config->pinnedpubkey, nextarg, DENY_BLANK); err = getstr(&config->pinnedpubkey, nextarg, DENY_BLANK);
@ -2465,12 +2458,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
config->falsestart = TRUE; config->falsestart = TRUE;
break; break;
case C_SSL_NO_REVOKE: /* --ssl-no-revoke */ case C_SSL_NO_REVOKE: /* --ssl-no-revoke */
if(feature_ssl) config->ssl_no_revoke = TRUE;
config->ssl_no_revoke = TRUE;
break; break;
case C_SSL_REVOKE_BEST_EFFORT: /* --ssl-revoke-best-effort */ case C_SSL_REVOKE_BEST_EFFORT: /* --ssl-revoke-best-effort */
if(feature_ssl) config->ssl_revoke_best_effort = TRUE;
config->ssl_revoke_best_effort = TRUE;
break; break;
case C_SSL_SESSIONS: /* --ssl-sessions */ case C_SSL_SESSIONS: /* --ssl-sessions */
if(feature_ssls_export) if(feature_ssls_export)
@ -2529,8 +2520,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
err = getstr(&config->proxy_crlfile, nextarg, DENY_BLANK); err = getstr(&config->proxy_crlfile, nextarg, DENY_BLANK);
break; break;
case C_PROXY_SSL_ALLOW_BEAST: /* --proxy-ssl-allow-beast */ case C_PROXY_SSL_ALLOW_BEAST: /* --proxy-ssl-allow-beast */
if(feature_ssl) config->proxy_ssl_allow_beast = toggle;
config->proxy_ssl_allow_beast = toggle;
break; break;
case C_LOGIN_OPTIONS: /* --login-options */ case C_LOGIN_OPTIONS: /* --login-options */
err = getstr(&config->login_options, nextarg, ALLOW_BLANK); err = getstr(&config->login_options, nextarg, ALLOW_BLANK);

View file

@ -315,6 +315,7 @@ typedef enum {
#define ARG_TYPEMASK 0x03 #define ARG_TYPEMASK 0x03
#define ARGTYPE(x) ((x) & ARG_TYPEMASK) #define ARGTYPE(x) ((x) & ARG_TYPEMASK)
#define ARG_TLS 0x40 /* requires TLS support */
#define ARG_NO 0x80 /* set if the option is documented as --no-* */ #define ARG_NO 0x80 /* set if the option is documented as --no-* */
struct LongShort { struct LongShort {

View file

@ -126,7 +126,6 @@ extern const unsigned char curl_ca_embed[];
static CURLcode single_transfer(struct GlobalConfig *global, static CURLcode single_transfer(struct GlobalConfig *global,
struct OperationConfig *config, struct OperationConfig *config,
CURLSH *share, CURLSH *share,
bool capath_from_env,
bool *added, bool *added,
bool *skipped); bool *skipped);
static CURLcode create_transfer(struct GlobalConfig *global, static CURLcode create_transfer(struct GlobalConfig *global,
@ -875,7 +874,6 @@ static CURLcode set_cert_types(struct OperationConfig *config)
static CURLcode config2setopts(struct GlobalConfig *global, static CURLcode config2setopts(struct GlobalConfig *global,
struct OperationConfig *config, struct OperationConfig *config,
struct per_transfer *per, struct per_transfer *per,
bool capath_from_env,
CURL *curl, CURL *curl,
CURLSH *share) CURLSH *share)
{ {
@ -1188,13 +1186,7 @@ static CURLcode config2setopts(struct GlobalConfig *global,
if(config->capath) { if(config->capath) {
result = res_setopt_str(curl, CURLOPT_CAPATH, config->capath); result = res_setopt_str(curl, CURLOPT_CAPATH, config->capath);
if(result == CURLE_NOT_BUILT_IN) { if(result)
warnf(global, "ignoring %s, not supported by libcurl with %s",
capath_from_env ?
"SSL_CERT_DIR environment variable" : "--capath",
ssl_backend());
}
else if(result)
return result; return result;
} }
/* For the time being if --proxy-capath is not set then we use the /* For the time being if --proxy-capath is not set then we use the
@ -1798,7 +1790,6 @@ static CURLcode append2query(struct GlobalConfig *global,
static CURLcode single_transfer(struct GlobalConfig *global, static CURLcode single_transfer(struct GlobalConfig *global,
struct OperationConfig *config, struct OperationConfig *config,
CURLSH *share, CURLSH *share,
bool capath_from_env,
bool *added, bool *added,
bool *skipped) bool *skipped)
{ {
@ -2319,8 +2310,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
hdrcbdata->global = global; hdrcbdata->global = global;
hdrcbdata->config = config; hdrcbdata->config = config;
result = config2setopts(global, config, per, capath_from_env, result = config2setopts(global, config, per, curl, share);
curl, share);
if(result) if(result)
break; break;
@ -3042,7 +3032,6 @@ static CURLcode transfer_per_config(struct GlobalConfig *global,
bool *skipped) bool *skipped)
{ {
CURLcode result = CURLE_OK; CURLcode result = CURLE_OK;
bool capath_from_env;
*added = FALSE; *added = FALSE;
/* Check we have a url */ /* Check we have a url */
@ -3060,7 +3049,6 @@ static CURLcode transfer_per_config(struct GlobalConfig *global,
* We support the environment variable thing for non-Windows platforms * We support the environment variable thing for non-Windows platforms
* too. Just for the sake of it. * too. Just for the sake of it.
*/ */
capath_from_env = false;
if(feature_ssl && if(feature_ssl &&
!config->cacert && !config->cacert &&
!config->capath && !config->capath &&
@ -3078,8 +3066,7 @@ static CURLcode transfer_per_config(struct GlobalConfig *global,
} }
if(!result) if(!result)
result = single_transfer(global, config, share, capath_from_env, added, result = single_transfer(global, config, share, added, skipped);
skipped);
return result; return result;
} }

View file

@ -202,8 +202,8 @@ while(<$r>) {
$list=1; $list=1;
} }
elsif($list) { elsif($list) {
if( /^ \{(\"[^,]*\").*\'(.)\', (.*)\}/) { if( /^ \{(\"[^,]*\").*\'(.)\',/) {
my ($l, $s, $rd)=($1, $2, $3); my ($l, $s)=($1, $2);
my $sh; my $sh;
my $lo; my $lo;
my $title; my $title;