mirror of
https://github.com/curl/curl.git
synced 2026-07-24 07:57:16 +03:00
hsts: enable by default
No longer considered experimental. Closes #6700
This commit is contained in:
parent
eff614fb02
commit
d71ff2b9db
15 changed files with 69 additions and 44 deletions
|
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
#include "curl_setup.h"
|
||||
|
||||
#if !defined(CURL_DISABLE_COOKIES) || !defined(CURL_DISABLE_ALTSVC) || \
|
||||
defined(USE_HSTS)
|
||||
!defined(CURL_DISABLE_HSTS)
|
||||
|
||||
#include "curl_get_line.h"
|
||||
#include "curl_memory.h"
|
||||
|
|
|
|||
|
|
@ -895,7 +895,7 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
|
|||
(void)Curl_altsvc_load(outcurl->asi, outcurl->set.str[STRING_ALTSVC]);
|
||||
}
|
||||
#endif
|
||||
#ifdef USE_HSTS
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
if(data->hsts) {
|
||||
outcurl->hsts = Curl_hsts_init();
|
||||
if(!outcurl->hsts)
|
||||
|
|
|
|||
19
lib/hsts.c
19
lib/hsts.c
|
|
@ -25,7 +25,7 @@
|
|||
*/
|
||||
#include "curl_setup.h"
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && defined(USE_HSTS)
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_HSTS)
|
||||
#include <curl/curl.h>
|
||||
#include "urldata.h"
|
||||
#include "llist.h"
|
||||
|
|
@ -37,6 +37,7 @@
|
|||
#include "parsedate.h"
|
||||
#include "rand.h"
|
||||
#include "rename.h"
|
||||
#include "strtoofft.h"
|
||||
|
||||
/* The last 3 #include files should be in this order */
|
||||
#include "curl_printf.h"
|
||||
|
|
@ -58,7 +59,10 @@ static time_t debugtime(void *unused)
|
|||
char *timestr = getenv("CURL_TIME");
|
||||
(void)unused;
|
||||
if(timestr) {
|
||||
unsigned long val = strtol(timestr, NULL, 10) + deltatime;
|
||||
curl_off_t val;
|
||||
(void)curlx_strtoofft(timestr, NULL, 10, &val);
|
||||
|
||||
val += (curl_off_t)deltatime;
|
||||
return (time_t)val;
|
||||
}
|
||||
return time(NULL);
|
||||
|
|
@ -274,7 +278,7 @@ static CURLcode hsts_push(struct Curl_easy *data,
|
|||
e.namelen = strlen(sts->host);
|
||||
e.includeSubDomains = sts->includeSubDomains;
|
||||
|
||||
result = Curl_gmtime(sts->expires, &stamp);
|
||||
result = Curl_gmtime((time_t)sts->expires, &stamp);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
|
|
@ -294,7 +298,7 @@ static CURLcode hsts_push(struct Curl_easy *data,
|
|||
static CURLcode hsts_out(struct stsentry *sts, FILE *fp)
|
||||
{
|
||||
struct tm stamp;
|
||||
CURLcode result = Curl_gmtime(sts->expires, &stamp);
|
||||
CURLcode result = Curl_gmtime((time_t)sts->expires, &stamp);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
|
|
@ -439,7 +443,10 @@ static CURLcode hsts_pull(struct Curl_easy *data, struct hsts *h)
|
|||
expires = Curl_getdate_capped(e.expire);
|
||||
else
|
||||
expires = TIME_T_MAX; /* the end of time */
|
||||
result = hsts_create(h, e.name, e.includeSubDomains, expires);
|
||||
result = hsts_create(h, e.name,
|
||||
/* bitfield to bool conversion: */
|
||||
e.includeSubDomains ? TRUE : FALSE,
|
||||
expires);
|
||||
if(result)
|
||||
return result;
|
||||
}
|
||||
|
|
@ -517,4 +524,4 @@ CURLcode Curl_hsts_loadcb(struct Curl_easy *data, struct hsts *h)
|
|||
return hsts_pull(data, h);
|
||||
}
|
||||
|
||||
#endif /* CURL_DISABLE_HTTP || USE_HSTS */
|
||||
#endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 2020 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
***************************************************************************/
|
||||
#include "curl_setup.h"
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && defined(USE_HSTS)
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_HSTS)
|
||||
#include <curl/curl.h>
|
||||
#include "llist.h"
|
||||
|
||||
|
|
@ -35,7 +35,7 @@ struct stsentry {
|
|||
struct Curl_llist_element node;
|
||||
const char *host;
|
||||
bool includeSubDomains;
|
||||
time_t expires; /* the timestamp of this entry's expiry */
|
||||
curl_off_t expires; /* the timestamp of this entry's expiry */
|
||||
};
|
||||
|
||||
/* The HSTS cache. Needs to be able to tailmatch host names. */
|
||||
|
|
@ -61,5 +61,5 @@ CURLcode Curl_hsts_loadcb(struct Curl_easy *data,
|
|||
#define Curl_hsts_cleanup(x)
|
||||
#define Curl_hsts_loadcb(x,y)
|
||||
#define Curl_hsts_save(x,y,z)
|
||||
#endif /* CURL_DISABLE_HTTP || USE_HSTS */
|
||||
#endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */
|
||||
#endif /* HEADER_CURL_HSTS_H */
|
||||
|
|
|
|||
|
|
@ -3618,7 +3618,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef USE_HSTS
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
/* If enabled, the header is incoming and this is over HTTPS */
|
||||
else if(data->hsts && checkprefix("Strict-Transport-Security:", headp) &&
|
||||
(conn->handler->flags & PROTOPT_SSL)) {
|
||||
|
|
|
|||
|
|
@ -2911,7 +2911,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
data->set.trailer_data = va_arg(param, void *);
|
||||
#endif
|
||||
break;
|
||||
#ifdef USE_HSTS
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
case CURLOPT_HSTSREADFUNCTION:
|
||||
data->set.hsts_read = va_arg(param, curl_hstsread_callback);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1944,7 +1944,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
|
|||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
#ifdef USE_HSTS
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
if(data->hsts && strcasecompare("http", data->state.up.scheme)) {
|
||||
if(Curl_hsts(data->hsts, data->state.up.hostname, TRUE)) {
|
||||
char *url;
|
||||
|
|
|
|||
|
|
@ -1664,7 +1664,7 @@ struct UserDefined {
|
|||
curl_conv_callback convtonetwork;
|
||||
/* function to convert from UTF-8 encoding: */
|
||||
curl_conv_callback convfromutf8;
|
||||
#ifdef USE_HSTS
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
curl_hstsread_callback hsts_read;
|
||||
void *hsts_read_userp;
|
||||
curl_hstswrite_callback hsts_write;
|
||||
|
|
@ -1926,7 +1926,7 @@ struct Curl_easy {
|
|||
NOTE that the 'cookie' field in the
|
||||
UserDefined struct defines if the "engine"
|
||||
is to be used or not. */
|
||||
#ifdef USE_HSTS
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
struct hsts *hsts;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_ALTSVC
|
||||
|
|
|
|||
|
|
@ -436,7 +436,7 @@ static curl_version_info_data version_info = {
|
|||
#ifndef CURL_DISABLE_ALTSVC
|
||||
| CURL_VERSION_ALTSVC
|
||||
#endif
|
||||
#if defined(USE_HSTS)
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
| CURL_VERSION_HSTS
|
||||
#endif
|
||||
#if defined(USE_GSASL)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue