[Privoxy-commits] [privoxy] 06/10: Add man pages for the Privoxy tools
User Git
git at git.privoxy.org
Sat Apr 11 15:04:15 CEST 2026
This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository privoxy.
commit bd520da13c9538f75a8776d159ca6e76631d7ad6
Author: Fabian Keil <fk at fabiankeil.de>
AuthorDate: Fri Jan 9 17:06:04 2026 +0100
Add man pages for the Privoxy tools
... that are based on the perldoc documentation.
---
man/privoxy-log-parser.1 | 208 +++++++++++++++++++++++
man/privoxy-regression-test.1 | 382 ++++++++++++++++++++++++++++++++++++++++++
man/uagen.1 | 232 +++++++++++++++++++++++++
3 files changed, 822 insertions(+)
diff --git a/man/privoxy-log-parser.1 b/man/privoxy-log-parser.1
new file mode 100644
index 00000000..7ad1c8ba
--- /dev/null
+++ b/man/privoxy-log-parser.1
@@ -0,0 +1,208 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
+.\" ========================================================================
+.\"
+.IX Title "PRIVOXY-LOG-PARSER 1"
+.TH PRIVOXY-LOG-PARSER 1 2026-04-09 "perl v5.42.2" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+privoxy\-log\-parser \- A parser and syntax\-highlighter for Privoxy log messages
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+\&\fBprivoxy\-log\-parser\fR [\fB\-\-detect\-inactivity\fR] [\fB\-\-inactivity\-threshold msecs\fR]
+[\fB\-\-html\-output\fR]
+[\fB\-\-no\-msecs\fR] [\fB\-\-no\-syntax\-higlighting\fR] [\fB\-\-statistics\fR]
+[\fB\-\-shorten\-thread\-ids\fR] [\fB\-\-show\-ineffective\-filters\fR]
+[\fB\-\-url\-statistics\-threshold\fR] [\fB\-\-version\fR]
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+\&\fBprivoxy\-log\-parser\fR reads Privoxy log messages and
+.PP
+\&\- syntax\-highlights recognized lines,
+.PP
+\&\- reformats some of them for easier comprehension,
+.PP
+\&\- filters out less useful messages, and
+.PP
+\&\- (in some cases) calculates additional information,
+ like the compression ratio or how a filter affected
+ the content size.
+.PP
+With \fBprivoxy\-log\-parser\fR you should be able to increase Privoxy\*(Aqs log level
+without getting confused by the resulting amount of output. For example for
+"debug 64" \fBprivoxy\-log\-parser\fR will (by default) only show messages that
+affect the content. If a filter doesn\*(Aqt cause any hits, \fBprivoxy\-log\-parser\fR
+will hide the "filter foo caused 0 hits" message.
+.SH OPTIONS
+.IX Header "OPTIONS"
+[\fB\-\-detect\-inactivity\fR] Instead of syntax highlighting, detect periods
+of log inactivity of more than the amount of milliseconds specified with
+the \fB\-\-inactivity\-threshold\fR option. Mainly useful for debugging.
+.PP
+[\fB\-\-host\-statistics\-threshold\fR] Only show the request count for a host
+if it\*(Aqs above or equal to the given threshold. If the threshold is 0, host
+statistics are disabled.
+.PP
+[\fB\-\-html\-output\fR] Use HTML and CSS when syntax highlighting. If this option is
+omitted, ANSI escape sequences are used unless \fB\-\-no\-syntax\-highlighting\fR is active.
+This option is only intended to make embedding log excerpts in web pages easier.
+It does not escape any input!
+.PP
+[\fB\-\-inactivity\-threshold msecs\fR] Specifies the number of milliseconds between
+log messages to consider inactivity when running in [\fB\-\-detect\-inactivity\fR]
+mode.
+.PP
+[\fB\-\-keep\-date\fR] Don\*(Aqt remove the date when printing highlighted log messages.
+Useful when parsing multiple log files at once.
+.PP
+[\fB\-\-no\-msecs\fR] Don\*(Aqt expect millisecond resolution
+.PP
+[\fB\-\-no\-syntax\-highlighting\fR] Disable syntax\-highlighting. Useful when
+the filtered output is piped into less in which case the ANSI control
+codes don\*(Aqt work, or if the terminal itself doesn\*(Aqt support the control
+codes.
+.PP
+[\fB\-\-passed\-request\-statistics\-threshold\fR] Only show the request count for
+a passed requests if it\*(Aqs above or equal to the given threshold. If the
+threshold is 0, passed request statistics are disabled.
+.PP
+[\fB\-\-shorten\-thread\-ids\fR] Shorten the thread ids to a three\-digit decimal number.
+Note that the mapping from thread ids to shortened ids is created at run\-time
+and thus varies with the input.
+.PP
+[\fB\-\-show\-ineffective\-filters\fR] Don\*(Aqt suppress log lines for filters
+that didn\*(Aqt modify the content.
+.PP
+[\fB\-\-show\-complete\-request\-distribution\fR] Show the complete client request
+distribution in the \fB\-\-statistics\fR output. Without this option only the
+ten most common numbers are shown.
+.PP
+[\fB\-\-statistics\fR] Gather various statistics instead of syntax highlighting
+log messages. This is an experimental feature, if the results look wrong
+they very well might be. Also note that the results are pretty much guaranteed
+to be incorrect if Privoxy and Privoxy\-Log\-Parser aren\*(Aqt in sync.
+.PP
+[\fB\-\-strict\-checks\fR] When generating statistics, look more careful at the
+input data and abort if it is unexpected, even if it doesn\*(Aqt affect the
+results. Significantly slows the parsing down and is not expected to catch
+any problems that matter.
+When highlighting, print warnings in case of unknown messages which can\*(Aqt be
+properly highlighted.
+.PP
+[\fB\-\-unbreak\-lines\-only\fR] Tries to fix lines that got messed up by a broken or
+interestingly configured mail client and thus are no longer recognized properly.
+Only fixes some breakage, but may be good enough or at least better than nothing.
+Doesn\*(Aqt do anything else, so you probably want to pipe the output into
+\&\fBprivoxy\-log\-parser\fR again.
+.PP
+[\fB\-\-url\-statistics\-threshold\fR] Only show the request count for a resource
+if it\*(Aqs above or equal to the given threshold. If the threshold is 0, URL
+statistics are disabled.
+.PP
+[\fB\-\-version\fR] Print version and exit.
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+To monitor a log file:
+.PP
+tail \-F /usr/jails/privoxy\-jail/var/log/privoxy/privoxy.log | \fBprivoxy\-log\-parser\fR
+.PP
+Replace \*(Aq\-F\*(Aq with \*(Aq\-f\*(Aq if your tail implementation lacks \*(Aq\-F\*(Aq support
+or if the log won\*(Aqt get rotated anyway. The log file location depends
+on your system (Doh!).
+.PP
+To monitor Privoxy without having it write to a log file:
+.PP
+privoxy \-\-no\-daemon /usr/jails/privoxy\-jail/usr/local/etc/privoxy/config 2>&1 | \fBprivoxy\-log\-parser\fR
+.PP
+Again, the config file location depends on your system. Output redirection
+depends on your shell, the above works with bourne shells.
+.PP
+To read a processed Privoxy log file from top to bottom, letting the content
+scroll by slightly faster than you can read:
+.PP
+\&\fBprivoxy\-log\-parser\fR < /usr/jails/privoxy\-jail/var/log/privoxy/privoxy.log
+.PP
+This is probably only useful to fill screens in the background of haxor movies.
+.SH CAVEATS
+.IX Header "CAVEATS"
+Syntax highlighting with ANSI escape sequences will look strange
+if your background color isn\*(Aqt black.
+.PP
+Some messages aren\*(Aqt recognized yet and will not be fully highlighted.
+.PP
+\&\fBprivoxy\-log\-parser\fR is developed with Privoxy 3.0.7 or later in mind,
+using earlier Privoxy versions will probably result in an increased amount
+of unrecognized log lines.
+.PP
+Privoxy\*(Aqs log files tend to be rather large. If you use HTML
+highlighting some browsers can\*(Aqt handle them, get confused and
+will eventually crash because of segmentation faults or unexpected
+exceptions. This is a problem in the browser and not \fBprivoxy\-log\-parser\fR\*(Aqs
+fault.
+.SH BUGS
+.IX Header "BUGS"
+Many settings can\*(Aqt be controlled through command line options yet.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBprivoxy\fR\|(8)
+.SH AUTHOR
+.IX Header "AUTHOR"
+Fabian Keil <fk at fabiankeil.de>
diff --git a/man/privoxy-regression-test.1 b/man/privoxy-regression-test.1
new file mode 100644
index 00000000..c47d0231
--- /dev/null
+++ b/man/privoxy-regression-test.1
@@ -0,0 +1,382 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
+.\" ========================================================================
+.\"
+.IX Title "PRIVOXY-REGRESSION-TEST 1"
+.TH PRIVOXY-REGRESSION-TEST 1 2026-03-31 "perl v5.42.2" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+privoxy\-regression\-test \- A regression test "framework" for Privoxy.
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+\&\fBprivoxy\-regression\-test\fR [\fB\-\-check\-bad\-ssl\fR] [\fB\-\-curl curl\fR] [\fB\-\-debug bitmask\fR]
+[\fB\-\-forks\fR forks] [\fB\-\-fuzzer\-feeding\fR] [\fB\-\-fuzzer\-feeding\fR] [\fB\-\-help\fR] [\fB\-\-level level\fR]
+[\fB\-\-local\-test\-file testfile\fR] [\fB\-\-loops count\fR] [\fB\-\-max\-level max\-level\fR]
+[\fB\-\-max\-time max\-time\fR] [\fB\-\-min\-level min\-level\fR] \fB\-\-privoxy\-address proxy\-address\fR
+\&\fB\-\-privoxy\-cgi\-prefix cgi\-prefix\fR [\fB\-\-retries retries\fR] [\fB\-\-test\-number test\-number\fR]
+[\fB\-\-show\-skipped\-tests\fR] [\fB\-\-sleep\-time\fR seconds] [\fB\-\-verbose\fR]
+[\fB\-\-version\fR]
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+Privoxy\-Regression\-Test is supposed to one day become
+a regression test suite for Privoxy. It\*(Aqs not quite there
+yet, however, and can currently only test header actions,
+check the returned status code for requests to arbitrary
+URLs and verify which actions are applied to them.
+.PP
+Client header actions are tested by requesting
+\&\fBhttp://p.p/show\-request\fR and checking whether
+or not Privoxy modified the original request as expected.
+.PP
+The original request contains both the header the action\-to\-be\-tested
+acts upon and an additional tagger\-triggering header that enables
+the action to test.
+.PP
+Applied actions are checked through \fBhttp://p.p/show\-url\-info\fR.
+.SH "CONFIGURATION FILE SYNTAX"
+.IX Header "CONFIGURATION FILE SYNTAX"
+Privoxy\-Regression\-Test\*(Aqs configuration is embedded in
+Privoxy action files and loaded through Privoxy\*(Aqs web interface.
+.PP
+It makes testing a Privoxy version running on a remote system easier
+and should prevent you from updating your tests without updating Privoxy\*(Aqs
+configuration accordingly.
+.PP
+A client\-header\-action test section looks like this:
+.PP
+.Vb 4
+\& # Set Header = Referer: http://www.example.org.zwiebelsuppe.exit/
+\& # Expect Header = Referer: http://www.example.org/
+\& {+client\-header\-filter{hide\-tor\-exit\-notation} \-hide\-referer}
+\& TAG:^client\-header\-filter\e{hide\-tor\-exit\-notation\e}$
+.Ve
+.PP
+The example above causes Privoxy\-Regression\-Test to set
+the header \fBReferer: http://www.example.org.zwiebelsuppe.exit/\fR
+and to expect it to be modified to
+\&\fBReferer: http://www.example.org/\fR.
+.PP
+When testing this section, Privoxy\-Regression\-Test will set the header
+\&\fBX\-Privoxy\-Control: client\-header\-filter{hide\-tor\-exit\-notation}\fR
+causing the \fBprivoxy\-control\fR tagger to create the tag
+\&\fBclient\-header\-filter{hide\-tor\-exit\-notation}\fR which will finally
+cause Privoxy to enable the action section.
+.PP
+Note that the actions itself are only used by Privoxy,
+Privoxy\-Regression\-Test ignores them and will be happy
+as long as the expectations are satisfied.
+.PP
+A fetch test looks like this:
+.PP
+.Vb 2
+\& # Fetch Test = http://p.p/user\-manual
+\& # Expect Status Code = 302
+.Ve
+.PP
+It tells Privoxy\-Regression\-Test to request \fBhttp://p.p/user\-manual\fR
+and to expect a response with the HTTP status code \fB302\fR. Obviously that\*(Aqs
+not a very thorough test and mainly useful to get some code coverage
+for Valgrind or to verify that the templates are installed correctly.
+.PP
+If you want to test CGI pages that require a trusted
+referer, you can use:
+.PP
+.Vb 1
+\& # Trusted CGI Request = http://p.p/edit\-actions
+.Ve
+.PP
+It works like ordinary fetch tests, but sets the referer
+header to a trusted value.
+.PP
+If no explicit status code expectation is set, \fB200\fR is used.
+.PP
+To verify that a URL is blocked, use:
+.PP
+.Vb 1
+\& # Blocked URL = http://www.example.com/blocked
+.Ve
+.PP
+To verify that a specific set of actions is applied to an URL, use:
+.PP
+.Vb 2
+\& # Sticky Actions = +block{foo} +handle\-as\-empty\-document \-handle\-as\-image
+\& # URL = http://www.example.org/my\-first\-url
+.Ve
+.PP
+The sticky actions will be checked for all URLs below it
+until the next sticky actions directive.
+.PP
+To verify that requests for a URL get redirected, use:
+.PP
+.Vb 2
+\& # Redirected URL = http://www.example.com/redirect\-me
+\& # Redirect Destination = http://www.example.org/redirected
+.Ve
+.PP
+To skip a test, add the following line:
+.PP
+.Vb 1
+\& # Ignore = Yes
+.Ve
+.PP
+The difference between a skipped test and a removed one is that removing
+a test affects the numbers of the following tests, while a skipped test
+is still loaded and thus keeps the test numbers unchanged.
+.PP
+Sometimes user modifications intentionally conflict with tests in the
+default configuration and thus cause test failures. Adding the Ignore
+directive to the failing tests works but is inconvenient as the directive
+is likely to get lost with the next update.
+.PP
+Overwrite conditions are an alternative and can be added in any action
+file as long as the come after the test that is expected to fail.
+They cause all previous tests that match the condition to be skipped.
+.PP
+It is recommended to put the overwrite condition below the custom Privoxy
+section that causes the expected test failure and before the custom test
+that verifies that tests the now expected behaviour. Example:
+.PP
+.Vb 8
+\& # The following section is expected to overwrite a section in
+\& # default.action, whose effect is being tested. Thus also disable
+\& # the test that is now expected to fail and add a new one.
+\& #
+\& {+block{Facebook makes Firefox even more unstable. Do not want.}}
+\& # Overwrite condition = http://apps.facebook.com/onthefarm/track.php?creative=&cat=friendvisit&subcat=weeds&key=a789a971dc687bee4c20c044834fabdd&next=index.php%3Fref%3Dnotif%26visitId%3D898835505
+\& # Blocked URL = http://apps.facebook.com/
+\& .facebook./
+.Ve
+.SH "TEST LEVELS"
+.IX Header "TEST LEVELS"
+All tests have test levels to let the user
+control which ones to execute (see \fIOPTIONS\fR below).
+Test levels are either set with the \fBLevel\fR directive,
+or implicitly through the test type.
+.PP
+Redirect tests default to level 108, block tests to level 7,
+fetch tests to level 6, "Sticky Actions" tests default to
+level 5, tests for trusted CGI requests to level 3 and
+client\-header\-action tests to level 1.
+.PP
+The current redirect test level is above the default
+max\-level value as failed tests will result in outgoing
+connections. Use the \fB\-\-max\-level\fR option to run them
+as well.
+.PP
+The "Default level offset" directive can be used to change
+the default level by a given value. This directive affects
+all tests located after it until the end of the file or a another
+"Default level offset" directive is reached. The purpose of this
+directive is to make it more convenient to skip similar tests in
+a given file without having to remove or disable the tests completely.
+.SH OPTIONS
+.IX Header "OPTIONS"
+\&\fB\-\-check\-bad\-ssl\fR Instead of running the regression tests
+as described above, request pages from badssl.com with bad
+certificates to verify that Privoxy is detecting the
+certificate issues. Only works if Privoxy has been compiled
+with FEATURE_HTTPS_INSPECTION, has been configured properly
+and can reach the Internet.
+.PP
+\&\fB\-\-curl curl\fR Use a non\-default curl binary.
+.PP
+\&\fB\-\-debug bitmask\fR Add the bitmask provided as integer
+to the debug settings.
+.PP
+\&\fB\-\-forks forks\fR Number of forks to start before executing
+the regression tests. This is mainly useful for stress\-testing.
+.PP
+\&\fB\-\-fuzzer\-address\fR Listening address used when executing
+the regression tests. Useful to make sure that the requests
+to load the regression tests don\*(Aqt fail due to fuzzing.
+.PP
+\&\fB\-\-fuzzer\-feeding\fR Ignore some errors that would otherwise
+cause Privoxy\-Regression\-Test to abort the test because
+they shouldn\*(Aqt happen in normal operation. This option is
+intended to be used if Privoxy\-Regression\-Test is only
+used to feed a fuzzer in which case there\*(Aqs a high chance
+that Privoxy gets an invalid request and returns an error
+message.
+.PP
+\&\fB\-\-help\fR Shows available command line options.
+.PP
+\&\fB\-\-header\-fuzzing\fR Modifies linear white space in
+headers in a way that should not affect the test result.
+.PP
+\&\fB\-\-level level\fR Only execute tests with the specified \fBlevel\fR.
+.PP
+\&\fB\-\-local\-test\-file test\-file\fR Do not get the tests
+through Privoxy\*(Aqs web interface, but use a single local
+file. Not recommended for testing Privoxy, but can be useful
+to "misappropriate" Privoxy\-Regression\-Test to test other
+stuff, like webserver configurations.
+.PP
+\&\fB\-\-loop count\fR Loop through the regression tests \fBcount\fR times.
+Useful to feed a fuzzer, or when doing stress tests with
+several Privoxy\-Regression\-Test instances running at the same
+time.
+.PP
+\&\fB\-\-max\-level max\-level\fR Only execute tests with a \fBlevel\fR
+below or equal to the numerical \fBmax\-level\fR.
+.PP
+\&\fB\-\-max\-time max\-time\fR Give Privoxy \fBmax\-time\fR seconds
+to return data. Increasing the default may make sense when
+Privoxy is run through Valgrind, decreasing the default may
+make sense when Privoxy\-Regression\-Test is used to feed
+a fuzzer.
+.PP
+\&\fB\-\-min\-level min\-level\fR Only execute tests with a \fBlevel\fR
+above or equal to the numerical \fBmin\-level\fR.
+If the \fBmin\-level\fR is larger than the \fBmax\-level\fR,
+the \fBmax\-level\fR is set to the \fBmin\-level\fR.
+.PP
+\&\fB\-\-privoxy\-address proxy\-address\fR Privoxy\*(Aqs listening address.
+If it\*(Aqs not set, the value of the environment variable http_proxy
+will be used unless the variable isn\*(Aqt set in which case
+http://127.0.0.1:8118/ will be used. \fBproxy\-address\fR has to
+be specified in http_proxy syntax.
+.PP
+\&\fB\-\-privoxy\-cgi\-prefix privoxy\-cgi\-prefix\fR The prefix to use when
+building URLs that are supposed to reach Privoxy\*(Aqs CGI interface.
+If it\*(Aqs not set, \fBhttp://p.p/\fR is used, which is supposed to work
+with the default Privoxy configuration.
+If Privoxy has been built with \fBFEATURE_HTTPS_INSPECTION\fR enabled,
+and if https inspection is activated with the \fB+https\-inspection\fR
+action, this option can be used with
+\&\fBhttps://p.p/\fR 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
+\&\fBregression\-tests.action\fR file that are expected to fail when
+using a \fBprivoxy\-cgi\-prefix\fR with \fBhttps://\fR and aren\*(Aqt automatically
+skipped.
+.PP
+\&\fB\-\-retries retries\fR Retry \fBretries\fR times.
+.PP
+\&\fB\-\-test\-number test\-number\fR Only run the test with the specified
+number.
+.PP
+\&\fB\-\-show\-skipped\-tests\fR Log skipped tests even if verbose mode is off.
+.PP
+\&\fB\-\-shuffle\-tests\fR Shuffle test sections and their tests before
+executing them. When combined with \fB\-\-forks\fR, this can increase
+the chances of detecting race conditions. Of course some problems
+are easier to detect without this option.
+.PP
+\&\fB\-\-sleep\-time seconds\fR Wait \fBseconds\fR between tests. Useful when
+debugging issues with systems that don\*(Aqt log with millisecond precision.
+.PP
+\&\fB\-\-verbose\fR Log successful tests as well. By default only
+the failures are logged.
+.PP
+\&\fB\-\-version\fR Print version and exit.
+.PP
+The second dash is optional, options can be shortened,
+as long as there are no ambiguities.
+.SH "PRIVOXY CONFIGURATION"
+.IX Header "PRIVOXY CONFIGURATION"
+Privoxy\-Regression\-Test is shipped with \fBregression\-tests.action\fR
+which aims to test all official client\-header modifying actions
+and can be used to verify that the templates and the user manual
+files are installed correctly.
+.PP
+To use it, it has to be copied in Privoxy\*(Aqs configuration
+directory, and afterwards referenced in Privoxy\*(Aqs configuration
+file with the line:
+.PP
+.Vb 1
+\& actionsfile regression\-tests.action
+.Ve
+.PP
+In general, its tests are supposed to work without changing
+any other action files, unless you already added lots of
+taggers yourself. If you are using taggers that cause problems,
+you might have to temporary disable them for Privoxy\*(Aqs CGI pages.
+.PP
+Some of the regression tests rely on Privoxy features that
+may be disabled in your configuration. Tests with a level below
+7 are supposed to work with all Privoxy configurations (provided
+you didn\*(Aqt build with FEATURE_GRACEFUL_TERMINATION).
+.PP
+Tests with level 9 require Privoxy to deliver the User Manual,
+tests with level 12 require the CGI editor to be enabled.
+.SH CAVEATS
+.IX Header "CAVEATS"
+Expect the configuration file syntax to change with future releases.
+.SH LIMITATIONS
+.IX Header "LIMITATIONS"
+As Privoxy\*(Aqs \fBshow\-request\fR page only shows client headers,
+Privoxy\-Regression\-Test can\*(Aqt use it to test Privoxy actions
+that modify server headers.
+.PP
+As Privoxy\-Regression\-Test relies on Privoxy\*(Aqs tag feature to
+control the actions to test, it currently only works with
+Privoxy 3.0.7 or later.
+.PP
+At the moment Privoxy\-Regression\-Test fetches Privoxy\*(Aqs
+configuration page through \fIcurl\fR(1), therefore you have to
+have \fIcurl\fR installed, otherwise you won\*(Aqt be able to run
+Privoxy\-Regression\-Test in a meaningful way.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBprivoxy\fR\|(8) \fBcurl\fR\|(1)
+.SH AUTHOR
+.IX Header "AUTHOR"
+Fabian Keil <fk at fabiankeil.de>
diff --git a/man/uagen.1 b/man/uagen.1
new file mode 100644
index 00000000..dd5fc675
--- /dev/null
+++ b/man/uagen.1
@@ -0,0 +1,232 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
+.\" ========================================================================
+.\"
+.IX Title "UAGEN 1"
+.TH UAGEN 1 2025-11-27 "perl v5.42.2" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+uagen \- A Firefox User\-Agent generator for Privoxy and Mozilla browsers
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+\&\fBuagen\fR [\fB\-\-action\-file\fR \fIaction_file\fR] [\fB\-\-action\-injection\fR]
+[\fB\-\-browser\-release\-date\fR \fIbrowser_release_date\fR]
+[\fB\-\-browser\-revision\fR \fIbrowser_revision\fR]
+[\fB\-\-browser\-version\fR \fIbrowser_version\fR]
+[\fB\-\-clean\-prefs\-file\fR]
+[\fB\-\-help\fR] [\fB\-\-language\-overwrite\fR \fIlanguage(s)\fR]
+[\fB\-\-logfile\fR \fIlogfile\fR] [\fB\-\-loop\fR] [\fB\-\-no\-action\-file\fR] [\fB\-\-no\-logfile\fR]
+[\fB\-\-prefs\-file\fR \fIprefs_file\fR] [\fB\-\-randomize\-release\-date\fR]
+[\fB\-\-quiet\fR] [\fB\-\-sleeping\-time\fR \fIminutes\fR] [\fB\-\-silent\fR] [\fB\-\-version\fR]
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+\&\fBuagen\fR generates a fake Firefox User\-Agent and writes it into a Privoxy action file
+as parameter for Privoxy\*(Aqs \fBhide\-user\-agent\fR action. Operating system, architecture,
+platform, language and, optionally, the build date are randomized.
+.PP
+The generated language is also used as parameter for the
+\&\fBhide\-accept\-language\fR action which is understood by Privoxy since
+version 3.0.5 beta.
+.PP
+Additionally the User\-Agent can be written into prefs.js files which are
+used by many Mozilla browsers.
+.SH OPTIONS
+.IX Header "OPTIONS"
+\&\fB\-\-action\-file\fR \fIaction_file\fR Privoxy action file to write the
+generated actions into. Default is /etc/privoxy/user\-agent.action.
+.PP
+\&\fB\-\-action\-injection\fR Don\*(Aqt generate a new action file from scratch,
+but read an old one and just replace the action values. Useful
+to keep custom URL patterns. For this to work, the action file
+has to be already present. \fBuagen\fR neither checks the syntax
+nor cares if all actions are present. Garbage in, garbage out.
+.PP
+\&\fB\-\-browser\-release\-date\fR \fIbrowser_release_date\fR Date to use.
+The format is YYYYMMDD. Some sanity checks are done, but you
+shouldn\*(Aqt rely on them. Note that the Mozilla project has frozen
+the "Gecko token" starting with Firefox 4 so using a different
+one than the default is somewhat suspicious.
+.PP
+\&\fB\-\-browser\-revision\fR \fIbrowser_revision\fR Use a custom revision.
+\&\fBuagen\fR will use it without any sanity checks.
+.PP
+\&\fB\-\-browser\-version\fR \fIbrowser_version\fR Use a custom browser version.
+\&\fBuagen\fR will use it without any sanity checks.
+.PP
+\&\fB\-\-clean\-prefs\-file\fR The \fIprefs_file\fR is read and the variables
+\&\fBgeneral.useragent.override\fR and \fBintl.accept_languages\fR are removed.
+Only effective if \fIprefs_file\fR is set, and only useful if you want
+to use the browser\*(Aqs defaults again.
+.PP
+\&\fB\-\-help\fR List command line options and exit.
+.PP
+\&\fB\-\-language\-overwrite\fR \fIlanguage(s)\fR Comma separated list of language codes
+to overwrite the default values. \fBuagen\fR chooses one of them for the generated
+User\-Agent, by default the chosen language in lower cases is also used as
+\&\fBhide\-accept\-language\fR parameter.
+.PP
+\&\fB\-\-logfile\fR \fIlogfile\fR Logfile to save error messages and the generated
+User\-Agents. Default is /var/log/uagen.log.
+.PP
+\&\fB\-\-loop\fR Don\*(Aqt exit after the generation of the action file. Sleep for
+a while and generate a new one instead. Useful if you don\*(Aqt have \fBcron\fR\|(8).
+.PP
+\&\fB\-\-no\-logfile\fR Don\*(Aqt log anything.
+.PP
+\&\fB\-\-no\-action\-file\fR Don\*(Aqt write the action file.
+.PP
+\&\fB\-\-no\-hide\-accept\-language\fR Stay compatible with Privoxy 3.0.3
+and don\*(Aqt generate the \fBhide\-accept\-language\fR action line. You should
+really update your Privoxy version instead.
+.PP
+\&\fB\-\-prefs\-file\fR \fIprefs_file\fR Use the generated User\-Agent to set the
+\&\fBgeneral.useragent.override\fR variable in the Mozilla preference file
+\&\fIprefs_file\fR, The \fBintl.accept_languages\fR variable will be set as well.
+.PP
+Firefox\*(Aqs preference file is usually located in
+~/.mozilla/firefox/*.default/prefs.js. Note that Firefox doesn\*(Aqt reread
+the file once it is running.
+.PP
+\&\fB\-\-randomize\-release\-date\fR Randomly pick a date between the configured
+release date and the actual date. Note that Firefox versions after 4.0
+no longer provide the build date in the User\-Agent header, so if you
+randomize the date anyway, it will be obvious that the generated User\-Agent
+is fake.
+.PP
+\&\fB\-\-quiet\fR Don\*(Aqt print the generated User\-Agent to the console.
+.PP
+\&\fB\-\-sleeping\-time\fR \fIminutes\fR Time to sleep. Only effective if used with \fB\-\-loop\fR.
+.PP
+\&\fB\-\-silent\fR Don\*(Aqt print the generated User\-Agent to the console.
+.PP
+\&\fB\-\-version\fR Print version and exit.
+.PP
+The second dash is optional, options can be shortened, as long as there are
+no ambiguities.
+.SH "PRIVOXY CONFIGURATION"
+.IX Header "PRIVOXY CONFIGURATION"
+In Privoxy\*(Aqs configuration file the line:
+.PP
+.Vb 1
+\& actionsfile user\-agent.action
+.Ve
+.PP
+should be added after:
+.PP
+.Vb 1
+\& actionfile default.action
+.Ve
+.PP
+and before:
+.PP
+.Vb 1
+\& actionfile user.action
+.Ve
+.PP
+This way the user can still use custom User\-Agents
+in \fIuser.action\fR. \fIuser\-agent\fR has to be the name
+of the generated action file.
+.PP
+If you are using Privoxy 3.0.6 or earlier, don\*(Aqt add the ".action" extension.
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+Without any options, \fBuagen\fR creates an action file like:
+.PP
+.Vb 4
+\& {+hide\-accept\-language{en\-ca} \e
+\& +hide\-user\-agent{Mozilla/5.0 (X11; U; OpenBSD i386; en\-CA; rv:1.8.0.4) Gecko/20060628 Firefox/1.5.0.4} \e
+\& }
+\& /
+.Ve
+.PP
+with the \-\-no\-accept\-language option the generated file
+could look like this one:
+.PP
+.Vb 3
+\& {+hide\-user\-agent{Mozilla/5.0 (X11; U; FreeBSD i386; de\-DE; rv:1.8.0.4) Gecko/20060720 Firefox/1.5.0.4} \e
+\& }
+\& /
+.Ve
+.SH CAVEATS
+.IX Header "CAVEATS"
+Use the https\-inspection action to make sure Privoxy can modify
+the browser\*(Aqs headers for encrypted traffic as well.
+.PP
+Mozilla users can alter the browser\*(Aqs User\-Agent with the
+\&\fB\-\-prefs\-file\fR option. But note that the preference file is only read
+on startup. If the browser is already running, \fBuagen\*(Aqs\fR changes will be ignored.
+.PP
+Hiding the User\-Agent is pointless if the browser accepts all
+cookies or even is configured for remote maintenance through Flash,
+JavaScript, Java or similar security problems.
+.SH BUGS
+.IX Header "BUGS"
+Some parameters can\*(Aqt be specified at the command line.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBprivoxy\fR\|(8)
+.SH AUTHOR
+.IX Header "AUTHOR"
+Fabian Keil <fk at fabiankeil.de>
+.PP
+https://www.fabiankeil.de/sourcecode/uagen/
+.PP
+https://www.fabiankeil.de/blog\-surrogat/2006/01/26/firefox\-user\-agent\-generator.html (German)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Privoxy-commits
mailing list