Merge branch 'master' of ssh://git.privoxy.org:23/git/privoxy
authorLee <ler762@users.sourceforge.net>
Mon, 14 Dec 2020 12:04:27 +0000 (07:04 -0500)
committerLee <ler762@users.sourceforge.net>
Mon, 14 Dec 2020 12:04:27 +0000 (07:04 -0500)
62 files changed:
GNUmakefile.in
INSTALL
README
TODO
actionlist.h
actions.c
cgi.c
cgiedit.c
cgisimple.c
configure.in
default.action.master
default.filter
doc/source/authors.sgml
doc/source/config.sgml
doc/source/developer-manual.sgml
doc/source/faq.sgml
doc/source/install.sgml
doc/source/p-config.sgml
doc/source/privoxy-man-page.sgml
doc/source/privoxy.sgml
doc/source/readme.sgml
doc/source/supported.sgml
doc/source/user-manual.sgml
doc/source/webserver/index.sgml
doc/webserver/developer-manual/documentation.html
doc/webserver/developer-manual/git.html
doc/webserver/developer-manual/index.html
doc/webserver/developer-manual/introduction.html
doc/webserver/developer-manual/newrelease.html
doc/webserver/developer-manual/testing.html
doc/webserver/faq/index.html
doc/webserver/faq/installation.html
doc/webserver/index.html
doc/webserver/privoxy-index.html
doc/webserver/team/index.html
doc/webserver/user-manual/actions-file.html
doc/webserver/user-manual/appendix.html
doc/webserver/user-manual/config.html
doc/webserver/user-manual/configuration.html
doc/webserver/user-manual/contact.html
doc/webserver/user-manual/copyright.html
doc/webserver/user-manual/filter-file.html
doc/webserver/user-manual/index.html
doc/webserver/user-manual/installation.html
doc/webserver/user-manual/introduction.html
doc/webserver/user-manual/quickstart.html
doc/webserver/user-manual/seealso.html
doc/webserver/user-manual/startup.html
doc/webserver/user-manual/templates.html
doc/webserver/user-manual/whatsnew.html
jbsockets.c
jcc.c
loadcfg.c
parsers.c
project.h
regression-tests.action
templates/blocked
templates/edit-actions-for-url
templates/edit-actions-for-url-string-filter [new file with mode: 0644]
templates/mod-support-and-service
tools/privoxy-regression-test.pl
urlmatch.c

index 2630d4c..f0b75ba 100644 (file)
@@ -1,6 +1,6 @@
 # Note:  GNUmakefile is built automatically from GNUmakefile.in
 #
-# Written by and Copyright (C) 2001-2018 members of the
+# Written by and Copyright (C) 2001-2020 members of the
 # Privoxy team. https://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
@@ -445,7 +445,8 @@ tarball-dist: dist-check clean clobber
 
        for i in `find . -type f -a -not \( -path "*/CVS*" -o -name ".*" \
        -o -path "*/debian/*" -o -path "*/actions/*" -o -name "*.php" -o \
-       -name "PACKAGERS" -o -path "*.git/*" \) | sort`; do \
+       -name "PACKAGERS" -o -path "*.git/*" \
+       -o -path "*/doc/webserver/feeds*" \) | sort`; do \
           files="$$files privoxy-$(VERSION)-$(CODE_STATUS)/$$i"; \
        done &&  \
        cd .. && $(TAR) -cvhf privoxy-$(VERSION)-$(CODE_STATUS)-src.tar $$files ; \
@@ -461,7 +462,8 @@ mtree-spec:
        $(ECHO) "#mtree 2.0" > $(MTREE_SPEC_FILE)
        for i in `find . -type f -a -not \( -path "*/CVS*" -o -name ".*" \
        -o -path "*/debian/*" -o -path "*/actions/*" -o -name "*.php" -o \
-       -name "PACKAGERS" -o -path "*.git/*" -o -name "*.spec" \) | env -i sort`; do \
+       -name "PACKAGERS" -o -path "*.git/*" -o -name "*.spec" \
+       -o -path "*/doc/webserver/feeds*" \) | env -i sort`; do \
           $(ECHO) "privoxy-$(VERSION)-$(CODE_STATUS)/$$i time=$(SOURCE_DATE_EPOCH) type=file uname=privoxy gname=privoxy mode=0555"; \
        done >> $(MTREE_SPEC_FILE)
        $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS)
@@ -587,7 +589,7 @@ dok-webserver:
        s/\.\d\. //;\
        s/__copy/&copy;/;\
        s@(<SUB)@<p style="text-align: center">\1@; s@(</SUB)@\1></p@;\
-       s@(Privoxy is a non-caching)@<img src="images/privoxy.png" align="right">\n\1@;' \
+       s@(Privoxy is a non-caching)@<img src="images/privoxy.png" align="right" alt="Privoxy logo">\n\1@;' \
      doc/webserver/index.html && $(RM) doc/webserver/*.bak
 
 # privoxy-index.html for local documentation:
diff --git a/INSTALL b/INSTALL
index 1d43f54..8e3c92f 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -39,8 +39,8 @@ compiler like gcc are required.
 
 When building from a source tarball, first unpack the source:
 
- tar xzvf privoxy-3.0.29-stable-src.tar.gz
- cd privoxy-3.0.29-stable
+ tar xzvf privoxy-3.0.30-beta-src.tar.gz
+ cd privoxy-3.0.30-beta
 
 To build the development version, you can get the source code by doing:
 
diff --git a/README b/README
index ff4efa6..890964c 100644 (file)
--- a/README
+++ b/README
@@ -32,8 +32,9 @@
  *
  *********************************************************************/
 
-This README is included with Privoxy 3.0.29. See https://www.privoxy.org/ for
-more information. The current code maturity level is "stable".
+This README is included with the development version of Privoxy 3.0.30. See
+https://www.privoxy.org/ for more information. The current code maturity level
+is "UNRELEASED", but seems stable to us :).
 
 -------------------------------------------------------------------------------
 
@@ -50,9 +51,9 @@ Privoxy is an associated project of Software in the Public Interest (SPI).
 
 Helping hands and donations are welcome:
 
-  * https://www.privoxy.org/faq/general.html#PARTICIPATE
+  * https://www.privoxy.org/participate
 
-  * https://www.privoxy.org/faq/general.html#DONATE
+  * https://www.privoxy.org/donate
 
 -------------------------------------------------------------------------------
 
@@ -104,16 +105,22 @@ try it with FTP or other protocols for the simple reason it does not work.
 The actions list can be configured via the web interface accessed via http://
 p.p/, as well other options.
 
+All configuration files are subject to unannounced changes during the
+development process.
+
 -------------------------------------------------------------------------------
 
 5. DOCUMENTATION
 
-There should be documentation in the 'doc' subdirectory. In particular, see the
-User Manual there, the FAQ, and those interested in Privoxy development, should
-look at developer-manual.
+There should be documentation in the 'doc' subdirectory, but it may not be
+completed at this point. In particular, see the User Manual there, the FAQ, and
+those interested in Privoxy development, should look at developer-manual.
 
-The source and configuration files are all well commented. The main
-configuration files are: 'config', 'default.action', and 'default.filter'.
+The most up to date source of information on the current development version,
+may still be either comments in the source code, or the included configuration
+files. The source and configuration files are all well commented. The main
+configuration files are: 'config', 'default.action', and 'default.filter' in
+the top-level source directory.
 
 Included documentation may vary according to platform and packager. All
 documentation is posted on https://www.privoxy.org, in case you don't have it,
diff --git a/TODO b/TODO
index f3a7f8d..4758341 100644 (file)
--- a/TODO
+++ b/TODO
@@ -12,7 +12,7 @@ https://www.privoxy.org/faq/general.html#DONATE
     (variables too). Could probably reuse large parts of Privoxy-Filter-Test.
     Note that there is currently work in progress to leverage curl's
     test suite, patches have been submitted upstream:
-    http://curl.haxx.se/mail/lib-2014-06/0070.html
+    https://curl.se/mail/lib-2014-06/0070.html
 
 3)  Fix some more XXX: comments.
 
@@ -441,6 +441,18 @@ https://www.privoxy.org/faq/general.html#DONATE
 
 168) Add a privacy policy.
 
+169) Preserve all relevant copyright and license statements in binary
+     packages we distribute.
+
+170) Serve the ca-cert-file through the CGI interface so client's
+     can conveniently import it (insecurely).
+
+171) Create a "view page using Privoxy" website where users can input
+     an URL and get a screenshot of a browser fetching the URL
+     through Privoxy.
+
+172) Create a public git repository for Privoxy-Filter-Test.
+
 ##########################################################################
 
 Hosting wish list (relevant for #53)
index 5f94ea4..6129bb0 100644 (file)
@@ -129,6 +129,7 @@ DEFINE_ACTION_STRING     ("set-image-blocker",          ACTION_IMAGE_BLOCKER,
 DEFINE_CGI_PARAM_RADIO   ("set-image-blocker",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER, "pattern", 1)
 DEFINE_CGI_PARAM_RADIO   ("set-image-blocker",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER, "blank", 0)
 DEFINE_CGI_PARAM_CUSTOM  ("set-image-blocker",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER,  CGI_PREFIX "send-banner?type=pattern")
+DEFINE_ACTION_MULTI      ("suppress-tag",               ACTION_MULTI_SUPPRESS_TAG)
 
 #if DEFINE_ACTION_ALIAS
 
index 775350a..7905231 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -1115,6 +1115,8 @@ static const char *filter_type_to_string(enum filter_type filter_type)
    case FT_EXTERNAL_CONTENT_FILTER:
       return "external content filter";
 #endif
+   case FT_SUPPRESS_TAG:
+      return "suppress tag filter";
    case FT_INVALID_FILTER:
       return "invalid filter type";
    }
diff --git a/cgi.c b/cgi.c
index 94f6875..53587e9 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -457,7 +457,7 @@ static int referrer_is_safe(const struct client_state *csp)
       log_error(LOG_LEVEL_ERROR, "Denying access to %s. No referrer found.",
          csp->http->url);
    }
-   else if ((0 == strncmp(referrer, CGI_PREFIX, sizeof(CGI_PREFIX)-1))
+   else if ((0 == strncmp(referrer, CGI_PREFIX_HTTP, sizeof(CGI_PREFIX_HTTP)-1))
 #ifdef FEATURE_HTTPS_INSPECTION
          || (0 == strncmp(referrer, CGI_PREFIX_HTTPS, sizeof(CGI_PREFIX_HTTPS)-1))
          || (0 == strncmp(referrer, alt_prefix_https, strlen(alt_prefix_https)))
@@ -2216,11 +2216,7 @@ struct map *default_exports(const struct client_state *csp, const char *caller)
    if (!err) err = map(exports, "homepage",      1, html_encode(HOME_PAGE_URL), 0);
    if (!err)
    {
-      err = map(exports, "default-cgi",   1, html_encode(
-#ifdef FEATURE_HTTPS_INSPECTION
-        client_use_ssl(csp) ? CGI_PREFIX_HTTPS :
-#endif
-        CGI_PREFIX), 0);
+      err = map(exports, "default-cgi",   1, html_encode(CGI_PREFIX), 0);
    }
    if (!err) err = map(exports, "menu",          1, make_menu(csp, caller), 0);
    if (!err) err = map(exports, "code-status",   1, CODE_STATUS, 1);
@@ -2235,11 +2231,7 @@ struct map *default_exports(const struct client_state *csp, const char *caller)
       /* Manual is delivered by Privoxy. */
       if (!err)
       {
-         err = map(exports, "user-manual", 1, html_encode(
-#ifdef FEATURE_HTTPS_INSPECTION
-           client_use_ssl(csp) ? CGI_PREFIX_HTTPS"user-manual/" :
-#endif
-           CGI_PREFIX"user-manual/"), 0);
+         err = map(exports, "user-manual", 1, html_encode(CGI_PREFIX"user-manual/"), 0);
       }
    }
    if (!err) err = map(exports, "actions-help-prefix", 1, ACTIONS_HELP_PREFIX ,1);
@@ -2457,11 +2449,7 @@ char *make_menu(const struct client_state *csp, const char *self)
           * the "blocked" template's JavaScript.
           */
          string_append(&result, "<li><a href=\"");
-         html_encoded_prefix = html_encode(
-#ifdef FEATURE_HTTPS_INSPECTION
-            client_use_ssl(csp) ? CGI_PREFIX_HTTPS :
-#endif
-            CGI_PREFIX);
+         html_encoded_prefix = html_encode(CGI_PREFIX);
          if (html_encoded_prefix == NULL)
          {
             return NULL;
index 64c8dc1..af22d07 100644 (file)
--- a/cgiedit.c
+++ b/cgiedit.c
@@ -248,6 +248,12 @@ static const struct filter_type_info filter_type_info[] =
       "E", "EXTERNAL-CONTENT-FILTER"
    },
 #endif
+   {
+      ACTION_MULTI_SUPPRESS_TAG,
+      "suppress-tag-params", "suppress-tag",
+      "suppress-tag-all", "suppress_tag_all",
+      "U", "SUPPRESS-TAG"
+   },
 };
 
 /* FIXME: Following non-static functions should be prototyped in .h or made static */
@@ -306,6 +312,10 @@ static jb_err actions_to_radio(struct map * exports,
                                const struct action_spec *action);
 static jb_err actions_from_radio(const struct map * parameters,
                                  struct action_spec *action);
+static jb_err action_render_string_filters_template(struct map * exports,
+                                       const struct action_spec *action,
+                                       const char* flter_template,
+                                       const struct filter_type_info *type);
 
 
 static jb_err map_copy_parameter_html(struct map *out,
@@ -2685,6 +2695,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
                                 const struct map *parameters)
 {
    struct map * exports;
+   char *filter_template;
    unsigned sectionid;
    struct editable_file * file;
    struct file_line * cur_line;
@@ -2734,12 +2745,24 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
       return JB_ERR_MEMORY;
    }
 
