X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgi.c;h=072c5c5a1fbe46d3b0f6f2c6fd41c1789d6e19a7;hp=8a0ce49ed3ea4d6ad53866af15438a7184f3e553;hb=8b0d00fefbc1945da1b7da9427ca09ef2e5eb6e1;hpb=293c60b328abf1a73336fe73954425e9400e292c diff --git a/cgi.c b/cgi.c index 8a0ce49e..072c5c5a 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.106 2008/05/21 15:24:38 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.109 2008/07/26 09:40:27 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -11,7 +11,7 @@ const char cgi_rcs[] = "$Id: cgi.c,v 1.106 2008/05/21 15:24:38 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.106 2008/05/21 15:24:38 fabiankeil Exp $" * * Revisions : * $Log: cgi.c,v $ + * Revision 1.109 2008/07/26 09:40:27 fabiankeil + * Remove the unconditional block in get_http_time(). + * It's pointless now that it's no longer used to limit + * dummy's scope. While at it, remove obvious comments + * and a trailing space. + * + * Revision 1.108 2008/05/26 17:30:53 fabiankeil + * Provide an OpenSearch Description to access the + * show-url-info page through "search engine plugins". + * + * 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. * @@ -768,6 +782,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 */ }, @@ -1961,34 +1978,26 @@ void get_http_time(int time_offset, char *buf, size_t buffer_size) struct tm *t; time_t current_time; #if defined(HAVE_GMTIME_R) - /* - * Declare dummy up here (instead of inside get/set gmt block) so it - * doesn't go out of scope before it's potentially used in snprintf later. - * Wrapping declaration inside HAVE_GMTIME_R keeps the compiler quiet when - * !defined HAVE_GMTIME_R. - */ - struct tm dummy; + struct tm dummy; #endif assert(buf); assert(buffer_size > 29); - time(¤t_time); /* get current time */ + time(¤t_time); current_time += time_offset; /* get and save the gmt */ - { #if HAVE_GMTIME_R - t = gmtime_r(¤t_time, &dummy); + t = gmtime_r(¤t_time, &dummy); #elif FEATURE_PTHREAD - pthread_mutex_lock(&gmtime_mutex); - t = gmtime(¤t_time); - pthread_mutex_unlock(&gmtime_mutex); + pthread_mutex_lock(&gmtime_mutex); + t = gmtime(¤t_time); + pthread_mutex_unlock(&gmtime_mutex); #else - t = gmtime(¤t_time); + t = gmtime(¤t_time); #endif - } /* Format: "Sun, 06 Nov 1994 08:49:37 GMT" */ snprintf(buf, buffer_size, @@ -2004,6 +2013,51 @@ void get_http_time(int time_offset, char *buf, size_t buffer_size) } +/********************************************************************* + * + * Function : get_locale_time + * + * Description : Get the time in a date(1)-like format + * according to the current locale - e.g.: + * "Fri Aug 29 19:37:12 CEST 2008" + * + * XXX: Should we allow the user to change the format? + * + * Parameters : + * 1 : buf = Destination for result. + * 2 : buffer_size = Size of the buffer above. Must be big + * enough to hold 29 characters plus a + * trailing zero. + * + * Returns : N/A + * + *********************************************************************/ +static void get_locale_time(char *buf, size_t buffer_size) +{ + struct tm *timeptr; + time_t current_time; +#if defined(HAVE_LOCALTIME_R) + struct tm dummy; +#endif + + assert(buf); + assert(buffer_size > 29); + + time(¤t_time); + +#if HAVE_LOCALTIME_R + timeptr = localtime_r(¤t_time, &dummy); +#elif FEATURE_PTHREAD + pthread_mutex_lock(&localtime_mutex); + timeptr = localtime(¤t_time); + pthread_mutex_unlock(&localtime_mutex); +#else + timeptr = localtime(¤t_time); +#endif + + strftime(buf, buffer_size, "%a %b %d %X %Z %Y", timeptr); + +} /********************************************************************* * @@ -2577,7 +2631,7 @@ jb_err template_fill_for_cgi(const struct client_state *csp, *********************************************************************/ struct map *default_exports(const struct client_state *csp, const char *caller) { - char buf[20]; + char buf[30]; jb_err err; struct map * exports; int local_help_exists = 0; @@ -2603,6 +2657,8 @@ struct map *default_exports(const struct client_state *csp, const char *caller) } err = map(exports, "version", 1, html_encode(VERSION), 0); + get_locale_time(buf, sizeof(buf)); + if (!err) err = map(exports, "time", 1, html_encode(buf), 0); if (!err) err = map(exports, "my-ip-address", 1, html_encode(ip_address ? ip_address : "unknown"), 0); freez(ip_address); if (!err) err = map(exports, "my-hostname", 1, html_encode(hostname ? hostname : "unknown"), 0);