X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=parsers.c;h=11b511e6000fe20704dcc433110359b289f3d8f7;hb=4ec4d3be0fdabf7b3e11c6cbb03e601aaedf53f7;hp=14e92ac55b18eba34d2dd076b695e13c3fdbcc10;hpb=014e796377eafac5f1875e61282d48cb337dbdce;p=privoxy.git diff --git a/parsers.c b/parsers.c index 14e92ac5..11b511e6 100644 --- a/parsers.c +++ b/parsers.c @@ -1,4 +1,4 @@ -const char parsers_rcs[] = "$Id: parsers.c,v 1.13 2001/05/31 21:30:33 jongfoster Exp $"; +const char parsers_rcs[] = "$Id: parsers.c,v 1.17 2001/06/29 21:45:41 oes Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/parsers.c,v $ @@ -41,6 +41,21 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.13 2001/05/31 21:30:33 jongfoster * * Revisions : * $Log: parsers.c,v $ + * Revision 1.17 2001/06/29 21:45:41 oes + * Indentation, CRLF->LF, Tab-> Space + * + * Revision 1.16 2001/06/29 13:32:42 oes + * - Fixed a comment + * - Adapted free_http_request + * - Removed logentry from cancelled commit + * + * Revision 1.15 2001/06/03 19:12:38 oes + * deleted const struct interceptors + * + * Revision 1.14 2001/06/01 18:49:17 jongfoster + * Replaced "list_share" with "list" - the tiny memory gain was not + * worth the extra complexity. + * * Revision 1.13 2001/05/31 21:30:33 jongfoster * Removed list code - it's now in list.[ch] * Renamed "permission" to "action", and changed many features @@ -199,6 +214,7 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.13 2001/05/31 21:30:33 jongfoster #include "errlog.h" #include "jbsockets.h" #include "miscutil.h" +#include "cgi.h" const char parsers_h_rcs[] = PARSERS_H_VERSION; @@ -237,25 +253,12 @@ const struct parsers client_patterns[] = { { NULL, 0, NULL } }; -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", 15, ij_untrusted_url }, -#endif /* def TRUST_FILES */ - { "show-url-info", 13, ijb_show_url_info }, - { NULL, 0, NULL } -}; const struct parsers server_patterns[] = { { "set-cookie:", 11, server_set_cookie }, { "connection:", 11, crumble }, -#if defined(PCRS) || defined(KILLPOPUPS) { "Content-Type:", 13, content_type }, -#endif /* defined(PCRS) || defined(KILLPOPUPS) */ -#ifdef PCRS { "Content-Length:", 15, content_length }, -#endif /* def PCRS */ { NULL, 0, NULL } }; @@ -516,6 +519,7 @@ void free_http_request(struct http_request *http) freez(http->hostport); freez(http->path); freez(http->ver); + freez(http->host_ip_addr_str); } @@ -545,7 +549,6 @@ void parse_http_request(char *req, struct http_request *http, struct client_stat http->cmd = strdup(req); buf = strdup(req); - n = ssplit(buf, " \r\n", v, SZ(v), 1, 1); if (n == 3) @@ -607,11 +610,29 @@ void parse_http_request(char *req, struct http_request *http, struct client_stat url = NULL; } - if (url && (p = strchr(url, '/'))) + if (url) { - http->path = strdup(p); - *p = '\0'; - http->hostport = strdup(url); + if (p = strchr(url, '/')) + { + http->path = strdup(p); + *p = '\0'; + http->hostport = strdup(url); + } + /* + * Repair broken HTTP requests that don't contain a path + */ + else + { + /* Repair hostport & path */ + http->path = strdup("/"); + http->hostport = strdup(url); + + /* Even repair cmd in case we're just forwarding. Boy are we nice ;-) */ + freez(http->cmd); + http->cmd = strsav(http->cmd, http->gpc); + http->cmd = strsav(http->cmd, " / "); + http->cmd = strsav(http->cmd, http->ver); + } } } } @@ -693,8 +714,6 @@ char *crumble(const struct parsers *v, char *s, struct client_state *csp) } -#if defined(PCRS) || defined(KILLPOPUPS) - /********************************************************************* * * Function : content_type @@ -711,24 +730,24 @@ char *crumble(const struct parsers *v, char *s, struct client_state *csp) *********************************************************************/ char *content_type(const struct parsers *v, char *s, struct client_state *csp) { - if (strstr (s, " text/") || strstr (s, "application/x-javascript")) - csp->is_text = 1; + if (strstr(s, " text/") || strstr(s, "application/x-javascript")) + csp->content_type = CT_TEXT; + else if (strstr(s, " image/gif")) + csp->content_type = CT_GIF; else - csp->is_text = 0; + csp->content_type = 0; 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. + * Description : Adjust Content-Length header if we modified + * the body. * * Parameters : * 1 : v = ignored @@ -741,19 +760,19 @@ char *content_type(const struct parsers *v, char *s, struct client_state *csp) char *content_length(const struct parsers *v, char *s, struct client_state *csp) { if (csp->content_length != 0) /* Content has been modified */ - { - s = (char *) zalloc(100); - sprintf(s, "Content-Length: %d", csp->content_length); - log_error(LOG_LEVEL_HEADER, "Adjust Content-Length to %d", csp->content_length); - return(s); - } + { + s = (char *) zalloc(100); + sprintf(s, "Content-Length: %d", csp->content_length); + + log_error(LOG_LEVEL_HEADER, "Adjust Content-Length to %d", csp->content_length); + return(s); + } else { return(strdup(s)); } -} -#endif /* def PCRS */ +} /*********************************************************************