+   err = template_load(csp, &filter_template, "edit-actions-for-url-string-filter", 0);
+   if (err)
+   {
+       edit_free_file(file);
+       free_map(exports);
+       return cgi_error_no_template(csp, rsp, "edit-actions-for-url-string-filter");
+   }
+
    err = map(exports, "f", 1, stringify(file->identifier), 0);
    if (!err) err = map(exports, "v", 1, file->version_str, 1);
    if (!err) err = map(exports, "s", 1, url_encode(lookup(parameters, "s")), 0);
 
    if (!err) err = actions_to_radio(exports, cur_line->data.action);
 
+   if (!err) err = action_render_string_filters_template(exports, cur_line->data.action, filter_template,
+                                               &filter_type_info[FT_SUPPRESS_TAG]);
+   freez(filter_template);
+
    /*
     * XXX: Some browsers (at least IE6 and IE7) have an artificial URL
     * length limitation and ignore clicks on the Submit buttons if
@@ -2802,7 +2825,6 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
       /*
        * List available filters and their settings.
        */
-      char *filter_template;
       int filter_identifier = 0;
       char *prepared_templates[MAX_FILTER_TYPES];
 
@@ -2893,7 +2915,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
                      if (filter_line == NULL) err = JB_ERR_MEMORY;
                   }
                   if (!err) err = template_fill(&filter_line, line_exports);
-                  string_join(&prepared_templates[type], filter_line);
+                  if (!err) err = string_join(&prepared_templates[type], filter_line);
 
                   free_map(line_exports);
                }
@@ -3195,6 +3217,133 @@ jb_err cgi_edit_actions_submit(struct client_state *csp,
       }
    }
 
