tool: use feature names instead of bit mask, when possible

If the run-time libcurl is too old to support feature names, the name
array is created locally from the bit masks. This is the only sequence
left that uses feature bit masks.

Closes #9583
This commit is contained in:
Patrick Monnerat 2022-11-09 00:37:49 +01:00 committed by Daniel Stenberg
parent e1e482517f
commit 184fc6f07a
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
6 changed files with 160 additions and 129 deletions

View file

@ -920,9 +920,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'j': /* --compressed */
if(toggle &&
!(curlinfo->features & (CURL_VERSION_LIBZ |
CURL_VERSION_BROTLI | CURL_VERSION_ZSTD)))
if(toggle && !(feature_libz || feature_brotli || feature_zstd))
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->encoding = toggle;
break;
@ -939,36 +937,30 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'l': /* --negotiate */
if(toggle) {
if(curlinfo->features & CURL_VERSION_SPNEGO)
config->authtype |= CURLAUTH_NEGOTIATE;
else
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
else
if(!toggle)
config->authtype &= ~CURLAUTH_NEGOTIATE;
else if(feature_spnego)
config->authtype |= CURLAUTH_NEGOTIATE;
else
return PARAM_LIBCURL_DOESNT_SUPPORT;
break;
case 'm': /* --ntlm */
if(toggle) {
if(curlinfo->features & CURL_VERSION_NTLM)
config->authtype |= CURLAUTH_NTLM;
else
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
else
if(!toggle)
config->authtype &= ~CURLAUTH_NTLM;
else if(feature_ntlm)
config->authtype |= CURLAUTH_NTLM;
else
return PARAM_LIBCURL_DOESNT_SUPPORT;
break;
case 'M': /* --ntlm-wb */
if(toggle) {
if(curlinfo->features & CURL_VERSION_NTLM_WB)
config->authtype |= CURLAUTH_NTLM_WB;
else
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
else
if(!toggle)
config->authtype &= ~CURLAUTH_NTLM_WB;
else if(feature_ntlm_wb)
config->authtype |= CURLAUTH_NTLM_WB;
else
return PARAM_LIBCURL_DOESNT_SUPPORT;
break;
case 'n': /* --basic for completeness */
@ -1014,10 +1006,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 't': /* --proxy-ntlm */
if(curlinfo->features & CURL_VERSION_NTLM)
config->proxyntlm = toggle;
else
if(!feature_ntlm)
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->proxyntlm = toggle;
break;
case 'u': /* --crlf */
@ -1051,10 +1042,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'x': /* --krb */
/* kerberos level string */
if(curlinfo->features & CURL_VERSION_SPNEGO)
GetStr(&config->krblevel, nextarg);
else
if(!feature_spnego)
return PARAM_LIBCURL_DOESNT_SUPPORT;
GetStr(&config->krblevel, nextarg);
break;
case 'X': /* --haproxy-protocol */
config->haproxy_protocol = toggle;
@ -1114,7 +1104,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case '$': /* more options without a short option */
switch(subletter) {
case 'a': /* --ssl */
if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
if(toggle && !feature_ssl)
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->ftp_ssl = toggle;
if(config->ftp_ssl)
@ -1174,10 +1164,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'k': /* --proxy-negotiate */
if(curlinfo->features & CURL_VERSION_SPNEGO)
config->proxynegotiate = toggle;
else
if(!feature_spnego)
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->proxynegotiate = toggle;
break;
case 'l': /* --form-escape */
@ -1238,7 +1227,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
GetStr(&config->ftp_alternative_to_user, nextarg);
break;
case 'v': /* --ssl-reqd */
if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
if(toggle && !feature_ssl)
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->ftp_ssl_reqd = toggle;
break;
@ -1246,7 +1235,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
config->disable_sessionid = (!toggle)?TRUE:FALSE;
break;
case 'x': /* --ftp-ssl-control */
if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
if(toggle && !feature_ssl)
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->ftp_ssl_control = toggle;
break;
@ -1443,10 +1432,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '4': /* --http3 */
/* HTTP version 3 go over QUIC - at once */
if(curlinfo->features & CURL_VERSION_HTTP3)
config->httpversion = CURL_HTTP_VERSION_3;
else
if(!feature_http3)
return PARAM_LIBCURL_DOESNT_SUPPORT;
config->httpversion = CURL_HTTP_VERSION_3;
break;
case '9':
/* Allow HTTP/0.9 responses! */
@ -1511,16 +1499,14 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'b':
switch(subletter) {
case 'a': /* --alt-svc */
if(curlinfo->features & CURL_VERSION_ALTSVC)
GetStr(&config->altsvc, nextarg);
else
if(!feature_altsvc)
return PARAM_LIBCURL_DOESNT_SUPPORT;
GetStr(&config->altsvc, nextarg);
break;
case 'b': /* --hsts */
if(curlinfo->features & CURL_VERSION_HSTS)
GetStr(&config->hsts, nextarg);
else
if(!feature_hsts)
return PARAM_LIBCURL_DOESNT_SUPPORT;
GetStr(&config->hsts, nextarg);
break;
default: /* --cookie string coming up: */
if(nextarg[0] == '@') {
@ -1762,7 +1748,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
GetStr(&config->crlfile, nextarg);
break;
case 'k': /* TLS username */
if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
if(!feature_tls_srp) {
cleanarg(clearthis);
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
@ -1770,7 +1756,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
cleanarg(clearthis);
break;
case 'l': /* TLS password */
if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
if(!feature_tls_srp) {
cleanarg(clearthis);
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
@ -1778,26 +1764,24 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
cleanarg(clearthis);
break;
case 'm': /* TLS authentication type */
if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
GetStr(&config->tls_authtype, nextarg);
if(!curl_strequal(config->tls_authtype, "SRP"))
return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
}
else
if(!feature_tls_srp)
return PARAM_LIBCURL_DOESNT_SUPPORT;
GetStr(&config->tls_authtype, nextarg);
if(!curl_strequal(config->tls_authtype, "SRP"))
return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
break;
case 'n': /* no empty SSL fragments, --ssl-allow-beast */
if(curlinfo->features & CURL_VERSION_SSL)
if(feature_ssl)
config->ssl_allow_beast = toggle;
break;
case 'o': /* --ssl-auto-client-cert */
if(curlinfo->features & CURL_VERSION_SSL)
if(feature_ssl)
config->ssl_auto_client_cert = toggle;
break;
case 'O': /* --proxy-ssl-auto-client-cert */
if(curlinfo->features & CURL_VERSION_SSL)
if(feature_ssl)
config->proxy_ssl_auto_client_cert = toggle;
break;
@ -1822,12 +1806,12 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 's': /* --ssl-no-revoke */
if(curlinfo->features & CURL_VERSION_SSL)
if(feature_ssl)
config->ssl_no_revoke = TRUE;
break;
case 'S': /* --ssl-revoke-best-effort */
if(curlinfo->features & CURL_VERSION_SSL)
if(feature_ssl)
config->ssl_revoke_best_effort = TRUE;
break;
@ -1837,28 +1821,24 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'u': /* TLS username for proxy */
cleanarg(clearthis);
if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
if(!feature_tls_srp)
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
GetStr(&config->proxy_tls_username, nextarg);
break;
case 'v': /* TLS password for proxy */
cleanarg(clearthis);
if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
if(!feature_tls_srp)
return PARAM_LIBCURL_DOESNT_SUPPORT;
}
GetStr(&config->proxy_tls_password, nextarg);
break;
case 'w': /* TLS authentication type for proxy */
if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
GetStr(&config->proxy_tls_authtype, nextarg);
if(!curl_strequal(config->proxy_tls_authtype, "SRP"))
return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
}
else
if(!feature_tls_srp)
return PARAM_LIBCURL_DOESNT_SUPPORT;
GetStr(&config->proxy_tls_authtype, nextarg);
if(!curl_strequal(config->proxy_tls_authtype, "SRP"))
return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
break;
case 'x': /* certificate file for proxy */
@ -1893,7 +1873,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '4': /* no empty SSL fragments for proxy */
if(curlinfo->features & CURL_VERSION_SSL)
if(feature_ssl)
config->proxy_ssl_allow_beast = toggle;
break;