diff options
author | Daniel Stenberg <daniel@haxx.se> | 2022-12-27 11:50:23 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2022-12-27 15:22:32 +0100 |
commit | ca02a77f05bd5cef20618c8f741aa48b7be0a648 (patch) | |
tree | e779dc082d1bc45d85ca8ea3046ad2632b554cf9 /lib | |
parent | 0bf8b796a0ea98395b390c7807187982215f5c11 (diff) | |
download | curl-ca02a77f05bd5cef20618c8f741aa48b7be0a648.tar.gz |
hsts: handle adding the same host name again
It will then use the largest expire time of the two entries.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/hsts.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/hsts.c b/lib/hsts.c index 339237be1..8d6723ee5 100644 --- a/lib/hsts.c +++ b/lib/hsts.c @@ -426,14 +426,23 @@ static CURLcode hsts_add(struct hsts *h, char *line) if(2 == rc) { time_t expires = strcmp(date, UNLIMITED) ? Curl_getdate_capped(date) : TIME_T_MAX; - CURLcode result; + CURLcode result = CURLE_OK; char *p = host; bool subdomain = FALSE; + struct stsentry *e; if(p[0] == '.') { p++; subdomain = TRUE; } - result = hsts_create(h, p, subdomain, expires); + /* only add it if not already present */ + e = Curl_hsts(h, p, subdomain); + if(!e) + result = hsts_create(h, p, subdomain, expires); + else { + /* the same host name, use the largest expire time */ + if(expires > e->expires) + e->expires = expires; + } if(result) return result; } |