+   /* process existing suppress tag */
+   for (filter_identifier = 0; !err; filter_identifier++)
+   {
+      char key_value[30];
+      char key_name[30];
+      char old_name[30];
+      char key_type[30];
+      const char *name, *new_name;
+      char value; /*
+                   * Filter state. Valid states are: 'Y' (active),
+                   * 'N' (inactive) and 'X' (no change).
+                   * XXX: bad name.
+                   */
+      char type;  /*
+                   * Abbreviated filter type. Valid types are: 'U' (suppress tag).
+                   */
+      int multi_action_index = 0;
+
+      /* Generate the keys */
+      snprintf(key_value, sizeof(key_value), "string_filter_r%x", filter_identifier);
+      snprintf(key_name, sizeof(key_name), "string_filter_n%x", filter_identifier);
+      snprintf(old_name, sizeof(old_name), "string_filter_o%x", filter_identifier);
+      snprintf(key_type, sizeof(key_type), "string_filter_t%x", filter_identifier);
+
+      err = get_string_param(parameters, old_name, &name);
+      if (err) break;
+
+      if (name == NULL)
+      {
+         /* The filter identifier isn't present: we're done! */
+         break;
+      }
+
+      err = get_string_param(parameters, key_name, &new_name);
+      if (err) break;
+      if (new_name == NULL) new_name = name;
+
+      type = get_char_param(parameters, key_type);
+      switch (type)
+      {
+         case 'U':
+            multi_action_index = ACTION_MULTI_SUPPRESS_TAG;
+            break;
+         default:
+            log_error(LOG_LEVEL_ERROR,
+               "Unknown filter type: %c for filter %s. Filter ignored.", type, name);
+            continue;
+      }
+      assert(multi_action_index);
+
+      value = get_char_param(parameters, key_value);
+      if (value == 'X' || value == 'Y' || value == 'N')
+      {
+         list_remove_item(cur_line->data.action->multi_add[multi_action_index], name);
+         list_remove_item(cur_line->data.action->multi_remove[multi_action_index], name);
+      }
+
+      if (value == 'Y')
+      {
+         err = enlist(cur_line->data.action->multi_add[multi_action_index], new_name);
+      }
+      else if (value == 'N')
+      {
+         err = enlist(cur_line->data.action->multi_remove[multi_action_index], new_name);
+      }
+   }
+
+   /* process new string filters */
+   for (filter_identifier = 0; !err; filter_identifier++)
+   {
+      char key_value[30];
+      char key_name[30];
+      char key_type[30];
+      const char *name;
+      char value; /*
+                   * Filter state. Valid states are: 'Y' (active),
+                   * 'N' (inactive) and 'X' (no change).
+                   * XXX: bad name.
+                   */
+      char type;  /*
+                   * Abbreviated filter type. Valid types are: 'U' (suppress tag).
+                   */
+      int multi_action_index = 0;
+
+      /* Generate the keys */
+      snprintf(key_value, sizeof(key_value), "new_string_filter_r%x", filter_identifier);
+      snprintf(key_name, sizeof(key_name), "new_string_filter_n%x", filter_identifier);
+      snprintf(key_type, sizeof(key_type), "new_string_filter_t%x", filter_identifier);
+
+      err = get_string_param(parameters, key_name, &name);
+      if (err) break;
+
+      if (name == NULL)
+      {
+         /* The filter identifier isn't present: we've done! */
+         break;
+      }
+
+      type = get_char_param(parameters, key_type);
+      switch (type)
+      {
+         case 'U':
+            multi_action_index = ACTION_MULTI_SUPPRESS_TAG;
+            break;
+         default:
+            log_error(LOG_LEVEL_ERROR,
+               "Unknown filter type: %c for filter %s. Filter ignored.", type, name);
+            continue;
+      }
+      assert(multi_action_index);
+
+      value = get_char_param(parameters, key_value);
+      if (value == 'Y')
+      {
+         list_remove_item(cur_line->data.action->multi_add[multi_action_index], name);
+         if (!err) err = enlist(cur_line->data.action->multi_add[multi_action_index], name);
+         list_remove_item(cur_line->data.action->multi_remove[multi_action_index], name);
+      }
+      else if (value == 'N')
+      {
+         list_remove_item(cur_line->data.action->multi_add[multi_action_index], name);
+         list_remove_item(cur_line->data.action->multi_remove[multi_action_index], name);
+         if (!err) err = enlist(cur_line->data.action->multi_remove[multi_action_index], name);
+      }
+      /* nothing to do if the value is 'X' */
+   }
+
    if (err)
    {
       /* Out of memory */
@@ -4248,6 +4397,84 @@ static jb_err actions_to_radio(struct map * exports,
    return JB_ERR_OK;
 }
 
+/*********************************************************************
+ *
+ * Function    :  action_render_string_filters_template
+ *
+ * Description :  Converts a actionsfile entry into HTML template for actions with string
+ *                filters (currently SUPPRESS-TAG actions only)
+ *
+ * Parameters  :
+ *          1  :  exports = List of substitutions to add to.
+ *          2  :  action  = Action to read
+ *          3  :  filter_template  = template to fill
+ *          4  :  type  = filter type info for rendered values/macro name
+ *
+ * Returns     :  JB_ERR_OK     on success
+ *                JB_ERR_MEMORY on out-of-memory
+ *
+ *********************************************************************/
+static jb_err action_render_string_filters_template(struct map * exports,
+                                       const struct action_spec *action,
+                                       const char* filter_template,
+                                       const struct filter_type_info *type)
+{
+   jb_err err = JB_ERR_OK;
+   int filter_identifier = 0;
+   char *prepared_template = strdup("");
+
+   struct action_multi {
+       char radio;
+       struct list_entry *list;
+   };
+
+   struct action_multi desc[] = {
+       { 'y', action->multi_add[type->multi_action_index][0].first },
+       { 'n', action->multi_remove[type->multi_action_index][0].first }
+   };
+
+   for (int i=0; i < SZ(desc); ++i)
+   {
+      const char radio = desc[i].radio;
+      struct list_entry *entry = desc[i].list;
+      for (;(!err) && (entry != NULL); entry = entry->next)
+      {
+         char number[20];
+         struct map *line_exports;
+
+         /* Generate a unique serial number */
+         snprintf(number, sizeof(number), "%x", filter_identifier++);
+
+         line_exports = new_map();
+         if (line_exports == NULL)
+         {
+            err = JB_ERR_MEMORY;
+         }
+         else
+         {
+            char *filter_line;
+            if (!err) err = map(line_exports, "index", 1, number, 1);
+            if (!err) err = map(line_exports, "name",  1, entry->str, 1);
+            if (!err) err = map_radio(line_exports, "this-filter", "ynx", radio);
+            if (!err) err = map(line_exports, "filter-type", 1, type->type, 1);
+            if (!err) err = map(line_exports, "abbr-filter-type", 1, type->abbr_type, 1);
+            if (!err) err = map(line_exports, "anchor", 1, type->anchor, 1);
+            if (!err)
+            {
+               filter_line = strdup(filter_template);
+               if (filter_line == NULL) err = JB_ERR_MEMORY;
+            }
+            if (!err) err = template_fill(&filter_line, line_exports);
+            if (!err) err = string_join(&prepared_template, filter_line);
+
+            free_map(line_exports);
+        }
+      }
+   }
+   if (!err) map(exports, type->macro_name, 1, prepared_template, 1);
+   freez(prepared_template);
+   return err;
+}
 
 /*********************************************************************
  *
index e1a893b..3103034 100644 (file)
@@ -260,7 +260,13 @@ jb_err cgi_show_request(struct client_state *csp,
    }
 
    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;
index f732867..7e18567 100644 (file)
@@ -481,27 +481,6 @@ fi
 
 AC_SUBST(PTHREAD_ONLY)
 
-dnl =================================================================
-dnl On most platforms select() does not support fd numbers above
-dnl FD_SETSIZE, as a result Privoxy can't handle more than
-dnl approximately FD_SETSIZE/2 client connections.
-dnl On some platforms the value can be changed at compile time,
-dnl on others it's hardcoded and requires recompilation of the OS.
-dnl Only relevant if select() is actually being used.
-dnl =================================================================
-AC_ARG_WITH(fdsetsize,
- [  --with-fdsetsize=n  Optimistically redefine FD_SETSIZE with the intend to change the number of connections Privoxy can handle. Dangerous if the platform doesn't support this. Pointless if Privoxy can use poll() instead of select().],
- [
-   if test "x$withval" != "xyes"; then
-     AC_DEFINE_UNQUOTED(FD_SETSIZE,$with_fdsetsize,[Relevant for select(). Not honoured by all OS.])
-     echo "Redefining FD_SETSIZE to $with_fdsetsize."
-     AC_MSG_WARN(On platforms that don't support FD_SETSIZE redefinition it may cause memory corruption.)
-   else
-     AC_MSG_ERROR(--with-fdsetsize used without value)
-   fi
-   ]
-)
-
 dnl =================================================================
 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
 dnl gmtime and localtime
index 387fd85..007c58b 100644 (file)
@@ -2008,6 +2008,8 @@ adaway.org/
 belco24.de/
 # URL = https://www.tagesschau.de/multimedia/bilder/banner-zak-kostopoulos-101~_v-mittel16x9.jpg
 .tagesschau.de/
+# URL = https://metrics.sr.ht/graph
+metrics.sr.ht/
 
 
 #############################################################################
index e8bc150..f266e15 100644 (file)
@@ -457,37 +457,37 @@ FILTER: crude-parental Crude parental filtering. Note that this filter doesn't w
 # (Note #2: Is 'sex' a rude word?!)
 
 s%^.*(?<!middle)(?<!sus)(?<!es)sex.*$%<html><head><title>Blocked</title></head><body>\
-<h3>Blocked by Privoxy's crude-parental filter due to possible adult content.</h3></body></html>%is
+<h3>Blocked by <a href="http://p.p/">Privoxy's</a> crude-parental filter due to possible adult content.</h3></body></html>%is
 
 s+^.*warez.*$+<html><head><title>No Warez</title></head><body><h3>You're not searching for illegal stuff, are you?</h3></body></html>+is
 
 # Remove by description
-s/^.*\
+s@^.*\
 (?:(suck|lick|tongue|rub|fuck|fingering|finger|chicks?)\s*)?\
 (?:(her|your|my|hard|with|big|wet|tight|pink|hot|moist|young|teen)\s*)+\
 (dicks?|penis|cocks?|balls?|tits?|pussy|cunt|clit|ass|mouth).*$\
-/This page has been blocked by Privoxy's crude-parental content filter\
-/is
+@This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental content filter\
+@is
 
 #Remove by link text
-s/^.*\
+s@^.*\
 (download|broadband|view|watch|free|get|extreem)?\s*\
 (sex|xxx|porn|cumshot|fuck(ing|s)?|anal|ass|asian|adult|Amateur|org(y|ies)|close ups?|hand?job|nail(ed)?)+\s*\
 (movies?|pics?|videos?|dvds?|dvd's|links?).*$\
-/This page has been blocked by Privoxy's crude-parental content filter\
-/is
+@This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental content filter\
+@is
 
 #Remove by age disclaimer
-s/^.*\
+s@^.*\
 (models?|chicks?|girls?|women|persons)\s*\
 (who|are|were)+ (over|at least) (16|18|21) years (old|of age).*$\
-/This page has been blocked by Privoxy's crude-parental content filter\
-/is
+@This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental content filter\
+@is
 
 #Remove by regulations
-s/^.*(Section 2257|18 U.?S.?C.? 2257).*$\
-/This page has been blocked by Privoxy's crude-parental content filter\
-/is
+s@^.*(Section 2257|18 U.?S.?C.? 2257).*$\
+@This page has been blocked by <a href="http://p.p/">Privoxy's</a> crude-parental content filter\
+@is
 
 
 #################################################################################
index e04ac1f..bd4562d 100644 (file)
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!entity % dummy "IGNORE">
 <!entity authors SYSTEM "p-authors.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity % p-text "INCLUDE">           <!-- define we are a text only doc -->
 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
 ]>
index 426b6e9..b1ac73c 100644 (file)
@@ -1,9 +1,9 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
 <!entity % dummy "IGNORE">
 <!entity config SYSTEM "p-config.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
 <!entity % user-man "IGNORE">
 <!entity % config-file "IGNORE">
 <!entity  my-app "<application>Privoxy</application>">
index 90bb6ae..f25a280 100644 (file)
@@ -5,10 +5,10 @@
 <!entity p-intro SYSTEM "privoxy.sgml">
 <!entity history SYSTEM "history.sgml">
 <!entity seealso SYSTEM "seealso.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % seealso-extra "INCLUDE"> <!-- extra stuff from seealso.sgml    -->
@@ -110,8 +110,8 @@ Hal.
  -->
     <para>
      <application>Privoxy</application>, as an heir to
-     <application>Junkbuster</application>, is a Free Software project
-     and the code is licensed under the GNU General Public License version 2.
+     <application>Junkbuster</application>, is a <ulink
+      url="https://www.privoxy.org/user-manual/copyright.html">Free Software</ulink> project.
      As such, <application>Privoxy</application> development is potentially open
      to anyone who has the time, knowledge, and desire to contribute
      in any capacity. Our goals are simply to continue the mission,
@@ -188,6 +188,10 @@ Hal.
        such changes are fully tested ought they be pushed back to the central
        repository master branch.
      </para>
+     <para>
+       Before pushing stuff, please rebase it on a current master so we get
+       an uncomplicated commit history. Avoid merges where possible.
+     </para>
      <!--
      <para>
        Branches are used to fork a sub-development path from the main trunk.
@@ -266,7 +270,9 @@ Hal.
             Note that near a major public release, we get more cautious.
             There is always the possibility to submit a patch to the <ulink
             url="https://sourceforge.net/p/ijbswa/patches/">patch
-            tracker</ulink> instead.
+            tracker</ulink> or the <ulink
+             url="https://lists.privoxy.org/mailman/listinfo/privoxy-devel">privoxy-devel mailing list</ulink>
+            instead.
           </para>
          </listitem>
         </itemizedlist>
@@ -380,7 +386,7 @@ Hal.
      <orderedlist numeration="arabic">
       <listitem><para>
         First, build the docs by running <computeroutput>make
-        dok</computeroutput>.
+        dok dok-tidy</computeroutput>.
       </para></listitem>
       <listitem><para>
         Run <computeroutput>make webserver</computeroutput> which copies all
@@ -611,7 +617,7 @@ Hal.
 
  <!--   ~~~~~       New section      ~~~~~     -->
 
- <sect2><title>Privoxy Custom Entities</title>
+ <sect2 id="custom-entities"><title>Privoxy Custom Entities</title>
  <para>
   <application>Privoxy</application> documentation is using
   a number of customized <quote>entities</quote> to facilitate
@@ -1966,6 +1972,19 @@ Install the rpm. Any error messages?
     </sect2>
     <!-- XXX: Document how to write test reports and where to send them -->
 
+    <!--   ~~~~~       New section      ~~~~~     -->
+    <sect2 id="privoxy-regression-test"><title>Testing with <application>Privoxy-Regression-Test</application></title>
+     <para>
+       If you compiled, packaged or merely installed Privoxy, it is recommended to run
+       <application>Privoxy-Regression-Test</application> to verify that at least
+       the tested parts of <application>Privoxy</application> are working as expected.
+     </para>
+     <para>
+       This is actually pretty easy. For details, please see
+       <command>perldoc privoxy-regression-test.pl</command>.
+     </para>
+    </sect2>
+
     <!--   ~~~~~       New section      ~~~~~     -->
     <sect2 id="fuzzing"><title>Fuzzing Privoxy</title>
      <para>
index 098538a..a5b3fbc 100644 (file)
@@ -8,10 +8,10 @@
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-supp-userman "INCLUDE"> <!-- Include all from supported.sgml -->
index 9497ba8..ad3d403 100644 (file)
@@ -1,10 +1,10 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!entity % dummy "IGNORE">
 <!entity buildsource SYSTEM "buildsource.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-stable "INCLUDE">
-<!entity % p-not-stable "IGNORE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-stable "IGNORE">
+<!entity % p-not-stable "INCLUDE">
 <!entity % p-alpha "IGNORE">
 <!entity % p-beta "IGNORE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
index 1557a6f..83ee131 100644 (file)
@@ -4080,9 +4080,9 @@ forward-socks4, forward-socks4a, forward-socks5 and forward-socks5t</title>
   <term>Notes:</term>
   <listitem>
    <para>
-    This directive specifies the name of the CA key file
-    in ".pem" format. See the <ulink url="#CA-CERT-FILE">ca-cert-file</ulink>
-    for a command to generate it.
+    This directive specifies the name of the CA key file in ".pem" format.
+    The <ulink url="#CA-CERT-FILE">ca-cert-file section</ulink> contains
+    a command to generate it.
    </para>
   </listitem>
  </varlistentry>
index 556225f..3fefa2e 100644 (file)
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity authors SYSTEM "p-authors.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity % p-text "IGNORE">           <!-- define we are not a text only doc -->
 <!entity % p-authors-formal "IGNORE"> <!-- exclude additional formatting      -->
 <!entity my-copy "(C)">               <!-- db2man barfs on copyright symbol  -->
index ba54543..53d3706 100644 (file)
  <itemizedlist>
   <listitem>
     <para>
-      <ulink url="https://www.privoxy.org/faq/general.html#PARTICIPATE">
-                  https://www.privoxy.org/faq/general.html#PARTICIPATE</ulink>
+      <ulink url="https://www.privoxy.org/participate">https://www.privoxy.org/participate</ulink>
     </para>
   </listitem>
   <listitem>
     <para>
-     <ulink url="https://www.privoxy.org/faq/general.html#DONATE">
-                 https://www.privoxy.org/faq/general.html#DONATE</ulink>
+      <ulink url="https://www.privoxy.org/donate">https://www.privoxy.org/donate</ulink>
     </para>
   </listitem>
  </itemizedlist>
index ae87711..9ff9b2a 100644 (file)
@@ -4,10 +4,10 @@
 <!entity p-intro SYSTEM "privoxy.sgml">
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity buildsource SYSTEM "buildsource.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
 <!entity % p-doc "IGNORE">         <!-- and never a text doc             -->
 <!entity % p-readme "INCLUDE">     <!-- all your README belong to us     -->
index 16e5ee0..420c065 100644 (file)
@@ -23,7 +23,7 @@
 -->
 <para>
  At present, <application>Privoxy</application> is known to run on
- Windows 95 and later versions (98, ME, 2000, XP, Vista, Windows 7 etc.),
+ Windows 95 and later versions (98, ME, 2000, XP, Vista, Windows 7, Windows 10 etc.),
  GNU/Linux (RedHat, SuSE, Debian, Fedora, Gentoo, Slackware and others),
  Mac OS X (10.4 and upwards on PPC and Intel processors),
  Haiku,
index d1b597f..cb1243d 100644 (file)
 <!entity p-authors SYSTEM "p-authors.sgml">
 <!entity config SYSTEM "p-config.sgml">
 <!entity changelog SYSTEM "changelog.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-readme "IGNORE">
@@ -5112,7 +5112,7 @@ new action
  <varlistentry>
   <term>Example usage:</term>
   <listitem>
-     <screen>+hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}</screen>
+     <screen>+hide-user-agent{Mozilla/5.0 (X11; ElectroBSD i386; rv:78.0) Gecko/20100101 Firefox/78.0}</screen>
   </listitem>
  </varlistentry>
 </variablelist>
@@ -5936,6 +5936,63 @@ TAG:^image/
 </sect3>
 
 
+<!--   ~~~~~       New section      ~~~~~     -->
+<sect3 renderas="sect4" id="suppress-tag">
+<title>suppress-tag</title>
+
+<variablelist>
+ <varlistentry>
+  <term>Typical use:</term>
+  <listitem>
+   <para>
+   Suppress client or server tag.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term>Effect:</term>
+  <listitem>
+   <para>
+    Server or client tags to which this action applies are not added to the request,
+    thus making all actions that are specific to these request tags inactive.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term>Type:</term>
+  <!-- boolean, parameterized, Multi-value -->
+  <listitem>
+   <para>Multi-value.</para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term>Parameter:</term>
+  <listitem>
+   <para>
+    The result tag of a server-header or client-header tagger, as defined in one of the
+    <link linkend="filter-file">filter files</link>.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term>Example usage (section):</term>
+  <listitem>
+     <screen>
+# Suppress tag produced by range-requests client-header tagger for requests coming from address 10.0.0.1
+{+suppress-tag{RANGE-REQUEST}}
+TAG:^IP-ADDRESS: 10\.0\.0\.1$
+</screen>
+  </listitem>
+ </varlistentry>
+
+</variablelist>
+</sect3>
+
+
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="session-cookies-only">
 <title>session-cookies-only</title>
index 46ac9a6..21d4b0b 100644 (file)
@@ -5,10 +5,10 @@
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
-<!entity p-version "3.0.29">
-<!entity p-status "stable">
-<!entity % p-not-stable "IGNORE">
-<!entity % p-stable "INCLUDE">
+<!entity p-version "3.0.30">
+<!entity p-status "UNRELEASED">
+<!entity % p-not-stable "INCLUDE">
+<!entity % p-stable "IGNORE">
 <!entity  my-copy "&copy;">        <!-- kludge for docbook2man            -->
 <!entity % p-homepage "IGNORE">    <!-- toggle for webserver index.html   -->
 <!entity % p-index "IGNORE">       <!-- toggle for local doc index        -->
index 86a725a..be98dfc 100644 (file)
@@ -57,7 +57,7 @@
     <p>How do you update the webserver (i.e. the pages on privoxy.org)?</p>
     <ol type="1">
       <li>
-        <p>First, build the docs by running <samp class="COMPUTEROUTPUT">make dok</samp>.</p>
+        <p>First, build the docs by running <samp class="COMPUTEROUTPUT">make dok dok-tidy</samp>.</p>
       </li>
       <li>
         <p>Run <samp class="COMPUTEROUTPUT">make webserver</samp> which copies all files from <samp class=
       </ul>
     </div>
     <div class="SECT2">
-      <h2 class="SECT2"><a name="AEN205" id="AEN205">3.3. Privoxy Custom Entities</a></h2>
+      <h2 class="SECT2"><a name="CUSTOM-ENTITIES" id="CUSTOM-ENTITIES">3.3. Privoxy Custom Entities</a></h2>
       <p><span class="APPLICATION">Privoxy</span> documentation is using a number of customized <span class=
       "QUOTE">"entities"</span> to facilitate documentation maintenance.</p>
       <p>We are using a set of <span class="QUOTE">"boilerplate"</span> files with generic text, that is used by
             <tbody>
               <tr>
                 <td><span class="emphasis"><i class="EMPHASIS">p-version</i></span>: the <span class=
-                "APPLICATION">Privoxy</span> version string, e.g. <span class="QUOTE">"3.0.29"</span>.</td>
+                "APPLICATION">Privoxy</span> version string, e.g. <span class="QUOTE">"3.0.30"</span>.</td>
               </tr>
               <tr>
                 <td><span class="emphasis"><i class="EMPHASIS">p-status</i></span>: the project status, either
index 8360a0a..6e4e77a 100644 (file)
@@ -48,6 +48,8 @@
       <p>Whilst the central repository contains only the master branch, developers are of course free to create
       branches in their local repositories as they develop features, fixes, or update the target-dependent tools. Only
       once such changes are fully tested ought they be pushed back to the central repository master branch.</p>
+      <p>Before pushing stuff, please rebase it on a current master so we get an uncomplicated commit history. Avoid
+      merges where possible.</p>
       <p>At one time there were two distinct branches: stable and unstable. The more drastic changes were to be in the
       unstable branch. These branches have now been merged to minimize time and effort of maintaining two branches.</p>
     </div>
@@ -81,7 +83,9 @@
         </li>
         <li>
           <p>Note that near a major public release, we get more cautious. There is always the possibility to submit a
-          patch to the <a href="https://sourceforge.net/p/ijbswa/patches/" target="_top">patch tracker</a> instead.</p>
+          patch to the <a href="https://sourceforge.net/p/ijbswa/patches/" target="_top">patch tracker</a> or the
+          <a href="https://lists.privoxy.org/mailman/listinfo/privoxy-devel" target="_top">privoxy-devel mailing
+          list</a> instead.</p>
         </li>
       </ul>
     </div>
index 5f206b0..e504f74 100644 (file)
@@ -22,7 +22,7 @@
           helpful!) reading for anyone who wants to join the team. Note that it's currently out of date and may not be
           entirely correct. As always, patches are welcome.</p>
           <p>Please note that this document is constantly evolving. This copy represents the state at the release of
-          version 3.0.29. You can find the latest version of the this manual at <a href=
+          version 3.0.30. You can find the latest version of the this manual at <a href=
           "https://www.privoxy.org/developer-manual/" target="_top">https://www.privoxy.org/developer-manual/</a>.
           Please have a look at the <a href="https://www.privoxy.org/user-manual/contact.html" target="_top">contact
           section in the user manual</a> if you are interested in contacting the developers.</p>
@@ -53,7 +53,7 @@
             <dt>3.1. <a href="documentation.html#SGML">Quickstart to Docbook and SGML</a></dt>
             <dt>3.2. <a href="documentation.html#DOCSTYLE"><span class="APPLICATION">Privoxy</span> Documentation
             Style</a></dt>
-            <dt>3.3. <a href="documentation.html#AEN205">Privoxy Custom Entities</a></dt>
+            <dt>3.3. <a href="documentation.html#CUSTOM-ENTITIES">Privoxy Custom Entities</a></dt>
           </dl>
         </dd>
         <dt>4. <a href="coding.html">Coding Guidelines</a></dt>
         <dd>
           <dl>
             <dt>5.1. <a href="testing.html#TESTING-PLAN">Testplan for releases</a></dt>
-            <dt>5.2. <a href="testing.html#FUZZING">Fuzzing Privoxy</a></dt>
+            <dt>5.2. <a href="testing.html#PRIVOXY-REGRESSION-TEST">Testing with <span class=
+            "APPLICATION">Privoxy-Regression-Test</span></a></dt>
+            <dt>5.3. <a href="testing.html#FUZZING">Fuzzing Privoxy</a></dt>
           </dl>
         </dd>
         <dt>6. <a href="newrelease.html">Releasing a New Version</a></dt>
index 1c81cd6..c6f4171 100644 (file)
   </div>
   <div class="SECT1">
     <h1 class="SECT1"><a name="INTRODUCTION" id="INTRODUCTION">1. Introduction</a></h1>
-    <p><span class="APPLICATION">Privoxy</span>, as an heir to <span class="APPLICATION">Junkbuster</span>, is a Free
-    Software project and the code is licensed under the GNU General Public License version 2. As such, <span class=
-    "APPLICATION">Privoxy</span> development is potentially open to anyone who has the time, knowledge, and desire to
-    contribute in any capacity. Our goals are simply to continue the mission, to improve <span class=
+    <p><span class="APPLICATION">Privoxy</span>, as an heir to <span class="APPLICATION">Junkbuster</span>, is a
+    <a href="https://www.privoxy.org/user-manual/copyright.html" target="_top">Free Software</a> project. As such,
+    <span class="APPLICATION">Privoxy</span> development is potentially open to anyone who has the time, knowledge, and
+    desire to contribute in any capacity. Our goals are simply to continue the mission, to improve <span class=
     "APPLICATION">Privoxy</span>, and to make it available to as wide an audience as possible.</p>
     <p>One does not have to be a programmer to contribute. Packaging, testing, documenting and porting, are all
     important jobs as well.</p>
index 7d4ed88..6d630d2 100644 (file)
@@ -493,7 +493,7 @@ for-privoxy-version=3.0.11</pre>
         <table border="0" bgcolor="#E0E0E0" width="100%">
           <tr>
             <td>
-              <pre class="PROGRAMLISTING">  debchange -v 3.0.29-stable-1 "New upstream version"</pre>
+              <pre class="PROGRAMLISTING">  debchange -v 3.0.30-UNRELEASED-1 "New upstream version"</pre>
             </td>
           </tr>
         </table>
@@ -505,7 +505,7 @@ for-privoxy-version=3.0.11</pre>
             </td>
           </tr>
         </table>
-        <p>This will create <tt class="FILENAME">../privoxy_3.0.29-stable-1_i386.deb</tt> which can be uploaded. To
+        <p>This will create <tt class="FILENAME">../privoxy_3.0.30-UNRELEASED-1_i386.deb</tt> which can be uploaded. To
         upload the package to Sourceforge, simply issue</p>
         <table border="0" bgcolor="#E0E0E0" width="100%">
           <tr>
@@ -628,7 +628,7 @@ for-privoxy-version=3.0.11</pre>
       "_top">https://sourceforge.net/project/admin/editpackages.php?group_id=11118</a>, making sure you are logged in.
       Find your target platform in the second column, and click <tt class="LITERAL">Add Release</tt>. You will then
       need to create a new release for your package, using the format of <tt class="LITERAL">$VERSION
-      ($CODE_STATUS)</tt>, e.g. <span class="emphasis"><i class="EMPHASIS">3.0.29 (beta)</i></span>.</p>
+      ($CODE_STATUS)</tt>, e.g. <span class="emphasis"><i class="EMPHASIS">3.0.30 (beta)</i></span>.</p>
       <p>Now just follow the prompts. Be sure to add any appropriate Release notes. You should see your freshly
       uploaded packages in <span class="QUOTE">"Step 2. Add Files To This Release"</span>. Check the appropriate
       box(es). Remember at each step to hit the <span class="QUOTE">"Refresh/Submit"</span> buttons! You should now see
index 46c398c..fae9e65 100644 (file)
       </ol>
     </div>
     <div class="SECT2">
-      <h2 class="SECT2"><a name="FUZZING" id="FUZZING">5.2. Fuzzing Privoxy</a></h2>
+      <h2 class="SECT2"><a name="PRIVOXY-REGRESSION-TEST" id="PRIVOXY-REGRESSION-TEST">5.2. Testing with <span class=
+      "APPLICATION">Privoxy-Regression-Test</span></a></h2>
+      <p>If you compiled, packaged or merely installed Privoxy, it is recommended to run <span class=
+      "APPLICATION">Privoxy-Regression-Test</span> to verify that at least the tested parts of <span class=
+      "APPLICATION">Privoxy</span> are working as expected.</p>
+      <p>This is actually pretty easy. For details, please see <b class="COMMAND">perldoc
+      privoxy-regression-test.pl</b>.</p>
+    </div>
+    <div class="SECT2">
+      <h2 class="SECT2"><a name="FUZZING" id="FUZZING">5.3. Fuzzing Privoxy</a></h2>
       <p>To make fuzzing more convenient, Privoxy can be configured with --enable-fuzz which will result in the --fuzz
       option becoming available.</p>
       <p>Example (tested on ElectroBSD):</p>
index 8358b84..318e567 100644 (file)
           <p>Helping hands and donations are welcome:</p>
           <ul>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#PARTICIPATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#PARTICIPATE</a></p>
+              <p><a href="https://www.privoxy.org/participate" target=
+              "_top">https://www.privoxy.org/participate</a></p>
             </li>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#DONATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#DONATE</a></p>
+              <p><a href="https://www.privoxy.org/donate" target="_top">https://www.privoxy.org/donate</a></p>
             </li>
           </ul>
           <p>Please note that this document is a work in progress. This copy represents the state at the release of
-          version 3.0.29. You can find the latest version of the document at <a href="https://www.privoxy.org/faq/"
+          version 3.0.30. You can find the latest version of the document at <a href="https://www.privoxy.org/faq/"
           target="_top">https://www.privoxy.org/faq/</a>. Please see the <a href="contact.html">Contact section</a> if
           you want to contact the developers.</p>
         </div>
index ee82fdc..e47a94b 100644 (file)
@@ -38,9 +38,9 @@
     <div class="SECT2">
       <h3 class="SECT2"><a name="WHICHOS" id="WHICHOS">2.2. Which operating systems are supported?</a></h3>
       <p>At present, <span class="APPLICATION">Privoxy</span> is known to run on Windows 95 and later versions (98, ME,
-      2000, XP, Vista, Windows 7 etc.), GNU/Linux (RedHat, SuSE, Debian, Fedora, Gentoo, Slackware and others), Mac OS
-      X (10.4 and upwards on PPC and Intel processors), Haiku, DragonFly, ElectroBSD, FreeBSD, NetBSD, OpenBSD,
-      Solaris, and various other flavors of Unix.</p>
+      2000, XP, Vista, Windows 7, Windows 10 etc.), GNU/Linux (RedHat, SuSE, Debian, Fedora, Gentoo, Slackware and
+      others), Mac OS X (10.4 and upwards on PPC and Intel processors), Haiku, DragonFly, ElectroBSD, FreeBSD, NetBSD,
+      OpenBSD, Solaris, and various other flavors of Unix.</p>
       <p>But any operating system that runs TCP/IP, can conceivably take advantage of <span class=
       "APPLICATION">Privoxy</span> in a networked situation where <span class="APPLICATION">Privoxy</span> would run as
       a server on a LAN gateway. Then only the <span class="QUOTE">"gateway"</span> needs to be running one of the
index b0d23a1..81feb1d 100644 (file)
       <div>
         <div class="ABSTRACT">
           <a name="AEN4" id="AEN4"></a>
-          <p><img src="images/privoxy.png" align="right"> Privoxy is a non-caching web proxy with advanced filtering
-          capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and
-          removing ads and other obnoxious Internet junk. Privoxy has a flexible configuration and can be customized to
-          suit individual needs and tastes. It has application for both stand-alone systems and multi-user
-          networks.</p>
+          <p><img src="images/privoxy.png" align="right" alt="Privoxy logo"> Privoxy is a non-caching web proxy with
+          advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling
+          access, and removing ads and other obnoxious Internet junk. Privoxy has a flexible configuration and can be
+          customized to suit individual needs and tastes. It has application for both stand-alone systems and
+          multi-user networks.</p>
           <p>Privoxy is Free Software and licensed under the GNU GPLv2 or later.</p>
           <p>Privoxy is an associated project of Software in the Public Interest (SPI).</p>
           <p>Helping hands and donations are welcome:</p>
           <ul>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#PARTICIPATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#PARTICIPATE</a></p>
+              <p><a href="https://www.privoxy.org/participate" target=
+              "_top">https://www.privoxy.org/participate</a></p>
             </li>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#DONATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#DONATE</a></p>
+              <p><a href="https://www.privoxy.org/donate" target="_top">https://www.privoxy.org/donate</a></p>
             </li>
           </ul>
-          <p>The most recent release is <a href="announce.txt" target="_top">3.0.29 (stable)</a>.</p>
+          <p>The most recent release is <a href="announce.txt" target="_top">3.0.30 (UNRELEASED)</a>.</p>
         </div>
       </div>
       <hr>
index cfc0ff4..d0513c7 100644 (file)
@@ -12,7 +12,7 @@
   <div class="ARTICLE">
     <div class="TITLEPAGE">
       <h1 class="TITLE"><a name="AEN2" id="AEN2">Privoxy - The Privacy Enhancing Proxy</a></h1>
-      <h2 class="SUBTITLE">Project Index Page v3.0.29</h2>
+      <h2 class="SUBTITLE">Project Index Page v3.0.30</h2>
       <div>
         <div class="ABSTRACT">
           <a name="AEN5" id="AEN5"></a>
           <p>Helping hands and donations are welcome:</p>
           <ul>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#PARTICIPATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#PARTICIPATE</a></p>
+              <p><a href="https://www.privoxy.org/participate" target=
+              "_top">https://www.privoxy.org/participate</a></p>
             </li>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#DONATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#DONATE</a></p>
+              <p><a href="https://www.privoxy.org/donate" target="_top">https://www.privoxy.org/donate</a></p>
             </li>
           </ul>
         </div>
index 86d156b..318fc7b 100644 (file)
       "Andreas Oesterhelt"></a></td>
       <td><a href="04rodney.jpg"><img src="04rodney_t.jpg" width="80" height="80" border="0" title=
       "Rodney Stromlund"></a></td>
-    </tr>
-    <tr>
       <td><a href="05david.jpg"><img src="05david_t.jpg" width="80" height="80" border="0" title=
       "David Schmidt"></a></td>
-      <td><a href="06member.jpg"><img src="06member_t.jpg" width="80" height="80" border="0" title="N/A"></a></td>
-      <td><a href="07member.jpg"><img src="07member_t.jpg" width="80" height="80" border="0" title="N/A"></a></td>
-      <td><a href="08member.jpg"><img src="08member_t.jpg" width="80" height="80" border="0" title="N/A"></a></td>
     </tr>
   </table>
 </body>
index 44a6f9f..5fa6f7a 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Actions Files</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="The Main Configuration File" href="config.html">
   <link rel="NEXT" title="Filter Files" href="filter-file.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="config.html" accesskey="P">Prev</a></td>
@@ -2493,7 +2493,8 @@ nasty-banner-server.example.com/junk.cgi\?output=trash</pre>
               <table border="0" bgcolor="#E0E0E0" width="90%">
                 <tr>
                   <td>
-                    <pre class="SCREEN">+hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}</pre>
+                    <pre class=
+                    "SCREEN">+hide-user-agent{Mozilla/5.0 (X11; ElectroBSD i386; rv:78.0) Gecko/20100101 Firefox/78.0}</pre>
                   </td>
                 </tr>
               </table>
@@ -3037,7 +3038,45 @@ TAG:^image/</pre>
         </div>
       </div>
       <div class="SECT3">
-        <h4 class="SECT3"><a name="SESSION-COOKIES-ONLY" id="SESSION-COOKIES-ONLY">8.5.37.
+        <h4 class="SECT3"><a name="SUPPRESS-TAG" id="SUPPRESS-TAG">8.5.37. suppress-tag</a></h4>
+        <div class="VARIABLELIST">
+          <dl>
+            <dt>Typical use:</dt>
+            <dd>
+              <p>Suppress client or server tag.</p>
+            </dd>
+            <dt>Effect:</dt>
+            <dd>
+              <p>Server or client tags to which this action applies are not added to the request, thus making all
+              actions that are specific to these request tags inactive.</p>
+            </dd>
+            <dt>Type:</dt>
+            <dd>
+              <p>Multi-value.</p>
+            </dd>
+            <dt>Parameter:</dt>
+            <dd>
+              <p>The result tag of a server-header or client-header tagger, as defined in one of the <a href=
+              "filter-file.html">filter files</a>.</p>
+            </dd>
+            <dt>Example usage (section):</dt>
+            <dd>
+              <table border="0" bgcolor="#E0E0E0" width="90%">
+                <tr>
+                  <td>
+                    <pre class=
+                    "SCREEN"># Suppress tag produced by range-requests client-header tagger for requests coming from address 10.0.0.1
+{+suppress-tag{RANGE-REQUEST}}
+TAG:^IP-ADDRESS: 10\.0\.0\.1$</pre>
+                  </td>
+                </tr>
+              </table>
+            </dd>
+          </dl>
+        </div>
+      </div>
+      <div class="SECT3">
+        <h4 class="SECT3"><a name="SESSION-COOKIES-ONLY" id="SESSION-COOKIES-ONLY">8.5.38.
         session-cookies-only</a></h4>
         <div class="VARIABLELIST">
           <dl>
@@ -3099,7 +3138,7 @@ TAG:^image/</pre>
         </div>
       </div>
       <div class="SECT3">
-        <h4 class="SECT3"><a name="SET-IMAGE-BLOCKER" id="SET-IMAGE-BLOCKER">8.5.38. set-image-blocker</a></h4>
+        <h4 class="SECT3"><a name="SET-IMAGE-BLOCKER" id="SET-IMAGE-BLOCKER">8.5.39. set-image-blocker</a></h4>
         <div class="VARIABLELIST">
           <dl>
             <dt>Typical use:</dt>
@@ -3188,7 +3227,7 @@ TAG:^image/</pre>
         </div>
       </div>
       <div class="SECT3">
-        <h3 class="SECT3"><a name="SUMMARY" id="SUMMARY">8.5.39. Summary</a></h3>
+        <h3 class="SECT3"><a name="SUMMARY" id="SUMMARY">8.5.40. Summary</a></h3>
         <p>Note that many of these actions have the potential to cause a page to misbehave, possibly even not to
         display at all. There are many ways a site designer may choose to design his site, and what HTTP header
         content, and other criteria, he may depend on. There is no way to have hard and fast rules for all sites. See
index 919ab35..6fb335b 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Appendix</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="See Also" href="seealso.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -14,7 +14,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="seealso.html" accesskey="P">Prev</a></td>
       these. If not, you will get a friendly error message. Internet access is not necessary either.</p>
       <ul>
         <li>
-          <p>Privoxy main page:</p><a name="AEN6380" id="AEN6380"></a>
+          <p>Privoxy main page:</p><a name="AEN6409" id="AEN6409"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/" target="_top">http://config.privoxy.org/</a></p>
           </blockquote>
           "APPLICATION">Privoxy</span>)</p>
         </li>
         <li>
-          <p>View and toggle client tags:</p><a name="AEN6388" id="AEN6388"></a>
+          <p>View and toggle client tags:</p><a name="AEN6417" id="AEN6417"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/client-tags" target=
             "_top">http://config.privoxy.org/client-tags</a></p>
         </li>
         <li>
           <p>Show information about the current configuration, including viewing and editing of actions
-          files:</p><a name="AEN6393" id="AEN6393"></a>
+          files:</p><a name="AEN6422" id="AEN6422"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/show-status" target=
             "_top">http://config.privoxy.org/show-status</a></p>
           </blockquote>
         </li>
         <li>
-          <p>Show the browser's request headers:</p><a name="AEN6398" id="AEN6398"></a>
+          <p>Show the browser's request headers:</p><a name="AEN6427" id="AEN6427"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/show-request" target=
             "_top">http://config.privoxy.org/show-request</a></p>
           </blockquote>
         </li>
         <li>
-          <p>Show which actions apply to a URL and why:</p><a name="AEN6403" id="AEN6403"></a>
+          <p>Show which actions apply to a URL and why:</p><a name="AEN6432" id="AEN6432"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/show-url-info" target=
             "_top">http://config.privoxy.org/show-url-info</a></p>
         <li>
           <p>Toggle Privoxy on or off. This feature can be turned off/on in the main <tt class="FILENAME">config</tt>
           file. When toggled <span class="QUOTE">"off"</span>, <span class="QUOTE">"Privoxy"</span> continues to run,
-          but only as a pass-through proxy, with no actions taking place:</p><a name="AEN6411" id="AEN6411"></a>
+          but only as a pass-through proxy, with no actions taking place:</p><a name="AEN6440" id="AEN6440"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/toggle" target="_top">http://config.privoxy.org/toggle</a></p>
           </blockquote>
-          <p>Short cuts. Turn off, then on:</p><a name="AEN6415" id="AEN6415"></a>
+          <p>Short cuts. Turn off, then on:</p><a name="AEN6444" id="AEN6444"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/toggle?set=disable" target=
             "_top">http://config.privoxy.org/toggle?set=disable</a></p>
-          </blockquote><a name="AEN6418" id="AEN6418"></a>
+          </blockquote><a name="AEN6447" id="AEN6447"></a>
           <blockquote class="BLOCKQUOTE">
             <p><a href="http://config.privoxy.org/toggle?set=enable" target=
             "_top">http://config.privoxy.org/toggle?set=enable</a></p>
index 13759ae..6bf7120 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>The Main Configuration File</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Privoxy Configuration" href="configuration.html">
   <link rel="NEXT" title="Actions Files" href="actions-file.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="configuration.html" accesskey="P">Prev</a></td>
             </dd>
             <dt>Notes:</dt>
             <dd>
-              <p>This directive specifies the name of the CA key file in ".pem" format. See the <a href="#CA-CERT-FILE"
-              target="_top">ca-cert-file</a> for a command to generate it.</p>
+              <p>This directive specifies the name of the CA key file in ".pem" format. The <a href="#CA-CERT-FILE"
+              target="_top">ca-cert-file section</a> contains a command to generate it.</p>
             </dd>
             <dt>Example:</dt>
             <dd>
index 4f04462..bb6cf30 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Privoxy Configuration</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Starting Privoxy" href="startup.html">
   <link rel="NEXT" title="The Main Configuration File" href="config.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="startup.html" accesskey="P">Prev</a></td>
@@ -40,7 +40,7 @@
         <tr>
           <td>
             <pre class="SCREEN"> </pre>
-            <h2 class="BRIDGEHEAD"><a name="AEN952"></a>&nbsp;&nbsp;&nbsp;&nbsp;Privoxy Menu</h2>
+            <h2 class="BRIDGEHEAD"><a name="AEN955"></a>&nbsp;&nbsp;&nbsp;&nbsp;Privoxy Menu</h2>
             <pre><br></pre>
             <table border="0">
               <tbody>
@@ -69,7 +69,7 @@
                 </tr>
                 <tr>
                   <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<a href=
-                  "https://www.privoxy.org/3.0.29/user-manual/" target="_top">Documentation</a></td>
+                  "https://www.privoxy.org/3.0.30/user-manual/" target="_top">Documentation</a></td>
                 </tr>
               </tbody>
             </table>
@@ -94,7 +94,8 @@
       <h2 class="SECT2"><a name="CONFOVERVIEW">6.2. Configuration Files Overview</a></h2>
       <p>For Unix, *BSD and GNU/Linux, all configuration files are located in <tt class="FILENAME">/etc/privoxy/</tt>
       by default. For MS Windows these are all in the same directory as the <span class="APPLICATION">Privoxy</span>
-      executable.</p>
+      executable. The name and number of configuration files has changed from previous versions, and is subject to
+      change as development progresses.</p>
       <p>The installed defaults provide a reasonable starting point, though some settings may be aggressive by some
       standards. For the time being, the principle configuration files are:</p>
       <ul>
       listening address of <span class="APPLICATION">Privoxy</span>, these <span class="QUOTE">"wake up"</span>
       requests must obviously be sent to the <span class="emphasis"><i class="EMPHASIS">old</i></span> listening
       address.</p>
+      <p>While under development, the configuration content is subject to change. The below documentation may not be
+      accurate by the time you read this. Also, what constitutes a <span class="QUOTE">"default"</span> setting, may
+      change, so please check all your configuration files on important issues.</p>
     </div>
   </div>
   <div class="NAVFOOTER">
index 24b524e..6751dcd 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Contacting the Developers, Bug Reporting and Feature Requests</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Privoxy's Template Files" href="templates.html">
   <link rel="NEXT" title="Privoxy Copyright, License and History" href="copyright.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="templates.html" accesskey="P">Prev</a></td>
index abe6966..572f61d 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Privoxy Copyright, License and History</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Contacting the Developers, Bug Reporting and Feature Requests" href="contact.html">
   <link rel="NEXT" title="See Also" href="seealso.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="contact.html" accesskey="P">Prev</a></td>
index 42639f7..12c9713 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Filter Files</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Actions Files" href="actions-file.html">
   <link rel="NEXT" title="Privoxy's Template Files" href="templates.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="actions-file.html" accesskey="P">Prev</a></td>
index bf530d4..2b303ec 100644 (file)
@@ -2,7 +2,7 @@
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
-  <title>Privoxy 3.0.29 User Manual</title>
+  <title>Privoxy 3.0.30 User Manual</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
   <link rel="NEXT" title="Introduction" href="introduction.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -12,7 +12,7 @@
 <body class="ARTICLE" bgcolor="#EEEEEE" text="#000000" link="#0000FF" vlink="#840084" alink="#0000FF">
   <div class="ARTICLE">
     <div class="TITLEPAGE">
-      <h1 class="TITLE"><a name="AEN2" id="AEN2">Privoxy 3.0.29 User Manual</a></h1>
+      <h1 class="TITLE"><a name="AEN2" id="AEN2">Privoxy 3.0.30 User Manual</a></h1>
       <p class="PUBDATE"><sub><a href="copyright.html">Copyright</a> &copy; 2001-2020 by <a href=
       "https://www.privoxy.org/" target="_top">Privoxy Developers</a></sub><br></p>
       <div>
           <p>Helping hands and donations are welcome:</p>
           <ul>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#PARTICIPATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#PARTICIPATE</a></p>
+              <p><a href="https://www.privoxy.org/participate" target=
+              "_top">https://www.privoxy.org/participate</a></p>
             </li>
             <li>
-              <p><a href="https://www.privoxy.org/faq/general.html#DONATE" target=
-              "_top">https://www.privoxy.org/faq/general.html#DONATE</a></p>
+              <p><a href="https://www.privoxy.org/donate" target="_top">https://www.privoxy.org/donate</a></p>
             </li>
           </ul>
           <p>You can find the latest version of the <i class="CITETITLE">Privoxy User Manual</i> at <a href=
                 <dt>8.5.34. <a href="actions-file.html#REDIRECT">redirect</a></dt>
                 <dt>8.5.35. <a href="actions-file.html#SERVER-HEADER-FILTER">server-header-filter</a></dt>
                 <dt>8.5.36. <a href="actions-file.html#SERVER-HEADER-TAGGER">server-header-tagger</a></dt>
-                <dt>8.5.37. <a href="actions-file.html#SESSION-COOKIES-ONLY">session-cookies-only</a></dt>
-                <dt>8.5.38. <a href="actions-file.html#SET-IMAGE-BLOCKER">set-image-blocker</a></dt>
-                <dt>8.5.39. <a href="actions-file.html#SUMMARY">Summary</a></dt>
+                <dt>8.5.37. <a href="actions-file.html#SUPPRESS-TAG">suppress-tag</a></dt>
+                <dt>8.5.38. <a href="actions-file.html#SESSION-COOKIES-ONLY">session-cookies-only</a></dt>
+                <dt>8.5.39. <a href="actions-file.html#SET-IMAGE-BLOCKER">set-image-blocker</a></dt>
+                <dt>8.5.40. <a href="actions-file.html#SUMMARY">Summary</a></dt>
               </dl>
             </dd>
             <dt>8.6. <a href="actions-file.html#ALIASES">Aliases</a></dt>
index 3f5be85..374a64d 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Installation</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Introduction" href="introduction.html">
   <link rel="NEXT" title="What's New in this Release" href="whatsnew.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="introduction.html" accesskey="P">Prev</a></td>
       <table border="0" bgcolor="#E0E0E0" width="100%">
         <tr>
           <td>
-            <pre class="SCREEN"> tar xzvf privoxy-3.0.29-stable-src.tar.gz
- cd privoxy-3.0.29-stable</pre>
+            <pre class="SCREEN"> tar xzvf privoxy-3.0.30-beta-src.tar.gz
+ cd privoxy-3.0.30-beta</pre>
           </td>
         </tr>
       </table>
index 42f01ad..0b6ad1d 100644 (file)
@@ -4,8 +4,8 @@
 <head>
   <title>Introduction</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
-  <link rel="PREVIOUS" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
+  <link rel="PREVIOUS" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="NEXT" title="Installation" href="installation.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="index.html" accesskey="P">Prev</a></td>
   </div>
   <div class="SECT1">
     <h1 class="SECT1"><a name="INTRODUCTION" id="INTRODUCTION">1. Introduction</a></h1>
-    <p>This documentation is included with the current stable version of <span class="APPLICATION">Privoxy</span>,
-    3.0.29.</p>
+    <p>This documentation is included with the current UNRELEASED version of <span class="APPLICATION">Privoxy</span>,
+    3.0.30, and is mostly complete at this point. The most up to date reference for the time being is still the
+    comments in the source files and in the individual configuration files. Development of a new version is currently
+    nearing completion, and includes significant changes and enhancements over earlier versions.</p>
+    <p>Since this is a UNRELEASED version, not all new features are well tested. This documentation may be slightly out
+    of sync as a result (especially with <a href="https://www.privoxy.org/gitweb/?p=privoxy.git;a=summary" target=
+    "_top">git sources</a>). And there <span class="emphasis"><i class="EMPHASIS">may be</i></span> bugs, though
+    hopefully not many!</p>
     <div class="SECT2">
       <h2 class="SECT2"><a name="FEATURES" id="FEATURES">1.1. Features</a></h2>
       <p>In addition to the core features of ad blocking and <a href="https://en.wikipedia.org/wiki/Browser_cookie"
       target="_top">cookie</a> management, <span class="APPLICATION">Privoxy</span> provides many supplemental
-      features, that give the end-user more control, more privacy and more freedom:</p>
+      features, some of them currently under development, that give the end-user more control, more privacy and more
+      freedom:</p>
       <ul>
         <li>
           <p>Supports "Connection: keep-alive". Outgoing connections can be kept alive independently from the
         <td width="33%" align="right" valign="top"><a href="installation.html" accesskey="N">Next</a></td>
       </tr>
       <tr>
-        <td width="33%" align="left" valign="top">Privoxy 3.0.29 User Manual</td>
+        <td width="33%" align="left" valign="top">Privoxy 3.0.30 User Manual</td>
         <td width="34%" align="center" valign="top">&nbsp;</td>
         <td width="33%" align="right" valign="top">Installation</td>
       </tr>
index e793ac3..108f66a 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Quickstart to Using Privoxy</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="What's New in this Release" href="whatsnew.html">
   <link rel="NEXT" title="Starting Privoxy" href="startup.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="whatsnew.html" accesskey="P">Prev</a></td>
           <p>Find <tt class="FILENAME">user.action</tt> in the top section, and click on <span class=
           "QUOTE">"<span class="GUIBUTTON">Edit</span>"</span>:</p>
           <div class="FIGURE">
-            <a name="AEN719" id="AEN719"></a>
+            <a name="AEN722" id="AEN722"></a>
             <p><b>Figure 1. Actions Files in Use</b></p>
             <div class="MEDIAOBJECT">
               <p><img src="files-in-use.jpg"></p>
index f3c82ad..8f3d477 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>See Also</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Privoxy Copyright, License and History" href="copyright.html">
   <link rel="NEXT" title="Appendix" href="appendix.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="copyright.html" accesskey="P">Prev</a></td>
index 171a8d3..d1db7dd 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Starting Privoxy</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Quickstart to Using Privoxy" href="quickstart.html">
   <link rel="NEXT" title="Privoxy Configuration" href="configuration.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="quickstart.html" accesskey="P">Prev</a></td>
@@ -35,7 +35,7 @@
     <p>Please note that <span class="APPLICATION">Privoxy</span> can only proxy HTTP and HTTPS traffic. It will not
     work with FTP or other protocols.</p>
     <div class="FIGURE">
-      <a name="AEN773" id="AEN773"></a>
+      <a name="AEN776" id="AEN776"></a>
       <p><b>Figure 2. Proxy Configuration Showing Mozilla Firefox HTTP and HTTPS (SSL) Settings</b></p>
       <div class="MEDIAOBJECT">
         <p><img src="proxy_setup.jpg"></p>
@@ -66,7 +66,7 @@
     protocols"</span> is <span class="emphasis"><i class="EMPHASIS">UNCHECKED</i></span>. You want only HTTP and HTTPS
     (SSL)!</p>
     <div class="FIGURE">
-      <a name="AEN815" id="AEN815"></a>
+      <a name="AEN818" id="AEN818"></a>
       <p><b>Figure 3. Proxy Configuration Showing Internet Explorer HTTP and HTTPS (Secure) Settings</b></p>
       <div class="MEDIAOBJECT">
         <p><img src="proxy2.jpg"></p>
index ddec595..4f6a7df 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>Privoxy's Template Files</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Filter Files" href="filter-file.html">
   <link rel="NEXT" title="Contacting the Developers, Bug Reporting and Feature Requests" href="contact.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="filter-file.html" accesskey="P">Prev</a></td>
index aa35f55..63d9c00 100644 (file)
@@ -4,7 +4,7 @@
 <head>
   <title>What's New in this Release</title>
   <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.29 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.30 User Manual" href="index.html">
   <link rel="PREVIOUS" title="Installation" href="installation.html">
   <link rel="NEXT" title="Quickstart to Using Privoxy" href="quickstart.html">
   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
@@ -15,7 +15,7 @@
   <div class="NAVHEADER">
     <table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.29 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.30 User Manual</th>
       </tr>
       <tr>
         <td width="10%" align="left" valign="bottom"><a href="installation.html" accesskey="P">Prev</a></td>
index f3f5750..06202a9 100644 (file)
@@ -196,12 +196,7 @@ static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
    char service[6];
    int retval;
    jb_socket fd;
-#ifdef HAVE_POLL
    struct pollfd poll_fd[1];
-#else
-   fd_set wfds;
-   struct timeval timeout;
-#endif
 #if !defined(_WIN32) && !defined(__BEOS__)
    int   flags;
 #endif
@@ -285,20 +280,6 @@ static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
          continue;
       }
 
-#ifndef HAVE_POLL
-#ifndef _WIN32
-      if (fd >= FD_SETSIZE)
-      {
-         log_error(LOG_LEVEL_ERROR,
-            "Server socket number too high to use select(): %d >= %d",
-            fd, FD_SETSIZE);
-         close_socket(fd);
-         freeaddrinfo(result);
-         return JB_INVALID_SOCKET;
-      }
-#endif
-#endif
-
 #ifdef FEATURE_EXTERNAL_FILTERS
       mark_socket_for_close_on_execute(fd);
 #endif
@@ -346,7 +327,6 @@ static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
       }
 #endif /* !defined(_WIN32) && !defined(__BEOS__) */
 
-#ifdef HAVE_POLL
       poll_fd[0].fd = fd;
       poll_fd[0].events = POLLOUT;
 
@@ -370,18 +350,6 @@ static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
          }
       }
       else if (retval > 0)
