* Purpose : Simple CGIs to get information about Privoxy's
* status.
*
- * Copyright : Written by and Copyright (C) 2001-2020 the
+ * Copyright : Written by and Copyright (C) 2001-2021 the
* Privoxy team. https://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
}
if (map(exports, "processed-request", 1,
- html_encode_and_free_original(list_to_text(csp->headers)), 0))
+ html_encode_and_free_original(
+#ifdef FEATURE_HTTPS_INSPECTION
+ csp->http->ssl ?
+ list_to_text(csp->https_headers) :
+#endif
+ list_to_text(csp->headers)
+ ), 0))
{
free_map(exports);
return JB_ERR_MEMORY;
this_tag = csp->config->client_tags;
if (this_tag->name == NULL)
{
- client_tag_status = strdup_or_die("<p>No tags available.</p>\n");
+ client_tag_status = strdup_or_die("<p>No tags have been configured.</p>\n");
}
else
{
snprintf(buf, sizeof(buf), "%u", csp->config->client_tag_lifetime);
if (map(exports, "refresh-delay", 1, buf, 1))
{
+ freez(client_tag_status);
free_map(exports);
return JB_ERR_MEMORY;
}
err = map_block_killer(exports, "tags-expire");
if (err != JB_ERR_OK)
{
+ freez(client_tag_status);
return err;
}
}
* 3 : parameters = map of cgi parameters
*
* CGI Parameters :
- * type : Selects the type of banner between "trans", "logo",
- * and "auto". Defaults to "logo" if absent or invalid.
+ * type : Selects the type of banner between "trans", "pattern",
+ * and "auto". Defaults to "pattern" if absent or invalid.
* "auto" means to select as if we were image-blocking.
* (Only the first character really counts; b and t are
* equivalent).
{
char imagetype = lookup(parameters, "type")[0];
+ if (imagetype != 'a' && imagetype != 'b' &&
+ imagetype != 'p' && imagetype != 't')
+ {
+ log_error(LOG_LEVEL_ERROR, "Overruling invalid image type '%c'.",
+ imagetype);
+ imagetype = 'p';
+ }
+
/*
* If type is auto, then determine the right thing
* to do from the set-image-blocker action
}
+/*********************************************************************
+ *
+ * Function : cgi_send_wpad
+ *
+ * Description : CGI function that sends a Proxy Auto-Configuration
+ * (PAC) file.
+ *
+ * Parameters :
+ * 1 : csp = Current client state (buffers, headers, etc...)
+ * 2 : rsp = http_response data structure for output
+ * 3 : parameters = map of cgi parameters
+ *
+ * CGI Parameters : None
+ *
+ * Returns : JB_ERR_OK on success
+ * JB_ERR_MEMORY on out-of-memory error.
+ *
+ *********************************************************************/
+jb_err cgi_send_wpad(struct client_state *csp,
+ struct http_response *rsp,
+ const struct map *parameters)
+{
+ struct map *exports;
+
+ assert(csp);
+ assert(rsp);
+ assert(parameters);
+
+ if (NULL == (exports = default_exports(csp, NULL)))
+ {
+ return JB_ERR_MEMORY;
+ }
+
+ if (enlist(rsp->headers, "Content-Type: application/x-ns-proxy-autoconfig"))
+ {
+ free_map(exports);
+ return JB_ERR_MEMORY;
+ }
+
+ return template_fill_for_cgi(csp, "wpad.dat", exports, rsp);
+
+}
+
+
/*********************************************************************
*
* Function : cgi_send_url_info_osd
assert(rsp);
assert(parameters);
- if (0 == strncmpic(csp->config->usermanual, "http://", 7))
+ if (0 == strncmpic(csp->config->usermanual, "http://", 7) ||
+ 0 == strncmpic(csp->config->usermanual, "https://", 8))
{
log_error(LOG_LEVEL_CGI, "Request for local user-manual "
"received while user-manual delivery is disabled.");
if (b->type == FT_CONTENT_FILTER)
{
unsigned long long executions;
- unsigned long long pages_modified;
+ unsigned long long response_bodies_modified;
unsigned long long hits;
- get_filter_statistics(b->name, &executions, &pages_modified, &hits);
+ get_filter_statistics(b->name, &executions, &response_bodies_modified, &hits);
snprintf(buf, sizeof(buf),
"<tr><td>%s</td><td style=\"text-align: right\">%llu</td>"
"<td style=\"text-align: right\">%llu</td>"
"<td style=\"text-align: right\">%llu</td><tr>\n",
- b->name, executions, pages_modified, hits);
+ b->name, executions, response_bodies_modified, hits);
if (!err) err = string_append(&statistics, buf);
}
#endif /* ndef FEATURE_STATISTICS */
#ifdef FEATURE_EXTENDED_STATISTICS
+ if (!err)
{
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);
+ err = map(exports, "block-reason-statistics", 1, block_reason_statistics, 0);
}
else
{
- if (!err) err = map_block_killer(exports, "extended-statistics");
+ err = map_block_killer(exports, "extended-statistics");
}
}
+ if (!err)
{
char *filter_statistics = get_filter_statistics_table(csp);
if (filter_statistics != NULL)
{
- if (!err) err = map(exports, "filter-statistics", 1, filter_statistics, 0);
+ err = map(exports, "filter-statistics", 1, filter_statistics, 0);
}
else
{
- if (!err) err = map_block_killer(exports, "extended-statistics");
+ err = map_block_killer(exports, "extended-statistics");
}
}
#else /* ndef FEATURE_EXTENDED_STATISTICS */
if (!err) err = string_append(&s, "</td></tr>\n");
}
}
- if (*s != '\0')
+ if (!err && *s != '\0')
{
- if (!err) err = map(exports, "actions-filenames", 1, s, 0);
+ err = map(exports, "actions-filenames", 1, s, 0);
}
else
{
if (!err) err = string_append(&s, "</td></tr>\n");
}
}
- if (*s != '\0')
+ if (!err && *s != '\0')
{
- if (!err) err = map(exports, "re-filter-filenames", 1, s, 0);
+ err = map(exports, "re-filter-filenames", 1, s, 0);
}
else
{
1,
#else
0,
+#endif
+ },
+ {
+ "FEATURE_EXTENDED_STATISTICS",
+#ifdef FEATURE_EXTENDED_STATISTICS
+ 1,
+#else
+ 0,
+#endif
+ },
+ {
+ "FEATURE_PCRE_HOST_PATTERNS",
+#ifdef FEATURE_PCRE_HOST_PATTERNS
+ 1,
+#else
+ 0,
#endif
}
};