X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgisimple.c;h=0077e7c48149324278dd955bc3ab50586ef2940f;hp=0148120a1aa2ff4f6ed47087208f4daf26c27050;hb=7c7eac4808f49d1b7bba67ade896788d25f7baa6;hpb=bd7800c807e535d21222fa41cb29537cb865b170
diff --git a/cgisimple.c b/cgisimple.c
index 0148120a..0077e7c4 100644
--- a/cgisimple.c
+++ b/cgisimple.c
@@ -5,7 +5,7 @@
* Purpose : Simple CGIs to get information about Privoxy's
* status.
*
- * Copyright : Written by and Copyright (C) 2001-2017 the
+ * Copyright : Written by and Copyright (C) 2001-2020 the
* Privoxy team. https://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
@@ -1031,6 +1031,142 @@ jb_err cgi_send_user_manual(struct client_state *csp,
}
+#ifdef FEATURE_EXTENDED_STATISTICS
+/*********************************************************************
+ *
+ * Function : get_block_reason_statistics_table
+ *
+ * Description : Produces the block reason 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_block_reason_statistics_table(const struct client_state *csp)
+{
+ char buf[BUFFER_SIZE];
+ char *statistics;
+ int i;
+ struct file_list *fl;
+ jb_err err = JB_ERR_OK;
+
+ statistics = strdup_or_die("");
+
+ /* Run through all action files. */
+ for (i = 0; i < MAX_AF_FILES; i++)
+ {
+ struct url_actions *b;
+ struct action_spec *last_action = NULL;
+
+ if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL))
+ {
+ /* Skip empty files */
+ continue;
+ }
+
+ /* Go through all the actions. */
+ for (b = b->next; NULL != b; b = b->next)
+ {
+ if (last_action == b->action)
+ {
+ continue;
+ }
+ if ((b->action->add & ACTION_BLOCK))
+ {
+ unsigned long long count;
+ const char *block_reason = b->action->string[ACTION_STRING_BLOCK];
+ const char *encoded_block_reason = html_encode(block_reason);
+
+ if (encoded_block_reason == NULL)
+ {
+ freez(statistics);
+ return NULL;
+ }
+ get_block_reason_count(block_reason, &count);
+ snprintf(buf, sizeof(buf),
+ "
%s | %llu | \n",
+ encoded_block_reason, count);
+ freez(encoded_block_reason);
+
+ if (!err) err = string_append(&statistics, buf);
+ }
+ last_action = b->action;
+ }
+ }
+
+ return 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 /* def FEATURE_EXTENDED_STATISTICS */
+
+
/*********************************************************************
*
* Function : cgi_show_status
@@ -1143,6 +1279,33 @@ 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 *block_reason_statistics = get_block_reason_statistics_table(csp);
+ if (block_reason_statistics != NULL)
+ {
+ if (!err) err = map(exports, "block-reason-statistics", 1, block_reason_statistics, 0);
+ }
+ else
+ {
+ if (!err) err = map_block_killer(exports, "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 +1528,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 +1601,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 +1880,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 +1922,14 @@ static jb_err show_defines(struct map *exports)
1,
#else
0,
+#endif
+ },
+ {
+ "FEATURE_BROTLI",
+#ifdef FEATURE_BROTLI
+ 1,
+#else
+ 0,
#endif
},
{