-#else
-      /* wait for connection to complete */
-      FD_ZERO(&wfds);
-      FD_SET(fd, &wfds);
-
-      memset(&timeout, 0, sizeof(timeout));
-      timeout.tv_sec  = 30;
-
-      /* MS Windows uses int, not SOCKET, for the 1st arg of select(). Weird! */
-      if ((select((int)fd + 1, NULL, &wfds, NULL, &timeout) > 0)
-         && FD_ISSET(fd, &wfds))
-#endif
       {
          socklen_t optlen = sizeof(socket_error);
          if (!getsockopt(fd, SOL_SOCKET, SO_ERROR, &socket_error, &optlen))
@@ -439,12 +407,7 @@ static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct cli
    struct sockaddr_in inaddr;
    jb_socket fd;
    unsigned int addr;
-#ifdef HAVE_POLL
    struct pollfd poll_fd[1];
-#else
-   fd_set wfds;
-   struct timeval tv[1];
-#endif
 #if !defined(_WIN32) && !defined(__BEOS__)
    int   flags;
 #endif
@@ -502,19 +465,6 @@ static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct cli
       return(JB_INVALID_SOCKET);
    }
 
-#ifndef HAVE_POLL
-#ifndef _WIN32
-   if (fd >= FD_SETSIZE)
-   {
-      log_error(LOG_LEVEL_ERROR,
-         "Server socket number too high to use select(): %d >= %d",
-         fd, FD_SETSIZE);
-      close_socket(fd);
-      return JB_INVALID_SOCKET;
-   }
-#endif
-#endif
-
    set_no_delay_flag(fd);
 
 #if !defined(_WIN32) && !defined(__BEOS__)
