X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=cgi.c;h=cc8ef2cc89898b4f8dbe145f6ca27656a0ee7585;hb=03268a195b58133462f866853c7141ac96160c89;hp=917173799ec1901496c88eb346e10513e9ee6e44;hpb=e53e9ec47f904ad8a7231173d5b3a69f0584e16b;p=privoxy.git diff --git a/cgi.c b/cgi.c index 91717379..cc8ef2cc 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.103 2008/03/21 11:13:57 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.107 2008/05/26 16:23:19 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -11,7 +11,7 @@ const char cgi_rcs[] = "$Id: cgi.c,v 1.103 2008/03/21 11:13:57 fabiankeil Exp $" * Functions declared include: * * - * Copyright : Written by and Copyright (C) 2001-2004, 2006-2007 + * Copyright : Written by and Copyright (C) 2001-2004, 2006-2008 * the SourceForge Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -38,6 +38,20 @@ const char cgi_rcs[] = "$Id: cgi.c,v 1.103 2008/03/21 11:13:57 fabiankeil Exp $" * * Revisions : * $Log: cgi.c,v $ + * Revision 1.107 2008/05/26 16:23:19 fabiankeil + * - Fix spelling in template-not-found message. + * - Declare referrer_is_safe()'s alternative_prefix[] static. + * + * Revision 1.106 2008/05/21 15:24:38 fabiankeil + * Mark csp as immutable for a bunch of functions. + * + * Revision 1.105 2008/04/17 14:40:47 fabiankeil + * Provide get_http_time() with the buffer size so it doesn't + * have to blindly assume that the buffer is big enough. + * + * Revision 1.104 2008/03/26 18:07:06 fabiankeil + * Add hostname directive. Closes PR#1918189. + * * Revision 1.103 2008/03/21 11:13:57 fabiankeil * Only gather host information if it's actually needed. * Also move the code out of accept_connection() so it's less likely @@ -758,6 +772,9 @@ static const struct cgi_dispatcher cgi_dispatchers[] = { { "t", cgi_transparent_image, NULL, TRUE /* Send a transparent image (short name) */ }, + { "url-info-osd.xml", + cgi_send_url_info_osd, + NULL, TRUE /* Send templates/url-info-osd.xml */ }, { "user-manual", cgi_send_user_manual, NULL, TRUE /* Send user-manual */ }, @@ -956,7 +973,7 @@ static char *grep_cgi_referrer(const struct client_state *csp) static int referrer_is_safe(const struct client_state *csp) { char *referrer; - const char alternative_prefix[] = "http://" CGI_SITE_1_HOST "/"; + static const char alternative_prefix[] = "http://" CGI_SITE_1_HOST "/"; referrer = grep_cgi_referrer(csp); @@ -1548,7 +1565,7 @@ struct http_response *error_response(struct client_state *csp, * JB_ERR_MEMORY on out-of-memory error. * *********************************************************************/ -jb_err cgi_error_disabled(struct client_state *csp, +jb_err cgi_error_disabled(const struct client_state *csp, struct http_response *rsp) { struct map *exports; @@ -1651,7 +1668,7 @@ struct http_response *cgi_error_memory(void) * JB_ERR_MEMORY on out-of-memory error. * *********************************************************************/ -jb_err cgi_error_no_template(struct client_state *csp, +jb_err cgi_error_no_template(const struct client_state *csp, struct http_response *rsp, const char *template_name) { @@ -1668,7 +1685,7 @@ jb_err cgi_error_no_template(struct client_state *csp, "

Privoxy encountered an error while processing your request:

\r\n" "

Could not load template file "; static const char body_suffix[] = - " or one of it's included components.

\r\n" + " or one of its included components.

\r\n" "

Please contact your proxy administrator.

\r\n" "

