X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=parsers.c;h=50539f061b486e45d4ba185223bc238c9884770e;hb=89f16d4ceacb511d3b008a1234cfd63d1522ffab;hp=ec7e9517e13613f52f9105b39a0cd70ee14a34d5;hpb=1d7f399a3bc43e93923bb7f6b965df4de2ee5b90;p=privoxy.git diff --git a/parsers.c b/parsers.c index ec7e9517..50539f06 100644 --- a/parsers.c +++ b/parsers.c @@ -1,4 +1,4 @@ -const char parsers_rcs[] = "$Id: parsers.c,v 1.21 2001/07/31 14:46:00 oes Exp $"; +const char parsers_rcs[] = "$Id: parsers.c,v 1.26 2001/09/16 17:05:14 jongfoster Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/parsers.c,v $ @@ -41,6 +41,24 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.21 2001/07/31 14:46:00 oes Exp $" * * Revisions : * $Log: parsers.c,v $ + * Revision 1.26 2001/09/16 17:05:14 jongfoster + * Removing unused #include showarg.h + * + * Revision 1.25 2001/09/16 13:21:27 jongfoster + * Changes to use new list functions. + * + * Revision 1.24 2001/09/13 23:05:50 jongfoster + * Changing the string paramater to the header parsers a "const". + * + * Revision 1.23 2001/09/12 18:08:19 steudten + * + * In parse_http_request() header rewriting miss the host value, so + * from http://www.mydomain.com the result was just " / " not + * http://www.mydomain.com/ in case we forward. + * + * Revision 1.22 2001/09/10 10:58:53 oes + * Silenced compiler warnings + * * Revision 1.21 2001/07/31 14:46:00 oes * - Persistant connections now suppressed * - sed() no longer appends empty header to csp->headers @@ -229,7 +247,6 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.21 2001/07/31 14:46:00 oes Exp $" #include "encode.h" #include "filters.h" #include "loaders.h" -#include "showargs.h" #include "jcc.h" #include "ssplit.h" #include "errlog.h" @@ -480,14 +497,14 @@ char *get_header(struct client_state *csp) *********************************************************************/ char *sed(const struct parsers pats[], void (* const more_headers[])(struct client_state *), struct client_state *csp) { - struct list *p; + struct list_entry *p; const struct parsers *v; char *hdr; void (* const *f)(); for (v = pats; v->str ; v++) { - for (p = csp->headers->next; p ; p = p->next) + for (p = csp->headers->first; p ; p = p->next) { /* Header crunch()ed in previous run? -> ignore */ if (p->str == NULL) continue; @@ -497,7 +514,7 @@ char *sed(const struct parsers pats[], void (* const more_headers[])(struct clie if (strncmpic(p->str, v->str, v->len) == 0) { hdr = v->parser(v, p->str, csp); - freez(p->str); + freez((char *)p->str); /* FIXME: Yuck! patching a list...*/ p->str = hdr; } } @@ -559,7 +576,7 @@ void free_http_request(struct http_request *http) *********************************************************************/ void parse_http_request(char *req, struct http_request *http, struct client_state *csp) { - char *buf, *v[10], *url, *p; + char *buf, *v[10], *url, *p, *save_url; int n; memset(http, '\0', sizeof(*http)); @@ -599,6 +616,7 @@ void parse_http_request(char *req, struct http_request *http, struct client_stat url = v[1]; http->ver = strdup(v[2]); + save_url = url; if (strncmpic(url, "http://", 7) == 0) { url += 7; @@ -632,7 +650,9 @@ void parse_http_request(char *req, struct http_request *http, struct client_stat /* 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->cmd = strsav(http->cmd, save_url); + http->cmd = strsav(http->cmd, "/ "); http->cmd = strsav(http->cmd, http->ver); } } @@ -708,7 +728,7 @@ void parse_http_request(char *req, struct http_request *http, struct client_stat * Returns : Always NULL. * *********************************************************************/ -char *crumble(const struct parsers *v, char *s, struct client_state *csp) +char *crumble(const struct parsers *v, const char *s, struct client_state *csp) { log_error(LOG_LEVEL_HEADER, "crunch!"); return(NULL); @@ -730,7 +750,7 @@ char *crumble(const struct parsers *v, char *s, struct client_state *csp) * Returns : A duplicate string pointer to this header (ie. pass thru) * *********************************************************************/ -char *content_type(const struct parsers *v, char *s, struct client_state *csp) +char *content_type(const struct parsers *v, const char *s, struct client_state *csp) { if (strstr(s, " text/") || strstr(s, "application/x-javascript")) csp->content_type = CT_TEXT; @@ -759,15 +779,15 @@ char *content_type(const struct parsers *v, char *s, struct client_state *csp) * Returns : A duplicate string pointer to this header (ie. pass thru) * *********************************************************************/ -char *content_length(const struct parsers *v, char *s, struct client_state *csp) +char *content_length(const struct parsers *v, const 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); + char * s2 = (char *) zalloc(100); + sprintf(s2, "Content-Length: %d", (int) csp->content_length); - log_error(LOG_LEVEL_HEADER, "Adjust Content-Length to %d", csp->content_length); - return(s); + log_error(LOG_LEVEL_HEADER, "Adjust Content-Length to %d", (int) csp->content_length); + return(s2); } else { @@ -793,9 +813,10 @@ char *content_length(const struct parsers *v, char *s, struct client_state *csp) * or modified header * *********************************************************************/ -char *client_referrer(const struct parsers *v, char *s, struct client_state *csp) +char *client_referrer(const struct parsers *v, const char *s, struct client_state *csp) { const char * newval; + char * s2; #ifdef FEATURE_FORCE_LOAD /* Since the referrer can include the prefix even * even if the request itself is non-forced, we must @@ -837,11 +858,11 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp * to fool stupid checks for in-site links */ log_error(LOG_LEVEL_HEADER, "crunch+forge!"); - s = strsav(NULL, "Referer: "); - s = strsav(s, "http://"); - s = strsav(s, csp->http->hostport); - s = strsav(s, "/"); - return(s); + s2 = strsav(NULL, "Referer: "); + s2 = strsav(s2, "http://"); + s2 = strsav(s2, csp->http->hostport); + s2 = strsav(s2, "/"); + return(s2); } /* @@ -852,12 +873,13 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp /* * We have a specific (fixed) referer we want to send. */ + char * s3; log_error(LOG_LEVEL_HEADER, "modified"); - s = strsav( NULL, "Referer: " ); - s = strsav( s, newval ); - return(s); + s3 = strsav( NULL, "Referer: " ); + s3 = strsav( s3, newval ); + return(s3); } /* Should never get here! */ @@ -870,11 +892,11 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp * to fool stupid checks for in-site links */ log_error(LOG_LEVEL_HEADER, "crunch+forge!"); - s = strsav(NULL, "Referer: "); - s = strsav(s, "http://"); - s = strsav(s, csp->http->hostport); - s = strsav(s, "/"); - return(s); + s2 = strsav(NULL, "Referer: "); + s2 = strsav(s2, "http://"); + s2 = strsav(s2, csp->http->hostport); + s2 = strsav(s2, "/"); + return(s2); } @@ -895,9 +917,10 @@ char *client_referrer(const struct parsers *v, char *s, struct client_state *csp * a malloc'ed string pointer to this header (ie. pass thru). * *********************************************************************/ -char *client_uagent(const struct parsers *v, char *s, struct client_state *csp) +char *client_uagent(const struct parsers *v, const char *s, struct client_state *csp) { const char * newval; + char * s2; /* Save the client's User-Agent: value */ if (strlen(s) >= 12) @@ -928,9 +951,9 @@ 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, newval ); - return(s); + s2 = strsav( NULL, "User-Agent: " ); + s2 = strsav( s2, newval ); + return(s2); } @@ -949,7 +972,7 @@ char *client_uagent(const struct parsers *v, char *s, struct client_state *csp) * Returns : NULL if crunched, or a malloc'ed string to original header * *********************************************************************/ -char *client_ua(const struct parsers *v, char *s, struct client_state *csp) +char *client_ua(const struct parsers *v, const char *s, struct client_state *csp) { if ((csp->action->flags & ACTION_HIDE_USER_AGENT) == 0) { @@ -979,9 +1002,10 @@ char *client_ua(const struct parsers *v, char *s, struct client_state *csp) * modified/original header. * *********************************************************************/ -char *client_from(const struct parsers *v, char *s, struct client_state *csp) +char *client_from(const struct parsers *v, const char *s, struct client_state *csp) { const char * newval; + char * s2; if ((csp->action->flags & ACTION_HIDE_FROM) == 0) { @@ -1001,9 +1025,9 @@ 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, newval ); - return(s); + s2 = strsav( NULL, "From: " ); + s2 = strsav( s2, newval ); + return(s2); } @@ -1024,7 +1048,7 @@ char *client_from(const struct parsers *v, char *s, struct client_state *csp) * Returns : Always NULL. * *********************************************************************/ -char *client_send_cookie(const struct parsers *v, char *s, struct client_state *csp) +char *client_send_cookie(const struct parsers *v, const char *s, struct client_state *csp) { if ((csp->action->flags & ACTION_NO_COOKIE_READ) == 0) { @@ -1059,7 +1083,7 @@ char *client_send_cookie(const struct parsers *v, char *s, struct client_state * * Returns : Always NULL. * *********************************************************************/ -char *client_x_forwarded(const struct parsers *v, char *s, struct client_state *csp) +char *client_x_forwarded(const struct parsers *v, const char *s, struct client_state *csp) { if ((csp->action->flags & ACTION_HIDE_FORWARDED) == 0) { @@ -1094,7 +1118,7 @@ char *client_x_forwarded(const struct parsers *v, char *s, struct client_state * * Returns : Duplicate of argument s. * *********************************************************************/ -char *client_accept(const struct parsers *v, char *s, struct client_state *csp) +char *client_accept(const struct parsers *v, const char *s, struct client_state *csp) { #ifdef FEATURE_IMAGE_DETECT_MSIE if (strstr (s, "image/gif")) @@ -1134,11 +1158,11 @@ char *client_accept(const struct parsers *v, char *s, struct client_state *csp) *********************************************************************/ void client_cookie_adder(struct client_state *csp) { - struct list *lst; + struct list_entry *lst; char *tmp = NULL; char *e; - for (lst = csp->cookie_list->next; lst ; lst = lst->next) + for (lst = csp->cookie_list->first; lst ; lst = lst->next) { if (tmp) { @@ -1147,7 +1171,7 @@ void client_cookie_adder(struct client_state *csp) tmp = strsav(tmp, lst->str); } - for (lst = csp->action->multi[ACTION_MULTI_WAFER]->next; lst ; lst = lst->next) + for (lst = csp->action->multi[ACTION_MULTI_WAFER]->first; lst ; lst = lst->next) { if (tmp) { @@ -1190,9 +1214,10 @@ void client_cookie_adder(struct client_state *csp) *********************************************************************/ void client_xtra_adder(struct client_state *csp) { - struct list *lst = csp->action->multi[ACTION_MULTI_ADD_HEADER]; + struct list_entry *lst; - for (lst = lst->next; lst ; lst = lst->next) + for (lst = csp->action->multi[ACTION_MULTI_ADD_HEADER]->first; + lst ; lst = lst->next) { log_error(LOG_LEVEL_HEADER, "addh: %s", lst->str); enlist(csp->headers, lst->str); @@ -1278,7 +1303,7 @@ void connection_close_adder(struct client_state *csp) * Returns : `crumble' or a newly malloc'ed string. * *********************************************************************/ -char *server_set_cookie(const struct parsers *v, char *s, struct client_state *csp) +char *server_set_cookie(const struct parsers *v, const char *s, struct client_state *csp) { #ifdef FEATURE_COOKIE_JAR if (csp->config->jar) @@ -1313,7 +1338,7 @@ char *server_set_cookie(const struct parsers *v, char *s, struct client_state *c * Returns : A malloc'ed pointer to the cleaned host header * *********************************************************************/ -char *client_host(const struct parsers *v, char *s, struct client_state *csp) +char *client_host(const struct parsers *v, const char *s, struct client_state *csp) { char *cleanhost = strdup(s);