@@ -554,22 +504,10 @@ static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct cli
    }
 #endif /* !defined(_WIN32) && !defined(__BEOS__) */
 
-#ifdef HAVE_POLL
    poll_fd[0].fd = fd;
    poll_fd[0].events = POLLOUT;
 
    if (poll(poll_fd, 1, 30000) <= 0)
-#else
-   /* wait for connection to complete */
-   FD_ZERO(&wfds);
-   FD_SET(fd, &wfds);
-
-   tv->tv_sec  = 30;
-   tv->tv_usec = 0;
-
-   /* MS Windows uses int, not SOCKET, for the 1st arg of select(). Weird! */
-   if (select((int)fd + 1, NULL, &wfds, NULL, tv) <= 0)
-#endif
    {
       close_socket(fd);
       return(JB_INVALID_SOCKET);
@@ -746,25 +684,12 @@ int data_is_available(jb_socket fd, int seconds_to_wait)
 {
    int n;
    char buf[10];
-#ifdef HAVE_POLL
    struct pollfd poll_fd[1];
 
    poll_fd[0].fd = fd;
    poll_fd[0].events = POLLIN;
 
    n = poll(poll_fd, 1, seconds_to_wait * 1000);
-#else
-   fd_set rfds;
-   struct timeval timeout;
-
-   memset(&timeout, 0, sizeof(timeout));
-   timeout.tv_sec = seconds_to_wait;
-
-   FD_ZERO(&rfds);
-   FD_SET(fd, &rfds);
-
-   n = select(fd+1, &rfds, NULL, NULL, &timeout);
-#endif
 
    /*
     * XXX: Do we care about the different error conditions?
@@ -1274,41 +1199,24 @@ int accept_connection(struct client_state * csp, jb_socket fds[])
    int retval;
    int i;
    int max_selected_socket;
-#ifdef HAVE_POLL
    struct pollfd poll_fds[MAX_LISTENING_SOCKETS];
    nfds_t polled_sockets;
-#else
-   fd_set selected_fds;
-#endif
    jb_socket fd;
    const char *host_addr;
    size_t listen_addr_size;
 
    c_length = sizeof(client);
 
-#ifdef HAVE_POLL
    memset(poll_fds, 0, sizeof(poll_fds));
    polled_sockets = 0;
-#else
-   /*
-    * Wait for a connection on any socket.
-    * Return immediately if no socket is listening.
-    * XXX: Why not treat this as fatal error?
-    */
-   FD_ZERO(&selected_fds);
-#endif
    max_selected_socket = 0;
    for (i = 0; i < MAX_LISTENING_SOCKETS; i++)
    {
       if (JB_INVALID_SOCKET != fds[i])
       {
-#ifdef HAVE_POLL
          poll_fds[i].fd = fds[i];
          poll_fds[i].events = POLLIN;
          polled_sockets++;
-#else
-         FD_SET(fds[i], &selected_fds);
-#endif
          if (max_selected_socket < fds[i] + 1)
          {
             max_selected_socket = fds[i] + 1;
@@ -1321,38 +1229,29 @@ int accept_connection(struct client_state * csp, jb_socket fds[])
    }
    do
    {
-#ifdef HAVE_POLL
       retval = poll(poll_fds, polled_sockets, -1);
-#else
-      retval = select(max_selected_socket, &selected_fds, NULL, NULL, NULL);
-#endif
    } while (retval < 0 && errno == EINTR);
    if (retval <= 0)
    {
       if (0 == retval)
       {
          log_error(LOG_LEVEL_ERROR,
-            "Waiting on new client failed because select(2) returned 0."
+            "Waiting on new client failed because poll(2) returned 0."
             " This should not happen.");
       }
       else
       {
          log_error(LOG_LEVEL_ERROR,
-            "Waiting on new client failed because of problems in select(2): "
+            "Waiting on new client failed because of problems in poll(2): "
             "%s.", strerror(errno));
       }
       return 0;
    }
-#ifdef HAVE_POLL
    for (i = 0; i < MAX_LISTENING_SOCKETS && (poll_fds[i].revents == 0); i++);
-#else
-   for (i = 0; i < MAX_LISTENING_SOCKETS && !FD_ISSET(fds[i], &selected_fds);
-         i++);
-#endif
    if (i >= MAX_LISTENING_SOCKETS)
    {
       log_error(LOG_LEVEL_ERROR,
-         "select(2) reported connected clients (number = %u, "
+         "poll(2) reported connected clients (number = %u, "
          "descriptor boundary = %u), but none found.",
          retval, max_selected_socket);
       return 0;
@@ -1389,19 +1288,6 @@ int accept_connection(struct client_state * csp, jb_socket fds[])
    }
 #endif
 
-#ifndef HAVE_POLL
-#ifndef _WIN32
-   if (afd >= FD_SETSIZE)
-   {
-      log_error(LOG_LEVEL_ERROR,
-         "Client socket number too high to use select(): %d >= %d",
-         afd, FD_SETSIZE);
-      close_socket(afd);
-      return 0;
-   }
-#endif
-#endif
-
 #ifdef FEATURE_EXTERNAL_FILTERS
    mark_socket_for_close_on_execute(afd);
 #endif
@@ -1582,7 +1468,6 @@ int socket_is_still_alive(jb_socket sfd)
 {
    char buf[10];
    int no_data_waiting;
-#ifdef HAVE_POLL
    int poll_result;
    struct pollfd poll_fd[1];
 
@@ -1598,23 +1483,6 @@ int socket_is_still_alive(jb_socket sfd)
       return FALSE;
    }
    no_data_waiting = !(poll_fd[0].revents & POLLIN);
-#else
-   fd_set readable_fds;
-   struct timeval timeout;
-   int ret;
-
-   memset(&timeout, '\0', sizeof(timeout));
-   FD_ZERO(&readable_fds);
-   FD_SET(sfd, &readable_fds);
-
-   ret = select((int)sfd+1, &readable_fds, NULL, NULL, &timeout);
-   if (ret < 0)
-   {
-      log_error(LOG_LEVEL_CONNECT, "select() on socket %d failed: %E", sfd);
-      return FALSE;
-   }
-   no_data_waiting = !FD_ISSET(sfd, &readable_fds);
-#endif /* def HAVE_POLL */
 
    return (no_data_waiting || (1 == recv(sfd, buf, 1, MSG_PEEK)));
 }
diff --git a/jcc.c b/jcc.c
index 2a8c166..ca5943c 100644 (file)
--- a/jcc.c
+++ b/jcc.c
 #else
 #include <poll.h>
 #endif /* def __GLIBC__ */
-#else
-# ifndef FD_ZERO
-#  include <select.h>
-# endif
-#warning poll() appears to be unavailable. Your platform will become unsupported in the future.
 #endif /* HAVE_POLL */
 
 #endif
@@ -2585,13 +2580,7 @@ static void handle_established_connection(struct client_state *csp)
    char *hdr;
    char *p;
    int n;
-#ifdef HAVE_POLL
    struct pollfd poll_fds[2];
-#else
-   fd_set rfds;
-   jb_socket maxfd;
-   struct timeval timeout;
-#endif
    int server_body;
    int ms_iis5_hack = 0;
    unsigned long long byte_count = 0;
@@ -2630,11 +2619,6 @@ static void handle_established_connection(struct client_state *csp)
 
    http = csp->http;
 
-#ifndef HAVE_POLL
-   maxfd = (csp->cfd > csp->server_connection.sfd) ?
-      csp->cfd : csp->server_connection.sfd;
-#endif
-
    /* pass data between the client and server
     * until one or the other shuts down the connection.
     */
@@ -2648,22 +2632,6 @@ static void handle_established_connection(struct client_state *csp)
 
    for (;;)
    {
-#ifndef HAVE_POLL
-      FD_ZERO(&rfds);
-#ifdef FEATURE_CONNECTION_KEEP_ALIVE
-      if (!watch_client_socket)
-      {
-         maxfd = csp->server_connection.sfd;
-      }
-      else
-#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
-      {
-         FD_SET(csp->cfd, &rfds);
-      }
-
-      FD_SET(csp->server_connection.sfd, &rfds);
-#endif /* ndef HAVE_POLL */
-
 #ifdef FEATURE_CONNECTION_KEEP_ALIVE
       if ((csp->flags & CSP_FLAG_CHUNKED)
          && !(csp->flags & CSP_FLAG_CONTENT_LENGTH_SET)
@@ -2707,7 +2675,6 @@ static void handle_established_connection(struct client_state *csp)
       }
 #endif  /* FEATURE_CONNECTION_KEEP_ALIVE */
 
-#ifdef HAVE_POLL
       poll_fds[0].fd = csp->cfd;
 #ifdef FEATURE_CONNECTION_KEEP_ALIVE
       if (!watch_client_socket)
@@ -2728,11 +2695,6 @@ static void handle_established_connection(struct client_state *csp)
       poll_fds[1].fd = csp->server_connection.sfd;
       poll_fds[1].events = POLLIN;
       n = poll(poll_fds, 2, csp->config->socket_timeout * 1000);
-#else
-      timeout.tv_sec = csp->config->socket_timeout;
-      timeout.tv_usec = 0;
-      n = select((int)maxfd + 1, &rfds, NULL, NULL, &timeout);
-#endif /* def HAVE_POLL */
 
       /*server or client not responding in timeout */
       if (n == 0)
@@ -2751,11 +2713,7 @@ static void handle_established_connection(struct client_state *csp)
       }
       else if (n < 0)
       {
-#ifdef HAVE_POLL
          log_error(LOG_LEVEL_ERROR, "poll() failed!: %E");
-#else
-         log_error(LOG_LEVEL_ERROR, "select() failed!: %E");
-#endif
          mark_server_socket_tainted(csp);
 #ifdef FEATURE_HTTPS_INSPECTION
          close_client_and_server_ssl_connections(csp);
@@ -2772,7 +2730,6 @@ static void handle_established_connection(struct client_state *csp)
        * XXX: Make sure the client doesn't use pipelining
        * behind Privoxy's back.
        */
-#ifdef HAVE_POLL
       if ((poll_fds[0].revents & (POLLERR|POLLHUP|POLLNVAL)) != 0)
       {
          log_error(LOG_LEVEL_CONNECT,
@@ -2784,9 +2741,6 @@ static void handle_established_connection(struct client_state *csp)
       }
 
       if (poll_fds[0].revents != 0)
-#else
-      if (FD_ISSET(csp->cfd, &rfds))
-#endif /* def HAVE_POLL*/
       {
          int max_bytes_to_read = (int)csp->receive_buffer_size;
 
@@ -2797,7 +2751,7 @@ static void handle_established_connection(struct client_state *csp)
             {
                /*
                 * If the next request is already waiting, we have
-                * to stop select()ing the client socket. Otherwise
+                * to stop poll()ing the client socket. Otherwise
                 * we would always return right away and get nothing
                 * else done.
                 */
@@ -2915,11 +2869,7 @@ static void handle_established_connection(struct client_state *csp)
        * If `hdr' is null, then it's the header otherwise it's the body.
        * FIXME: Does `hdr' really mean `host'? No.
        */
-#ifdef HAVE_POLL
       if (poll_fds[1].revents != 0)
-#else
-      if (FD_ISSET(csp->server_connection.sfd, &rfds))
-#endif /* HAVE_POLL */
       {
 #ifdef FEATURE_CONNECTION_KEEP_ALIVE
          /*
@@ -3720,7 +3670,7 @@ static void chat(struct client_state *csp)
       use_ssl_tunnel = 1;
    }
 
-   if (http->ssl && csp->action->flags & ACTION_IGNORE_CERTIFICATE_ERRORS)
+   if (http->ssl && (csp->action->flags & ACTION_IGNORE_CERTIFICATE_ERRORS))
    {
       csp->dont_verify_certificate = 1;
    }
@@ -5349,17 +5299,6 @@ static jb_socket bind_port_helper(const char *haddr, int hport, int backlog)
       return JB_INVALID_SOCKET;
    }
 
-#ifndef HAVE_POLL
-#ifndef _WIN32
-   if (bfd >= FD_SETSIZE)
-   {
-      log_error(LOG_LEVEL_FATAL,
-         "Bind socket number too high to use select(): %d >= %d",
-         bfd, FD_SETSIZE);
-   }
-#endif
-#endif
-
    if (haddr == NULL)
    {
       log_error(LOG_LEVEL_INFO, "Listening on port %d on all IP addresses",
index dbed0a3..9b39f54 100644 (file)
--- a/loadcfg.c
+++ b/loadcfg.c
@@ -1460,41 +1460,13 @@ struct configuration_spec * load_config(void)
          {
             int max_client_connections = parse_numeric_value(cmd, arg);
 
-#if !defined(_WIN32) && !defined(HAVE_POLL)
-            /*
-             * Reject values below 1 for obvious reasons and values above
-             * FD_SETSIZE/2 because Privoxy needs two sockets to serve
-             * client connections that need forwarding.
-             *
-             * We ignore the fact that the first three file descriptors
-             * are usually set to /dev/null, one is used for logging
-             * and yet another file descriptor is required to load
-             * config files.
-             */
-            if ((max_client_connections < 1) || (FD_SETSIZE/2 < max_client_connections))
-            {
-               log_error(LOG_LEVEL_FATAL, "max-client-connections value %d"
-                  " is invalid. Value needs to be above 1 and below %d"
-                  " (FD_SETSIZE/2).", max_client_connections, FD_SETSIZE/2);
-            }
-#else
-            /*
-             * The Windows libc uses FD_SETSIZE for an array used
-             * by select(), but has no problems with file descriptors
-             * above the limit as long as no more than FD_SETSIZE are
-             * passed to select().
-             * https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169%28v=vs.85%29.aspx
-             *
-             * On platforms were we use poll() we don't have to enforce
-             * an upper connection limit either.
-             */
             if (max_client_connections < 1)
             {
                log_error(LOG_LEVEL_FATAL, "max-client-connections value"
                   " has to be a number above 1. %d is invalid.",
                   max_client_connections);
             }
-#endif
+
             config->max_client_connections = max_client_connections;
             break;
          }
index eab5e76..d2ef046 100644 (file)
--- a/parsers.c
+++ b/parsers.c
@@ -1540,6 +1540,15 @@ static jb_err header_tagger(struct client_state *csp, char *header)
             continue;
          }
 
+         if (list_contains_item(csp->action->multi[ACTION_MULTI_SUPPRESS_TAG], tag))
+         {
+            log_error(LOG_LEVEL_HEADER,
+               "Tagger \'%s\' didn't add tag \'%s\': suppressed",
+               b->name, tag);
+            freez(tag);
+            continue;
+         }
+
          if (!list_contains_item(csp->tags, tag))
          {
             if (JB_ERR_OK != enlist(csp->tags, tag))
index ec3c155..43792dd 100644 (file)
--- a/project.h
+++ b/project.h
@@ -649,8 +649,10 @@ struct iob
 #define ACTION_MULTI_SERVER_HEADER_TAGGER    5
 /** Number of multi-string actions. */
 #define ACTION_MULTI_EXTERNAL_FILTER         6
+/** Index into current_action_spec::multi[] for tags to suppress. */
+#define ACTION_MULTI_SUPPRESS_TAG            7
 /** Number of multi-string actions. */
-#define ACTION_MULTI_COUNT                   7
+#define ACTION_MULTI_COUNT                   8
 
 
 /**
@@ -1303,13 +1305,14 @@ enum filter_type
 #ifdef FEATURE_EXTERNAL_FILTERS
    FT_EXTERNAL_CONTENT_FILTER = 5,
 #endif
+   FT_SUPPRESS_TAG = 6,
    FT_INVALID_FILTER       = 42,
 };
 
 #ifdef FEATURE_EXTERNAL_FILTERS
-#define MAX_FILTER_TYPES        6
+#define MAX_FILTER_TYPES        7
 #else
-#define MAX_FILTER_TYPES        5
+#define MAX_FILTER_TYPES        6
 #endif
 
 /**
@@ -1645,8 +1648,13 @@ struct configuration_spec
  * The prefix for CGI pages.  Written out in generated HTML.
  * INCLUDES the trailing slash.
  */
+#ifdef FEATURE_HTTPS_INSPECTION
+#define CGI_PREFIX  "//" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
+#define CGI_PREFIX_HTTPS "https:" CGI_PREFIX
+#else
 #define CGI_PREFIX  "http://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
-#define CGI_PREFIX_HTTPS "https://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
+#endif
+#define CGI_PREFIX_HTTP  "http://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
 
 #endif /* ndef PROJECT_H_INCLUDED */
 
index 9393a0f..7409e6b 100644 (file)
@@ -1,9 +1,10 @@
 #############################################################################
 #
 # This is a configuration file for Privoxy-Regression-Test
-# (included in the source tarball's tools directory).
+# (included in the source tarball's tools directory and available at
+# https://www.privoxy.org/gitweb/?p=privoxy.git;a=blob;f=tools/privoxy-regression-test.pl;hb=HEAD).
 #
-# After referencing it in your Privoxy configuration both Privoxy and
+# After referencing this file in your Privoxy configuration both Privoxy and
 # Privoxy-Regression-Test should be good to go.
 #
 #############################################################################
@@ -25,7 +26,7 @@
 #############################################################################
 
 {{settings}}
-for-privoxy-version=3.0.27
+for-privoxy-version=3.0.29
 
 # Some dependencies Privoxy-Regression-Test should know about:
 #
@@ -47,6 +48,7 @@ for-privoxy-version=3.0.27
 # Level 23 needs = config line enable-proxy-authentication-forwarding\s+1
 # Level 24 needs = feature status FEATURE_CLIENT_TAGS Yes
 # Level 25 needs = feature status FEATURE_HTTPS_INSPECTION No
+# Level 26 needs = feature status FEATURE_PCRE_HOST_PATTERNS Yes
 
 #######################################################
 # Enable taggers to activate the tests on demand
@@ -604,6 +606,11 @@ TAG:^Connection: close$
 TAG:^connection-sharing disabled$
 
 {}
+# XXX: This test is expected to fail when using "https://p.p/"
+#      as CGI prefix with https inspection enabled but can't
+#      yet be automatically skipped. By design connections aren't
+#      shared when using "https://" so Privoxy does not remove the
+#      header.
 # Set Header    = Connection: close
 # Expect Header = REMOVAL
 # Level = 16
@@ -622,6 +629,15 @@ TAG:^connection-sharing enabled$
 TAG:^No Host header$
 
 {}
+# XXX: This test is expected to fail when using "https://p.p/"
+#      as CGI prefix with https inspection enabled but can't
+#      yet be automatically skipped. The reason for the test
+#      failure is that Privoxy-Regression-Test only modifies
+#      the Host header for the CONNECT request, not for the
+#      actual request that follows. Changing that would not
+#      fix the test though as a modified Host header in the
+#      actual request would result in Privoxy attempting to
+#      connect to it.
 # Set Header    = Host: whatever.example.org
 # Expect Header = NO CHANGE
 TAG:^Host header other than the target host$
@@ -1112,3 +1128,11 @@ redirect2.example.net/
 {+delay-response{1}}
 # Fetch Test = http://config.privoxy.org/show-url-info?url=http%3A%2F%2Fwww.example.com%2Fprivoxy-test-delay-response
 config.privoxy.org/show-url-info\?url=http%3A%2F%2Fwww\.example\.com%2Fprivoxy-test-delay-response
+
+{+block{Block with pcre host pattern}}
+# Blocked URL = http://aaa.example.org/
+# Level = 26
+PCRE-HOST-PATTERN:^a{3}\.example\.org$
+# Blocked URL = http://bbb.example.org/
+# Level = 26
+PCRE-HOST-PATTERN:^(bbb|ccc|ddd)\.example\.org$
index 6c85901..9fd6000 100644 (file)
            href="@user-manual@contact.html">get support or report problems</a>. \
         <p> \
           If you want to support the Privoxy Team, you can \
-          <a href="https://www.privoxy.org/faq/general.html#PARTICIPATE">participate</a> \
-          or <a href="https://www.privoxy.org/faq/general.html#DONATE">donate</a>. \
+          <a href="https://www.privoxy.org/participate">participate</a> \
+          or <a href="https://www.privoxy.org/donate">donate</a>. \
         </p> \
       </td> \
     </tr> \
index e3a240c..1b9ed4f 100644 (file)
@@ -1142,6 +1142,30 @@ function show_limit_connect_opts(tf)
         you can enable or disable the taggers individually below.</td>
     </tr>
 @server-header-tagger-params@
+@suppress-tag-params@
+    <tr class="bg1" align="left" valign="top">
+      <td class="en1" align="center" valign="middle"><input type="radio"
+        name="new_string_filter_r0" value="Y"
+        ></td>
+      <td class="dis1" align="center" valign="middle"><input type="radio"
+        name="new_string_filter_r0" value="N"
+        ></td>
+      <td class="noc1" align="center" valign="middle"><input type="radio"
+        name="new_string_filter_r0" value="X" checked
+        ></td>
+      <td class="action"><a href="@user-manual@@actions-help-prefix@SUPPRESS-TAG">suppress-tag</a></td>
+      <td>Suppress tag.</td>
+    </tr>
+    <tr class="bg1" align="left" valign="top" id="suppress-tag_opts">
+      <td class="en1">&nbsp;</td>
+      <td class="dis1">&nbsp;</td>
+      <td class="noc1">&nbsp;</td>
+      <td>&nbsp;</td>
+      <td>Tag to suppress:<br>
+        <input type="hidden" name="new_string_filter_t0" value="U">
+        <input type="text" name="new_string_filter_n0" size="40" value="">
+      </td>
+    </tr>
     <tr class="bg1" align="left" valign="top">
       <td class="en1" align="center" valign="middle"><input type="radio"
         name="session_cookies_only" value="Y" @session-cookies-only-y@
diff --git a/templates/edit-actions-for-url-string-filter b/templates/edit-actions-for-url-string-filter
new file mode 100644 (file)
index 0000000..b1f9b6c
--- /dev/null
@@ -0,0 +1,40 @@
+##############################################################################
+#
+# File        :  $Source: /cvsroot/ijbswa/current/templates/edit-actions-for-url-filter,v $
+#
+# Purpose     :  Template that is included from most of Privoxy's CGI pages
+#                to show the user how to get help or report problems.
+#
+#
+# Copyright   :  Written by and Copyright (C) 2002-2007 members of
+#                members of the Privoxy team. https://www.privoxy.org/
+#
+#                This template is free software; you can redistribute it
+#                and/or modify it under the terms of the GNU General
+#                Public License as published by the Free Software
+#                Foundation; either version 2 of the License, or (at
+#                your option) any later version.
+#
+##############################################################################
+
+<tr class="bg1" align="left" valign="top">
+  <td class="en1" align="center" valign="middle"><input type="radio" name="string_filter_r@index@" value="Y" @this-filter-y@></td>
+  <td class="dis1" align="center" valign="middle"><input type="radio" name="string_filter_r@index@" value="N" @this-filter-n@></td>
+  <td class="noc1" align="center" valign="middle"><input type="radio" name="string_filter_r@index@" value="X"></td>
+  <td class="action">
+    <input type="hidden" name="string_filter_t@index@" value="@abbr-filter-type@">
+    <input type="hidden" name="string_filter_c@index@" value="@code@">
+    <input type="hidden" name="string_filter_o@index@" value="@name@">
+    <a href="@user-manual@@actions-help-prefix@@anchor@">@filter-type@</a> @name@
+  </td>
+  <td>Suppress tag</td>
+</tr>
+<tr class="bg1" align="left" valign="top" id="string_filter@index@_opts">
+  <td class="en1">&nbsp;</td>
+  <td class="dis1">&nbsp;</td>
+  <td class="noc1">&nbsp;</td>
+  <td>&nbsp;</td>
+  <td>Tag to suppress:<br>
+  <input type="text" name="string_filter_n@index@" size="40" value="@name@">
+  </td>
+</tr>
index c697414..cca1ae0 100644 (file)
@@ -28,6 +28,6 @@
            href="@user-manual@contact.html">get support or report problems</a>.
         <p>
           If you want to support the Privoxy Team, you can
-          <a href="https://www.privoxy.org/faq/general.html#PARTICIPATE">participate</a>
-          or <a href="https://www.privoxy.org/faq/general.html#DONATE">donate</a>.
+          <a href="https://www.privoxy.org/participate">participate</a>
+          or <a href="https://www.privoxy.org/donate">donate</a>.
         </p>
index c00ea3c..49d2804 100755 (executable)
@@ -38,7 +38,7 @@ use strict;
 use Getopt::Long;
 
 use constant {
-    PRT_VERSION => 'Privoxy-Regression-Test 0.7.1',
+    PRT_VERSION => 'Privoxy-Regression-Test 0.7.2',
  
     CURL => 'curl',
 
@@ -47,7 +47,8 @@ use constant {
     CLI_LOOPS     => 1,
     CLI_MAX_TIME  => 5,
     CLI_MIN_LEVEL => 0,
-    # XXX: why limit at all?
+    # The reason for a maximum test level is explained in the
+    # perldoc section TEST LEVELS near the end of this file.
     CLI_MAX_LEVEL => 100,
     CLI_FORKS     => 0,
     CLI_SLEEP_TIME => 0,
@@ -132,7 +133,7 @@ sub parse_tag($) {
 sub check_for_forbidden_characters($) {
 
     my $string = shift;
-    my $allowed = '[-=\dA-Za-z~{}\[\]:./();\t ,+@"_%?&*^]';
+    my $allowed = '[-=\dA-Za-z~{}\[\]:./();\t ,+@"_%?&*^|]';
 
     unless ($string =~ m/^$allowed*$/o) {
         my $forbidden = $string;
@@ -895,6 +896,8 @@ sub register_dependency($$) {
 sub execute_method_test($) {
 
     my $test = shift;
+    our $privoxy_cgi_url;
+
     my $buffer_ref;
     my $status_code;
     my $method = $test->{'data'};
@@ -906,7 +909,7 @@ sub execute_method_test($) {
     # Don't complain about the 'missing' body
     $curl_parameters .= '--head ' if ($method =~ /^HEAD$/i);
 
-    $curl_parameters .= PRIVOXY_CGI_URL;
+    $curl_parameters .= $privoxy_cgi_url;
 
     $buffer_ref = get_page_with_curl($curl_parameters);
     $status_code = get_status_code($buffer_ref);
@@ -962,6 +965,8 @@ sub execute_redirect_test($) {
 sub execute_dumb_fetch_test($) {
 
     my $test = shift;
+    our $privoxy_cgi_url;
+
     my $buffer_ref;
     my $status_code;
 
@@ -972,7 +977,7 @@ sub execute_dumb_fetch_test($) {
         $curl_parameters .= '--request ' . quote($test->{method}) . ' ';
     }
     if ($test->{type} == TRUSTED_CGI_REQUEST) {
-        $curl_parameters .= '--referer ' . quote(PRIVOXY_CGI_URL) . ' ';
+        $curl_parameters .= '--referer ' . quote($privoxy_cgi_url) . ' ';
     }
 
     $curl_parameters .= quote($test->{'data'});
@@ -1026,6 +1031,8 @@ sub execute_sticky_actions_test($) {
 sub get_final_results($) {
 
     my $url = shift;
+    our $privoxy_cgi_url;
+
     my $curl_parameters = '';
     my %final_results = ();
     my $final_results_reached = 0;
@@ -1038,7 +1045,7 @@ sub get_final_results($) {
     $url =~ s@:@%3A@g;
     $url =~ s@/@%2F@g;
 
-    $curl_parameters .= quote(PRIVOXY_CGI_URL . 'show-url-info?url=' . $url);
+    $curl_parameters .= quote($privoxy_cgi_url . 'show-url-info?url=' . $url);
 
     foreach (@{get_cgi_page_or_else($curl_parameters)}) {
 
@@ -1293,10 +1300,20 @@ sub get_server_header($$) {
 sub get_status_code($) {
 
     my $buffer_ref = shift;
+    our $privoxy_cgi_url;
+
+    my $skip_connection_established_response = $privoxy_cgi_url =~ m@^https://@;
     my @buffer = @{$buffer_ref}; 
 
     foreach (@buffer) {
 
+        if ($skip_connection_established_response) {
+
+            next if (m@^HTTP/1\.1 200 Connection established@);
+            next if (m@^\r\n$@);
+            $skip_connection_established_response = 0;
+        }
+
         if (/^HTTP\/\d\.\d (\d{3})/) {
 
             return $1;
@@ -1364,7 +1381,7 @@ sub get_cgi_page_or_else($) {
 
     if (200 != $status_code) {
 
-        my $log_message = "Failed to fetch Privoxy CGI Page. " .
+        my $log_message = "Failed to fetch Privoxy CGI page '$cgi_url'. " .
                           "Received status code ". $status_code .
                           " while only 200 is acceptable.";
 
@@ -1397,8 +1414,13 @@ sub get_show_request_with_curl($) {
 
     # Enable the action to test
     $curl_parameters .= '-H \'X-Privoxy-Control: ' . $test->{'tag'} . '\' ';
-    # The header to filter
-    $curl_parameters .= '-H \'' . $header . '\' ';
+
+    # Add the header to filter
+    if ($privoxy_cgi_url =~ m@^https://@ and $header =~ m@^Host:@) {
+        $curl_parameters .= '--proxy-header \'' . $header . '\' ';
+    } else {
+        $curl_parameters .= '-H \'' . $header . '\' ';
+    }
 
     $curl_parameters .= ' ';
     $curl_parameters .= $privoxy_cgi_url;
@@ -1662,6 +1684,7 @@ sub list_test_types() {
 sub help() {
 
     our %cli_options;
+    our $privoxy_cgi_url;
 
     print_version();
 
@@ -1681,6 +1704,7 @@ Options and their default values if they have any:
     [--max-time $cli_options{'max-time'}]
     [--min-level $cli_options{'min-level'}]
     [--privoxy-address]
+    [--privoxy-cgi-prefix $privoxy_cgi_url]
     [--retries $cli_options{'retries'}]
     [--show-skipped-tests]
     [--shuffle-tests]
@@ -1721,6 +1745,7 @@ sub parse_cli_options() {
 
     our %cli_options;
     our $log_level;
+    our $privoxy_cgi_url;
 
     init_cli_options();
 
@@ -1738,6 +1763,7 @@ sub parse_cli_options() {
         'max-time=i'         => \$cli_options{'max-time'},
         'min-level=i'        => \$cli_options{'min-level'},
         'privoxy-address=s'  => \$cli_options{'privoxy-address'},
+        'privoxy-cgi-prefix=s' => \$privoxy_cgi_url, # XXX: Should use cli_options()
         'retries=i'          => \$cli_options{'retries'},
         'shuffle-tests'      => \$cli_options{'shuffle-tests'},
         'show-skipped-tests' => \$cli_options{'show-skipped-tests'},
@@ -1821,7 +1847,7 @@ B<privoxy-regression-test> [B<--debug bitmask>] [B<--forks> forks]
 [B<--fuzzer-feeding>] [B<--fuzzer-feeding>] [B<--help>] [B<--level level>]
 [B<--local-test-file testfile>] [B<--loops count>] [B<--max-level max-level>]
 [B<--max-time max-time>] [B<--min-level min-level>] B<--privoxy-address proxy-address>
-[B<--retries retries>] [B<--test-number test-number>]
+B<--privoxy-cgi-prefix cgi-prefix> [B<--retries retries>] [B<--test-number test-number>]
 [B<--show-skipped-tests>] [B<--sleep-time> seconds] [B<--verbose>]
 [B<--version>]
 
@@ -2020,6 +2046,20 @@ If it's not set, the value of the environment variable http_proxy
 will be used. B<proxy-address> has to be specified in http_proxy
 syntax.
 
+B<--privoxy-cgi-prefix privoxy-cgi-prefix> The prefix to use when
+building URLs that are supposed to reach Privoxy's CGI interface.
+If it's not set, B<http://p.p/> is used, which is supposed to work
+with the default Privoxy configuration.
+If Privoxy has been built with B<FEATURE_HTTPS_INSPECTION> enabled,
+and if https inspection is activated with the B<+https-inspection>
+action, this option can be used with
+B<https://p.p/> provided the system running Privoxy-Regression-Test
+has been configured to trust the certificate used by Privoxy.
+Note that there are currently two tests in the official
+B<regression-tests.action> file that are expected to fail when
+using a B<privoxy-cgi-prefix> with B<https://> and aren't automatically
+skipped.
+
 B<--retries retries> Retry B<retries> times.
 
 B<--test-number test-number> Only run the test with the specified
index 23a6b54..3cd1147 100644 (file)
@@ -704,9 +704,9 @@ static jb_err compile_pattern(const char *pattern, enum regex_anchoring anchorin
 static jb_err compile_url_pattern(struct pattern_spec *url, char *buf)
 {
    char *p;
+   const size_t prefix_length = 18;
 
 #ifdef FEATURE_PCRE_HOST_PATTERNS
-   const size_t prefix_length = 18;
    if (strncmpic(buf, "PCRE-HOST-PATTERN:", prefix_length) == 0)
    {
       url->pattern.url_spec.host_regex_type = PCRE_HOST_PATTERN;
@@ -717,6 +717,22 @@ static jb_err compile_url_pattern(struct pattern_spec *url, char *buf)
    {
       url->pattern.url_spec.host_regex_type = VANILLA_HOST_PATTERN;
    }
+#else
+   if (strncmpic(buf, "PCRE-HOST-PATTERN:", prefix_length) == 0)
+   {
+      log_error(LOG_LEVEL_ERROR,
+         "PCRE-HOST-PATTERN detected while Privoxy has been compiled "
+         "without FEATURE_PCRE_HOST_PATTERNS: %s",
+         buf);
+      /* Overwrite the "PCRE-HOST-PATTERN:" prefix */
+      memmove(buf, buf+prefix_length, strlen(buf+prefix_length)+1);
+      /*
+       * The pattern will probably not work as expected.
+       * We don't simply return JB_ERR_PARSE here so the
+       * regression tests can be loaded with and without
+       * FEATURE_PCRE_HOST_PATTERNS.
+       */
+   }
 #endif
 
    p = strchr(buf, '/');