X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=parsers.c;h=ff58e7df4c469bb6aa2ed6e8728bae7f515590de;hp=ae6c1f4605923372498db64ff7b5a90429dd724d;hb=990fa0b0a3c506d266fab5d2016b43bbafaad547;hpb=052f10b0e62f0a239c2284b7d0fe4cad6e47ff8a diff --git a/parsers.c b/parsers.c index ae6c1f46..ff58e7df 100644 --- a/parsers.c +++ b/parsers.c @@ -1,4 +1,4 @@ -const char parsers_rcs[] = "$Id: parsers.c,v 1.1.1.1 2001/05/15 13:59:01 oes Exp $"; +const char parsers_rcs[] = "$Id: parsers.c,v 1.5 2001/05/26 00:28:36 jongfoster Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/parsers.c,v $ @@ -41,6 +41,73 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.1.1.1 2001/05/15 13:59:01 oes Exp * * Revisions : * $Log: parsers.c,v $ + * Revision 1.5 2001/05/26 00:28:36 jongfoster + * Automatic reloading of config file. + * Removed obsolete SIGHUP support (Unix) and Reload menu option (Win32). + * Most of the global variables have been moved to a new + * struct configuration_spec, accessed through csp->config->globalname + * Most of the globals remaining are used by the Win32 GUI. + * + * Revision 1.4 2001/05/22 18:46:04 oes + * + * - Enabled filtering banners by size rather than URL + * by adding patterns that replace all standard banner + * sizes with the "Junkbuster" gif to the re_filterfile + * + * - Enabled filtering WebBugs by providing a pattern + * which kills all 1x1 images + * + * - Added support for PCRE_UNGREEDY behaviour to pcrs, + * which is selected by the (nonstandard and therefore + * capital) letter 'U' in the option string. + * It causes the quantifiers to be ungreedy by default. + * Appending a ? turns back to greedy (!). + * + * - Added a new interceptor ijb-send-banner, which + * sends back the "Junkbuster" gif. Without imagelist or + * MSIE detection support, or if tinygif = 1, or the + * URL isn't recognized as an imageurl, a lame HTML + * explanation is sent instead. + * + * - Added new feature, which permits blocking remote + * script redirects and firing back a local redirect + * to the browser. + * The feature is conditionally compiled, i.e. it + * can be disabled with --disable-fast-redirects, + * plus it must be activated by a "fast-redirects" + * line in the config file, has its own log level + * and of course wants to be displayed by show-proxy-args + * Note: Boy, all the #ifdefs in 1001 locations and + * all the fumbling with configure.in and acconfig.h + * were *way* more work than the feature itself :-( + * + * - Because a generic redirect template was needed for + * this, tinygif = 3 now uses the same. + * + * - Moved GIFs, and other static HTTP response templates + * to project.h + * + * - Some minor fixes + * + * - Removed some >400 CRs again (Jon, you really worked + * a lot! ;-) + * + * Revision 1.3 2001/05/20 01:21:20 jongfoster + * Version 2.9.4 checkin. + * - Merged popupfile and cookiefile, and added control over PCRS + * filtering, in new "permissionsfile". + * - Implemented LOG_LEVEL_FATAL, so that if there is a configuration + * file error you now get a message box (in the Win32 GUI) rather + * than the program exiting with no explanation. + * - Made killpopup use the PCRS MIME-type checking and HTTP-header + * skipping. + * - Removed tabs from "config" + * - Moved duplicated url parsing code in "loaders.c" to a new funcition. + * - Bumped up version number. + * + * Revision 1.2 2001/05/17 23:02:36 oes + * - Made referrer option accept 'L' as a substitute for '§' + * * Revision 1.1.1.1 2001/05/15 13:59:01 oes * Initial import of version 2.9.3 source tree * @@ -111,8 +178,9 @@ const struct parsers client_patterns[] = { const struct interceptors intercept_patterns[] = { { "show-proxy-args", 14, show_proxy_args }, + { "ijb-send-banner", 14, ijb_send_banner }, #ifdef TRUST_FILES - { "ij-untrusted-url", 14, ij_untrusted_url }, + { "ij-untrusted-url", 15, ij_untrusted_url }, #endif /* def TRUST_FILES */ { NULL, 0, NULL } }; @@ -120,9 +188,11 @@ const struct interceptors intercept_patterns[] = { const struct parsers server_patterns[] = { { "set-cookie:", 11, server_set_cookie }, { "connection:", 11, crumble }, -#ifdef PCRS +#if defined(PCRS) || defined(KILLPOPUPS) { "Content-Type:", 13, content_type }, - { "Content-Length:", 15, crumble }, +#endif /* defined(PCRS) || defined(KILLPOPUPS) */ +#ifdef PCRS + { "Content-Length:", 15, content_length }, #endif /* def PCRS */ { NULL, 0, NULL } }; @@ -707,7 +777,7 @@ char *crumble(const struct parsers *v, char *s, struct client_state *csp) } -#ifdef PCRS +#if defined(PCRS) || defined(KILLPOPUPS) /********************************************************************* * @@ -733,6 +803,36 @@ char *content_type(const struct parsers *v, char *s, struct client_state *csp) return(strdup(s)); } +#endif /* defined(PCRS) || defined(KILLPOPUPS) */ + +#ifdef PCRS +/********************************************************************* + * + * Function : content_length + * + * Description : Crunch Content-Length header if & only if we are + * filtering this page through PCRS. + * + * Parameters : + * 1 : v = ignored + * 2 : s = header string we are "considering" + * 3 : csp = Current client state (buffers, headers, etc...) + * + * Returns : A duplicate string pointer to this header (ie. pass thru) + * + *********************************************************************/ +char *content_length(const struct parsers *v, char *s, struct client_state *csp) +{ + if ((csp->permissions & PERMIT_RE_FILTER) != 0) + { + log_error(LOG_LEVEL_HEADER, "crunch!"); + return(NULL); + } + else + { + return(strdup(s)); + } +} #endif /* def PCRS */ @@ -765,20 +865,20 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp csp->referrer = strdup(s); - if (referrer == NULL) + if (csp->config->referrer == NULL) { log_error(LOG_LEVEL_HEADER, "crunch!"); return(NULL); } - if (*referrer == '.') + if (*csp->config->referrer == '.') { return(strdup(s)); } - if (*referrer == '@') + if (*csp->config->referrer == '@') { - if (csp->send_user_cookie) + if (csp->permissions & PERMIT_COOKIE_READ) { return(strdup(s)); } @@ -794,9 +894,9 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp * to fool stupid checks for in-site links */ - if (*referrer == '§' || *referrer == 'L') + if (*csp->config->referrer == '§' || *csp->config->referrer == 'L') { - if (csp->send_user_cookie) + if (csp->permissions & PERMIT_COOKIE_READ) { return(strdup(s)); } @@ -814,7 +914,7 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp log_error(LOG_LEVEL_HEADER, "modified"); s = strsav( NULL, "Referer: " ); - s = strsav( s, referrer ); + s = strsav( s, csp->config->referrer ); return(s); } @@ -848,20 +948,20 @@ char *client_uagent(const struct parsers *v, char *s, struct client_state *csp) } #endif /* def DETECT_MSIE_IMAGES */ - if (uagent == NULL) + if (csp->config->uagent == NULL) { log_error(LOG_LEVEL_HEADER, "default"); return(strdup(DEFAULT_USER_AGENT)); } - if (*uagent == '.') + if (*csp->config->uagent == '.') { return(strdup(s)); } - if (*uagent == '@') + if (*csp->config->uagent == '@') { - if (csp->send_user_cookie) + if (csp->permissions & PERMIT_COOKIE_READ) { return(strdup(s)); } @@ -875,7 +975,7 @@ char *client_uagent(const struct parsers *v, char *s, struct client_state *csp) log_error(LOG_LEVEL_HEADER, "modified"); s = strsav( NULL, "User-Agent: " ); - s = strsav( s, uagent ); + s = strsav( s, csp->config->uagent ); return(s); } @@ -897,20 +997,20 @@ char *client_uagent(const struct parsers *v, char *s, struct client_state *csp) *********************************************************************/ char *client_ua(const struct parsers *v, char *s, struct client_state *csp) { - if (uagent == NULL) + if (csp->config->uagent == NULL) { log_error(LOG_LEVEL_HEADER, "crunch!"); return(NULL); } - if (*uagent == '.') + if (*csp->config->uagent == '.') { return(strdup(s)); } - if (*uagent == '@') + if (*csp->config->uagent == '@') { - if (csp->send_user_cookie) + if (csp->permissions & PERMIT_COOKIE_READ) { return(strdup(s)); } @@ -946,13 +1046,13 @@ char *client_ua(const struct parsers *v, char *s, struct client_state *csp) char *client_from(const struct parsers *v, char *s, struct client_state *csp) { /* if not set, zap it */ - if (from == NULL) + if (csp->config->from == NULL) { log_error(LOG_LEVEL_HEADER, "crunch!"); return(NULL); } - if (*from == '.') + if (*csp->config->from == '.') { return(strdup(s)); } @@ -960,7 +1060,7 @@ char *client_from(const struct parsers *v, char *s, struct client_state *csp) log_error(LOG_LEVEL_HEADER, " modified"); s = strsav( NULL, "From: " ); - s = strsav( s, from ); + s = strsav( s, csp->config->from ); return(s); } @@ -984,7 +1084,7 @@ char *client_from(const struct parsers *v, char *s, struct client_state *csp) *********************************************************************/ char *client_send_cookie(const struct parsers *v, char *s, struct client_state *csp) { - if (csp->send_user_cookie) + if (csp->permissions & PERMIT_COOKIE_READ) { enlist(csp->cookie_list, s + v->len + 1); } @@ -1019,7 +1119,7 @@ char *client_send_cookie(const struct parsers *v, char *s, struct client_state * *********************************************************************/ char *client_x_forwarded(const struct parsers *v, char *s, struct client_state *csp) { - if (add_forwarded) + if (csp->config->add_forwarded) { csp->x_forwarded = strdup(s); } @@ -1104,7 +1204,7 @@ void client_cookie_adder(struct client_state *csp) tmp = strsav(tmp, l->str); } - for (l = wafer_list->next; l ; l = l->next) + for (l = csp->config->wafer_list->next; l ; l = l->next) { if (tmp) { @@ -1149,7 +1249,7 @@ void client_xtra_adder(struct client_state *csp) { struct list *l; - for (l = xtra_list->next; l ; l = l->next) + for (l = csp->config->xtra_list->next; l ; l = l->next) { log_error(LOG_LEVEL_HEADER, "addh: %s", l->str); enlist(csp->headers, l->str); @@ -1174,7 +1274,10 @@ void client_x_forwarded_adder(struct client_state *csp) { char *p = NULL; - if (add_forwarded == 0) return; + if (csp->config->add_forwarded == 0) + { + return; + } if (csp->x_forwarded) { @@ -1213,13 +1316,13 @@ void client_x_forwarded_adder(struct client_state *csp) char *server_set_cookie(const struct parsers *v, char *s, struct client_state *csp) { #ifdef JAR_FILES - if (jar) + if (csp->config->jar) { - fprintf(jar, "%s\t%s\n", csp->http->host, (s + v->len + 1)); + fprintf(csp->config->jar, "%s\t%s\n", csp->http->host, (s + v->len + 1)); } #endif /* def JAR_FILES */ - if (csp->accept_server_cookie == 0) + if (!(csp->permissions & PERMIT_COOKIE_SET)) { return(crumble(v, s, csp)); }