X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fcookies.c;h=a46aeeef293a4e03026da21d1c2d09b2d6d2050d;hp=6ba7b5a5a4ed9b482f3866124b9705e16310472e;hb=4d77b190fda05fb796185654203dc17bab8a5c2e;hpb=5bb2f4316571673291565f5ccd559f9abc8bc931 diff --git a/src/cookies.c b/src/cookies.c index 6ba7b5a5..a46aeeef 100644 --- a/src/cookies.c +++ b/src/cookies.c @@ -51,6 +51,9 @@ as that of the covered work. */ #include #include #include +#ifdef HAVE_LIBPSL +# include +#endif #include "utils.h" #include "hash.h" #include "cookies.h" @@ -95,7 +98,7 @@ struct cookie { int port; /* port number */ char *path; /* path prefix of the cookie */ - unsigned discard_requested :1; /* whether cookie was created to + unsigned discard_requested :1;/* whether cookie was created to request discarding another cookie. */ @@ -393,7 +396,7 @@ parse_set_cookie (const char *set_cookie, bool silent) /* Check if expiration spec is valid. If not, assume default (cookie doesn't expire, but valid only for - this session.) */ + this session.) */ expires = http_atotm (value_copy); if (expires != (time_t) -1) { @@ -460,9 +463,9 @@ parse_set_cookie (const char *set_cookie, bool silent) #define REQUIRE_DIGITS(p) do { \ - if (!c_isdigit (*p)) \ + if (!c_isdigit (*p)) \ return false; \ - for (++p; c_isdigit (*p); p++) \ + for (++p; c_isdigit (*p); p++) \ ; \ } while (0) @@ -503,14 +506,27 @@ numeric_address_p (const char *addr) static bool check_domain_match (const char *cookie_domain, const char *host) { + +#ifdef HAVE_LIBPSL DEBUGP (("cdm: 1")); + const psl_ctx_t *psl; + int is_acceptable; + + if (!(psl = psl_builtin())) + { + DEBUGP (("\nlibpsl not built with a public suffix list. " + "Falling back to simple heuristics.\n")); + goto no_psl; + } + + is_acceptable = psl_is_cookie_domain_acceptable (psl, host, cookie_domain); + return true ? (is_acceptable == 1) : false; - /* Numeric address requires exact match. It also requires HOST to - be an IP address. */ - if (numeric_address_p (cookie_domain)) - return 0 == strcmp (cookie_domain, host); +no_psl: +#endif - DEBUGP ((" 2")); + /* For efficiency make some elementary checks first */ + DEBUGP (("cdm: 2")); /* For the sake of efficiency, check for exact match first. */ if (0 == strcasecmp (cookie_domain, host))