gchar * find_domain(const gchar *s, int toplevel) { SoupURI *uri; gchar *ret, *p; if (s == NULL) return (NULL); uri = soup_uri_new(s); if (uri == NULL || !SOUP_URI_VALID_FOR_HTTP(uri)) { return (NULL); } if (toplevel && !isdigit(uri->host[strlen(uri->host) - 1])) { p = tld_get_suffix(uri->host); } else p = uri->host; ret = g_strdup_printf(".%s", p); soup_uri_free(uri); return (ret); }
gchar * find_domain(const gchar *s, int flags) { SoupURI *uri; gchar *ret, *p; if (s == NULL) return (NULL); uri = soup_uri_new(s); if (uri == NULL) return (NULL); if (!SOUP_URI_VALID_FOR_HTTP(uri)) { soup_uri_free(uri); return (NULL); } if (flags & XT_WL_TOPLEVEL && !isdigit((unsigned char)uri->host[strlen(uri->host) - 1])) p = tld_get_suffix(uri->host); else p = uri->host; if (flags & XT_WL_TOPLEVEL) ret = g_strdup_printf(".%s", p); else /* assume FQDN */ ret = g_strdup(p); soup_uri_free(uri); return (ret); }
void soup_cookie_jar_add_cookie(SoupCookieJar *jar, SoupCookie *cookie) { struct wl_entry *w = NULL; SoupCookie *c; FILE *r_cookie_f; char *public_suffix; DNPRINTF(XT_D_COOKIE, "soup_cookie_jar_add_cookie: %p %p %p\n", jar, p_cookiejar, s_cookiejar); if (cookies_enabled == 0) return; /* see if we are up and running */ if (p_cookiejar == NULL) { _soup_cookie_jar_add_cookie(jar, cookie); return; } /* disallow p_cookiejar adds, shouldn't happen */ if (jar == p_cookiejar) return; /* sanity */ if (jar == NULL || cookie == NULL) return; /* check if domain is valid */ public_suffix = tld_get_suffix(cookie->domain[0] == '.' ? cookie->domain + 1 : cookie->domain); if (public_suffix == NULL || (enable_cookie_whitelist && (w = wl_find(cookie->domain, &c_wl)) == NULL)) { blocked_cookies++; DNPRINTF(XT_D_COOKIE, "soup_cookie_jar_add_cookie: reject %s\n", cookie->domain); if (save_rejected_cookies) { if ((r_cookie_f = fopen(rc_fname, "a+")) == NULL) { show_oops(NULL, "can't open reject cookie file"); return; } fseek(r_cookie_f, 0, SEEK_END); fprintf(r_cookie_f, "%s%s\t%s\t%s\t%s\t%lu\t%s\t%s\n", cookie->http_only ? "#HttpOnly_" : "", cookie->domain, *cookie->domain == '.' ? "TRUE" : "FALSE", cookie->path, cookie->secure ? "TRUE" : "FALSE", cookie->expires ? (gulong)soup_date_to_time_t(cookie->expires) : 0, cookie->name, cookie->value); fflush(r_cookie_f); fclose(r_cookie_f); } if (!allow_volatile_cookies) return; } if (cookie->expires == NULL && session_timeout) { soup_cookie_set_expires(cookie, soup_date_new_from_now(session_timeout)); print_cookie("modified add cookie", cookie); } /* see if we are white listed for persistence */ if ((w && w->handy) || (enable_cookie_whitelist == 0)) { /* add to persistent jar */ c = soup_cookie_copy(cookie); print_cookie("soup_cookie_jar_add_cookie p_cookiejar", c); _soup_cookie_jar_add_cookie(p_cookiejar, c); } /* add to session jar */ print_cookie("soup_cookie_jar_add_cookie s_cookiejar", cookie); _soup_cookie_jar_add_cookie(s_cookiejar, cookie); }