X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgisimple.c;h=2fcd0022fc8c02448f4ad29d7b2ac49bf3bedc47;hp=79b811f9ff4ffa2ee623eec0da72348c6afe8238;hb=ab082f57780b5acb5b1305d82309a1dea8c026a1;hpb=9b1a4d7e6645b3e2987f67fe3d4d22ae617457f7 diff --git a/cgisimple.c b/cgisimple.c index 79b811f9..2fcd0022 100644 --- a/cgisimple.c +++ b/cgisimple.c @@ -6,7 +6,7 @@ * status. * * Copyright : Written by and Copyright (C) 2001-2017 the - * Privoxy team. http://www.privoxy.org/ + * Privoxy team. https://www.privoxy.org/ * * Based on the Internet Junkbuster originally written * by and Copyright (C) 1997 Anonymous Coders and @@ -308,7 +308,7 @@ static void cgi_create_client_tag_form(char *form, size_t size, snprintf(form, size, "
\n" " \n" - " \n" + " \n" " \n" " \n" "
", tag, toggle_state, !expires, button_name); @@ -401,7 +401,7 @@ jb_err cgi_show_client_tags(struct client_state *csp, refresh_delay = get_next_tag_timeout_for_client(csp->client_address); if (refresh_delay != 0) { - snprintf(buf, sizeof(buf), "%d", csp->config->client_tag_lifetime); + snprintf(buf, sizeof(buf), "%u", csp->config->client_tag_lifetime); if (map(exports, "refresh-delay", 1, buf, 1)) { free_map(exports); @@ -1031,6 +1031,72 @@ jb_err cgi_send_user_manual(struct client_state *csp, } +#ifdef FEATURE_EXTENDED_STATISTICS +/********************************************************************* + * + * Function : get_filter_statistics_table + * + * Description : Produces the filter statistic table content. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * + * Returns : Pointer to the HTML statistic table content or + * NULL on out of memory + * + *********************************************************************/ +static char *get_filter_statistics_table(const struct client_state *csp) +{ + char buf[BUFFER_SIZE]; + char *statistics; + int i; + struct file_list *fl; + struct re_filterfile_spec *b; + jb_err err = JB_ERR_OK; + + statistics = strdup_or_die(""); + + for (i = 0; i < MAX_AF_FILES; i++) + { + fl = csp->rlist[i]; + if ((NULL == fl) || (NULL == fl->f)) + { + /* + * Either there are no filter files left or this + * filter file just contains no valid filters. + * + * Continue to be sure we don't miss valid filter + * files that are chained after empty or invalid ones. + */ + continue; + } + + for (b = fl->f; b != NULL; b = b->next) + { + if (b->type == FT_CONTENT_FILTER) + { + unsigned long long executions; + unsigned long long pages_modified; + unsigned long long hits; + + get_filter_statistics(b->name, &executions, &pages_modified, &hits); + snprintf(buf, sizeof(buf), + "%s%llu" + "%llu" + "%llu\n", + b->name, executions, pages_modified, hits); + + if (!err) err = string_append(&statistics, buf); + } + } + } + + return statistics; + +} +#endif + + /********************************************************************* * * Function : cgi_show_status @@ -1143,6 +1209,22 @@ jb_err cgi_show_status(struct client_state *csp, if (!err) err = map_block_killer(exports, "statistics"); #endif /* ndef FEATURE_STATISTICS */ +#ifdef FEATURE_EXTENDED_STATISTICS + { + char *filter_statistics = get_filter_statistics_table(csp); + if (filter_statistics != NULL) + { + if (!err) err = map(exports, "filter-statistics", 1, filter_statistics, 0); + } + else + { + if (!err) err = map_block_killer(exports, "extended-statistics"); + } + } +#else /* ndef FEATURE_EXTENDED_STATISTICS */ + if (!err) err = map_block_killer(exports, "extended-statistics"); +#endif /* def FEATURE_EXTENDED_STATISTICS */ + /* * List all action files in use, together with view and edit links, * except for standard.action, which should only be viewable. (Not @@ -1365,7 +1447,7 @@ jb_err cgi_show_url_info(struct client_state *csp, if (url_param[0] == '\0') { - /* URL paramater not specified, display query form only. */ + /* URL parameter not specified, display query form only. */ free(url_param); if (map_block_killer(exports, "url-given") || map(exports, "url", 1, "", 1)) @@ -1438,11 +1520,14 @@ jb_err cgi_show_url_info(struct client_state *csp, } /* - * We have a warning about SSL paths. Hide it for unencrypted sites. + * We have a warning about SSL paths. Hide it for unencrypted sites + * and unconditionally if https inspection is enabled. */ +#ifndef FEATURE_HTTPS_INSPECTION if (!url_to_query->ssl) +#endif { - if (map_block_killer(exports, "https")) + if (map_block_killer(exports, "https-and-no-https-inspection")) { free_current_action(action); free_map(exports); @@ -1714,7 +1799,7 @@ jb_err cgi_robots_txt(struct client_state *csp, * * Function : show_defines * - * Description : Add to a map the state od all conditional #defines + * Description : Add to a map the state of all conditional #defines * used when building * * Parameters : @@ -1756,6 +1841,14 @@ static jb_err show_defines(struct map *exports) 1, #else 0, +#endif + }, + { + "FEATURE_BROTLI", +#ifdef FEATURE_BROTLI + 1, +#else + 0, #endif }, { @@ -1828,6 +1921,14 @@ static jb_err show_defines(struct map *exports) 1, #else 0, +#endif + }, + { + "FEATURE_HTTPS_INSPECTION", +#ifdef FEATURE_HTTPS_INSPECTION + 1, +#else + 0, #endif }, {