If you are the proxy administrator, please put the required file(s)" "in the (confdir)/templates directory. The " @@ -1738,7 +1755,7 @@ jb_err cgi_error_no_template(struct client_state *csp, * JB_ERR_MEMORY on out-of-memory error. * *********************************************************************/ -jb_err cgi_error_unknown(struct client_state *csp, +jb_err cgi_error_unknown(const struct client_state *csp, struct http_response *rsp, jb_err error_to_report) { @@ -1817,7 +1834,7 @@ jb_err cgi_error_unknown(struct client_state *csp, * JB_ERR_MEMORY on out-of-memory error. * *********************************************************************/ -jb_err cgi_error_bad_param(struct client_state *csp, +jb_err cgi_error_bad_param(const struct client_state *csp, struct http_response *rsp) { struct map *exports; @@ -1929,19 +1946,18 @@ char *add_help_link(const char *item, * HTTP header - e.g.: * "Sun, 06 Nov 1994 08:49:37 GMT" * - * XXX: Should probably get a third parameter for - * the buffer size. - * * Parameters : * 1 : time_offset = Time returned will be current time * plus this number of seconds. - * 2 : buf = Destination for result. Must be long enough - * to hold 29 characters plus a trailing zero. + * 2 : buf = Destination for result. + * 3 : buffer_size = Size of the buffer above. Must be big + * enough to hold 29 characters plus a + * trailing zero. * * Returns : N/A * *********************************************************************/ -void get_http_time(int time_offset, char *buf) +void get_http_time(int time_offset, char *buf, size_t buffer_size) { static const char day_names[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; @@ -1962,6 +1978,7 @@ void get_http_time(int time_offset, char *buf) #endif assert(buf); + assert(buffer_size > 29); time(¤t_time); /* get current time */ @@ -1981,7 +1998,7 @@ void get_http_time(int time_offset, char *buf) } /* Format: "Sun, 06 Nov 1994 08:49:37 GMT" */ - snprintf(buf, 30, + snprintf(buf, buffer_size, "%s, %02d %s %4d %02d:%02d:%02d GMT", day_names[t->tm_wday], t->tm_mday, @@ -2093,7 +2110,7 @@ struct http_response *finish_http_response(const struct client_state *csp, struc if (!err) { - get_http_time(0, buf); + get_http_time(0, buf, sizeof(buf)); err = enlist_unique_header(rsp->headers, "Date", buf); } @@ -2102,13 +2119,13 @@ struct http_response *finish_http_response(const struct client_state *csp, struc if (!err) { - get_http_time(10 * 60, buf); /* 10 * 60sec = 10 minutes */ + get_http_time(10 * 60, buf, sizeof(buf)); /* 10 * 60sec = 10 minutes */ err = enlist_unique_header(rsp->headers, "Expires", buf); } } else if (!strncmpic(rsp->status, "302", 3)) { - get_http_time(0, buf); + get_http_time(0, buf, sizeof(buf)); if (!err) err = enlist_unique_header(rsp->headers, "Date", buf); } else @@ -2134,7 +2151,7 @@ struct http_response *finish_http_response(const struct client_state *csp, struc */ if (!err) err = enlist_unique_header(rsp->headers, "Cache-Control", "no-cache"); - get_http_time(0, buf); + get_http_time(0, buf, sizeof(buf)); if (!err) err = enlist_unique_header(rsp->headers, "Date", buf); if (!strncmpic(rsp->status, "403", 3) || !strncmpic(rsp->status, "404", 3) @@ -2242,7 +2259,7 @@ void free_http_response(struct http_response *rsp) * JB_ERR_FILE if the template file cannot be read * *********************************************************************/ -jb_err template_load(struct client_state *csp, char **template_ptr, +jb_err template_load(const struct client_state *csp, char **template_ptr, const char *templatename, int recursive) { jb_err err; @@ -2521,7 +2538,7 @@ jb_err template_fill(char **template_ptr, const struct map *exports) * JB_ERR_MEMORY on out-of-memory error * *********************************************************************/ -jb_err template_fill_for_cgi(struct client_state *csp, +jb_err template_fill_for_cgi(const struct client_state *csp, const char *templatename, struct map *exports, struct http_response *rsp)