mirror of
https://github.com/curl/curl.git
synced 2026-08-25 00:13:34 +03:00
hsts: add support for Strict-Transport-Security
- enable in the build (configure) - header parsing - host name lookup - unit tests for the above - CI build - CURL_VERSION_HSTS bit - curl_version_info support - curl -V output - curl-config --features - CURLOPT_HSTS_CTRL - man page for CURLOPT_HSTS_CTRL - curl --hsts (sets CURLOPT_HSTS_CTRL and works with --libcurl) - man page for --hsts - save cache to disk - load cache from disk - CURLOPT_HSTS - man page for CURLOPT_HSTS - added docs/HSTS.md - fixed --version docs - adjusted curl_easy_duphandle Closes #5896
This commit is contained in:
parent
9f43b28f78
commit
7385610d0c
38 changed files with 1122 additions and 21 deletions
|
|
@ -54,6 +54,7 @@ static void free_config_fields(struct OperationConfig *config)
|
|||
Curl_safefree(config->egd_file);
|
||||
Curl_safefree(config->useragent);
|
||||
Curl_safefree(config->altsvc);
|
||||
Curl_safefree(config->hsts);
|
||||
Curl_safefree(config->cookie);
|
||||
Curl_safefree(config->cookiejar);
|
||||
Curl_safefree(config->cookiefile);
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ struct OperationConfig {
|
|||
char *cookiejar; /* write to this file */
|
||||
char *cookiefile; /* read from this file */
|
||||
char *altsvc; /* alt-svc cache file name */
|
||||
char *hsts; /* HSTS cache file name */
|
||||
bool cookiesession; /* new session? */
|
||||
bool encoding; /* Accept-Encoding please */
|
||||
bool tr_encoding; /* Transfer-Encoding please */
|
||||
|
|
|
|||
|
|
@ -219,6 +219,7 @@ static const struct LongShort aliases[]= {
|
|||
{"A", "user-agent", ARG_STRING},
|
||||
{"b", "cookie", ARG_STRING},
|
||||
{"ba", "alt-svc", ARG_STRING},
|
||||
{"bb", "hsts", ARG_STRING},
|
||||
{"B", "use-ascii", ARG_BOOL},
|
||||
{"c", "cookie-jar", ARG_STRING},
|
||||
{"C", "continue-at", ARG_STRING},
|
||||
|
|
@ -1291,6 +1292,12 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
else
|
||||
return PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
break;
|
||||
case 'b': /* --hsts */
|
||||
if(curlinfo->features & CURL_VERSION_HSTS)
|
||||
GetStr(&config->hsts, nextarg);
|
||||
else
|
||||
return PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
break;
|
||||
default: /* --cookie string coming up: */
|
||||
if(nextarg[0] == '@') {
|
||||
nextarg++;
|
||||
|
|
|
|||
|
|
@ -328,6 +328,9 @@ static const struct helptxt helptext[] = {
|
|||
{" --hostpubmd5 <md5>",
|
||||
"Acceptable MD5 hash of the host public key",
|
||||
CURLHELP_SFTP | CURLHELP_SCP},
|
||||
{" --hsts <file name>",
|
||||
"Enable HSTS with this cache file",
|
||||
CURLHELP_HTTP},
|
||||
{" --http0.9",
|
||||
"Allow HTTP 0.9 responses",
|
||||
CURLHELP_HTTP},
|
||||
|
|
@ -862,6 +865,7 @@ static const struct feat feats[] = {
|
|||
{"MultiSSL", CURL_VERSION_MULTI_SSL},
|
||||
{"PSL", CURL_VERSION_PSL},
|
||||
{"alt-svc", CURL_VERSION_ALTSVC},
|
||||
{"HSTS", CURL_VERSION_HSTS},
|
||||
};
|
||||
|
||||
static void print_category(curlhelp_t category)
|
||||
|
|
|
|||
|
|
@ -2072,6 +2072,9 @@ static CURLcode single_transfer(struct GlobalConfig *global,
|
|||
if(config->altsvc)
|
||||
my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc);
|
||||
|
||||
if(config->hsts)
|
||||
my_setopt_bitmask(curl, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
|
||||
|
||||
#ifdef USE_METALINK
|
||||
if(!metalink && config->use_metalink) {
|
||||
outs->metalink_parser = metalink_parser_context_new();
|
||||
|
|
|
|||
|
|
@ -62,6 +62,11 @@ const struct NameValue setopt_nv_CURL_SOCKS_PROXY[] = {
|
|||
NVEND,
|
||||
};
|
||||
|
||||
const struct NameValueUnsigned setopt_nv_CURLHSTS[] = {
|
||||
NV(CURLHSTS_ENABLE),
|
||||
NVEND,
|
||||
};
|
||||
|
||||
const struct NameValueUnsigned setopt_nv_CURLAUTH[] = {
|
||||
NV(CURLAUTH_ANY), /* combination */
|
||||
NV(CURLAUTH_ANYSAFE), /* combination */
|
||||
|
|
|
|||
|
|
@ -64,8 +64,10 @@ extern const struct NameValueUnsigned setopt_nv_CURLSSLOPT[];
|
|||
extern const struct NameValue setopt_nv_CURL_NETRC[];
|
||||
extern const struct NameValue setopt_nv_CURLPROTO[];
|
||||
extern const struct NameValueUnsigned setopt_nv_CURLAUTH[];
|
||||
extern const struct NameValueUnsigned setopt_nv_CURLHSTS[];
|
||||
|
||||
/* Map options to NameValue sets */
|
||||
#define setopt_nv_CURLOPT_HSTS_CTRL setopt_nv_CURLHSTS
|
||||
#define setopt_nv_CURLOPT_HTTP_VERSION setopt_nv_CURL_HTTP_VERSION
|
||||
#define setopt_nv_CURLOPT_HTTPAUTH setopt_nv_CURLAUTH
|
||||
#define setopt_nv_CURLOPT_SSLVERSION setopt_nv_CURL_SSLVERSION
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue