Package: rsyslog Version: 8.2412.0-1 Severity: minor Tags: patch * What led up to the situation?
Checking for defects with a new version test-[g|n]roff -mandoc -t -K utf8 -rF0 -rHY=0 -rCHECKSTYLE=10 -ww -z < "man page" [Use "groff -e ' $' -e '\\~$' <file>" to find obvious trailing spaces.] ["test-groff" is a script in the repository for "groff"; is not shipped] (local copy and "troff" slightly changed by me). [The fate of "test-nroff" was decided in groff bug #55941.] * What was the outcome of this action? Output from "test-groff -mandoc -t -K utf8 -rF0 -rHY=0 -rCHECKSTYLE=10 -ww -z ": troff:<stdin>:59: warning: trailing space in the line an.tmac:<stdin>:93: warning: cannot nest .TP or .TQ inside .TP; supply a tag [Repeated lines of type:] troff:<stdin>:133: warning: trailing space in the line an.tmac:<stdin>:375: style: 3 leading space(s) on input line an.tmac:<stdin>:377: style: 3 leading space(s) on input line an.tmac:<stdin>:379: style: 3 leading space(s) on input line an.tmac:<stdin>:380: style: unbalanced .RE an.tmac:<stdin>:791: style: use of deprecated macro: .PD Extra output from "test-nroff ..." troff:<stdin>:540: warning [page 8, line 28]: cannot break line * What outcome did you expect instead? No output (no warnings). -.- General remarks and further material, if a diff-file exist, are in the attachments. -- System Information: Debian Release: trixie/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Kernel: Linux 6.12.12-amd64 (SMP w/2 CPU threads; PREEMPT) Locale: LANG=is_IS.iso88591, LC_CTYPE=is_IS.iso88591 (charmap=ISO-8859-1), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: sysvinit (via /sbin/init) Versions of packages rsyslog depends on: ii libc6 2.40-6 ii libestr0 0.1.11-1+b2 ii libfastjson4 1.2304.0-2 ii liblognorm5 2.0.6-4+b3 ii libsystemd0 257.2-3 ii libuuid1 2.40.4-3 ii libzstd1 1.5.6+dfsg-2 ii zlib1g 1:1.3.dfsg+really1.3.1-1+b1 Versions of packages rsyslog recommends: ii logrotate 3.22.0-1 Versions of packages rsyslog suggests: ii rsyslog-doc 8.2412.0+dfsg-1 pn rsyslog-gssapi <none> pn rsyslog-mongodb <none> pn rsyslog-mysql | rsyslog-pgsql <none> pn rsyslog-openssl | rsyslog-gnutls <none> pn rsyslog-relp <none> -- no debconf information
Input file is rsyslog.conf.5 Output from "mandoc -T lint rsyslog.conf.5": (shortened list) Remove trailing space with: sed -e 's/ *$//' Many lines of type: 1 input text line longer than 80 bytes: ("\'" and "\\") insi... -.- 1 line scope broken: TP breaks TP 1 skipping end of block that is not open: RE 1 skipping paragraph macro: br before sp 1 undefined escape, printing literally: \7 1 undefined escape, printing literally: \\ 129 whitespace at end of input line -.-. Output from "test-groff -mandoc -t -ww -z rsyslog.conf.5": (shortened list) Remove trailing space with: sed -e 's/ *$//' 1 cannot nest .TP or .TQ inside .TP; supply a tag 118 trailing space in the line -.-. Remove space characters (whitespace) at the end of lines. Use "git apply ... --whitespace=fix" to fix extra space issues, or use global configuration "core.whitespace". Number of lines affected is 126 -.-. Use "\e" to print the escape character instead of "\\" (which gets interpreted in copy mode). 446:contains a template. The backslash is an escape character. For example, \\7 rings the 447:bell (this is an ASCII value), \\n is a new line. The set in rsyslog is a bit restricted 458: % = \\% 460: \\ = \\\\ --> '\\' is used to escape (as in C) 462:$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\\n" 490:("\'" and "\\") inside each field. Please note that in MySQL configuration, the NO_BACKSLASH_ESCAPES 534:%syslogtag%%msg:::drop-last-lf%\\n" 542:%syslogtag%,%msg%\\n" 554:$template usermsg," XXXX%syslogtag%%msg%\\n\\r" 560:$template wallmsg,"\\r\\n\\7Message from syslogd@%HOSTNAME% at %timegenerated%" 569:into systemevents\\r\\n", SQL 731:expression is: "%msg:R:.*Sev:. \\(.*\\) \\[.*--end%" -.-. Change a HYPHEN-MINUS (code 0x2D) to a minus(-dash) (\-), if it is in front of a name for an option, is a symbol for standard input, is a single character used to indicate an option, or is in the NAME section (man-pages(7)). N.B. - (0x2D), processed as a UTF-8 file, is changed to a hyphen (0x2010, groff \[u2010] or \[hy]) in the output. 78:Input plugin for UDP syslog. Replaces the deprecated -r option. Can be 86:Input plugin for plain TCP syslog. Replaces the deprecated -t 262:file path with a minus sign ("-"). 728:by the string "--end". It denotes the end of the regular expression and will not become part of it. 731:expression is: "%msg:R:.*Sev:. \\(.*\\) \\[.*--end%" -.-. Find a repeated word ! 357 --> all -.-. Add a "\&" after "e.g." and "i.e.", or use English words (man-pages(7)). Abbreviation points should be protected against being interpreted as an end of sentence, if they are not, and that independent of the current place on the line. 175:specifies the subsystem that produced the message, i.e. all mail programs log 356:must start with a $-sign, e.g. if you would like to bind your output channel definition "mychannel" 610:or manipulate the value, e.g. by converting all characters to lower case. 649:the PRI part of the message in a textual form (e.g. "syslog.info") 719:(e.g. %msg:10:$%, which will extract from position 10 to the end of the string). -.-. Wrong distance between sentences in the input file. Separate the sentences and subordinate clauses; each begins on a new line. See man-pages(7) ("Conventions for source file layout") and "info groff" ("Input Conventions"). The best procedure is to always start a new sentence on a new line, at least, if you are typing on a computer. Remember coding: Only one command ("sentence") on each (logical) line. E-mail: Easier to quote exactly the relevant lines. Generally: Easier to edit the sentence. Patches: Less unaffected text. Search for two adjacent words is easier, when they belong to the same line, and the same phrase. The amount of space between sentences in the output can then be controlled with the ".ss" request. Mark a final abbreviation point as such by suffixing it with "\&". Some sentences (etc.) do not begin on a new line. N.B. The number of lines affected can be too large to be in a patch. [List of affected lines removed] -.- Split lines longer than 80 characters into two or more lines. Appropriate break points are the end of a sentence and a subordinate clause; after punctuation marks. N.B. The number of lines affected can be too large to be in a patch. [List of affected lines removed] -.- Use \(en (en-dash) for a dash at the beginning (en) of a line, or between space characters, not a minus (\-) or a hyphen (-), except in the NAME section. rsyslog.conf.5:334:use any other schema of your liking - you just need to define a proper template and assign this rsyslog.conf.5:432:Every output in rsyslog uses templates - this holds true for files, user rsyslog.conf.5:479:See details below. Be sure NOT to mistake template options with property options - the rsyslog.conf.5:517:vulnerable to SQL injection. The sql option can also be useful with files - rsyslog.conf.5:520:it - among others, it takes some toll on the processing time. Not much, but on rsyslog.conf.5:646:PRI part of the message - undecoded (single value) rsyslog.conf.5:652:the monitorware InfoUnitType - used when talking to a MonitorWare backend (also for phpLogCon) rsyslog.conf.5:655:the facility from the message - in numerical form rsyslog.conf.5:658:the facility from the message - in text form rsyslog.conf.5:661:severity from the message - in numerical form rsyslog.conf.5:664:severity from the message - in text form rsyslog.conf.5:777:drop control characters - the resulting string will neither contain control characters, escape sequences nor any other replacement character like space. -.-. The name of a man page is typeset in bold and the section in roman (see man-pages(7)). 167:Both facilities and priorities are described in syslog(3). The names mentioned 187:In addition to the above mentioned names the rsyslogd(8) understands the 265:This version of rsyslogd(8) has support for logging output to named pipes (fifos). A fifo or 268:the mkfifo(1) command before rsyslogd(8) is started. 328:is happening with the system. To specify this wall(1)-feature use an ":omusrmsg:*". -.-. Put a parenthetical sentence, phrase on a separate line, if not part of a code. See man-pages(7), item "semantic newline". Not considered in a patch, too many lines. [List of affected lines removed] -.- FSF office address update. See https://lists.gnu.org/archive/html/bug-gnulib/2024-09/msg00004.html 18:.\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. -.-. Use a character "\(->" instead of plain "->" or "\->". 460: \\ = \\\\ --> '\\' is used to escape (as in C) -.-. Use ".na" (no adjustment) instead of ".ad l" (and ".ad" to begin the same adjustment again as before). 566:.ad l -.-. Space character after a macro call. 422:.RS 486:.TP 493:.TP -.-. Trailing space in a macro call. 383:.B Selectors are the traditional way of filtering syslog messages. 504:.B stdsql 506:.B MUST 726:.B must -.-. Output from "test-groff -mandoc -t -K utf8 -rF0 -rHY=0 -rCHECKSTYLE=10 -ww -z ": troff:<stdin>:59: warning: trailing space in the line an.tmac:<stdin>:93: warning: cannot nest .TP or .TQ inside .TP; supply a tag [Removed many lines of type:] troff:<stdin>:133: warning: trailing space in the line an.tmac:<stdin>:375: style: 3 leading space(s) on input line an.tmac:<stdin>:377: style: 3 leading space(s) on input line an.tmac:<stdin>:379: style: 3 leading space(s) on input line an.tmac:<stdin>:380: style: unbalanced .RE an.tmac:<stdin>:458: style: 3 leading space(s) on input line an.tmac:<stdin>:460: style: 3 leading space(s) on input line an.tmac:<stdin>:791: style: use of deprecated macro: .PD Extra output from "test-nroff -mandoc -t -K utf8 -rF0 -rHY=0 -rCHECKSTYLE=10 -ww -z ": troff:<stdin>:540: warning [page 8, line 28]: cannot break line
--- rsyslog.conf.5 2025-02-15 06:48:09.528495200 +0000 +++ rsyslog.conf.5.new 2025-02-15 07:47:15.885554553 +0000 @@ -75,7 +75,7 @@ SQLite, Ingres, Oracle, mSQL) Input module for text files .TP .I imudp -Input plugin for UDP syslog. Replaces the deprecated -r option. Can be +Input plugin for UDP syslog. Replaces the deprecated \-r option. Can be used like this: .IP $ModLoad imudp @@ -83,14 +83,13 @@ $ModLoad imudp $UDPServerRun 514 .TP .I imtcp -Input plugin for plain TCP syslog. Replaces the deprecated -t +Input plugin for plain TCP syslog. Replaces the deprecated \-t option. Can be used like this: .IP $ModLoad imtcp .IP $InputTCPServerRun 514 .TP -.TP .I imrelp Input plugin for the RELP protocol. RELP can be used instead of UDP or plain TCP syslog to provide reliable delivery of @@ -164,7 +163,9 @@ a pattern of facilities and priorities b The selector field itself again consists of two parts, a facility and a priority, separated by a period ('.'). Both parts are case insensitive and can also be specified as decimal numbers, but don't do that, you have been warned. -Both facilities and priorities are described in syslog(3). The names mentioned +Both facilities and priorities are described in +.BR syslog (3). +The names mentioned below correspond to the similar LOG_-values in /usr/include/syslog.h. The facility is one of the following keywords: auth, authpriv, cron, daemon, @@ -172,7 +173,7 @@ kern, lpr, mail, mark, news, security (s local0 through local7. The keyword security should not be used anymore and mark is only for internal use and therefore should not be used in applications. Anyway, you may want to specify and redirect these messages here. The facility -specifies the subsystem that produced the message, i.e. all mail programs log +specifies the subsystem that produced the message, i.e.\& all mail programs log with the mail facility (LOG_MAIL) if they log using syslog. The priority is one of the following keywords, in ascending order: debug, info, @@ -184,7 +185,9 @@ The behavior of the original BSD syslogd priority and higher are logged according to the given action. Rsyslogd behaves the same, but has some extensions. -In addition to the above mentioned names the rsyslogd(8) understands the +In addition to the above mentioned names the +.BR rsyslogd (8) +understands the following extensions: An asterisk ('*') stands for all facilities or all priorities, depending on where it is used (before or after the period). The keyword none stands for no priority of the given facility. @@ -259,13 +262,17 @@ directive or the "sync" parameter to omf degrades performance and it is advised not to enable syncing unless you know what you are doing. To selectively disable syncing for certain files, you may prefix the -file path with a minus sign ("-"). +file path with a minus sign ("\-"). .SS Named pipes -This version of rsyslogd(8) has support for logging output to named pipes (fifos). A fifo or +This version of +.BR rsyslogd (8) +has support for logging output to named pipes (fifos). A fifo or named pipe can be used as a destination for log messages by prepending a pipe symbol ('|') to the name of the file. This is handy for debugging. Note that the fifo must be created with -the mkfifo(1) command before rsyslogd(8) is started. +the +.BR mkfifo (1) +command before rsyslogd(8) is started. .SS Terminal and console If the file you specified is a tty, special tty-handling is done, same with /dev/console. @@ -325,13 +332,15 @@ get the message (for example: ":omusrmsg .SS Everyone logged on Emergency messages often go to all users currently online to notify them that something strange -is happening with the system. To specify this wall(1)-feature use an ":omusrmsg:*". +is happening with the system. To specify this +.BR wall (1)-feature +use an ":omusrmsg:*". .SS Database table This allows logging of the message to a database table. By default, a MonitorWare-compatible schema is required for this to work. You can create that schema with the createDB.SQL file that came with the rsyslog package. You can also -use any other schema of your liking - you just need to define a proper template and assign this +use any other schema of your liking \(en you just need to define a proper template and assign this template to the action. See the HTML documentation for further details on database logging. @@ -353,8 +362,8 @@ Discard is just the single 'stop' comman .SS Output channel Binds an output channel definition (see there for details) to this action. Output channel actions -must start with a $-sign, e.g. if you would like to bind your output channel definition "mychannel" -to the action, use "$mychannel". Output channels support template definitions like all all other +must start with a $-sign, e.g.\& if you would like to bind your output channel definition "mychannel" +to the action, use "$mychannel". Output channels support template definitions like all other actions. .SS Shell execute @@ -380,7 +389,7 @@ Rsyslog offers three different types "fi .RE .SS Selectors -.B Selectors are the traditional way of filtering syslog messages. +.B Selectors are the traditional way of filtering syslog messages. They have been kept in rsyslog with their original syntax, because it is well-known, highly effective and also needed for compatibility with stock syslogd configuration files. If you just need to filter based on priority and facility, you should do this with selector lines. They are @@ -419,7 +428,7 @@ Checks if the value is found exactly at .RE .sp .B regex -.RS +.RS Compares the property against the provided regular expression. .RE @@ -429,7 +438,7 @@ See the HTML documentation for this feat .SH TEMPLATES -Every output in rsyslog uses templates - this holds true for files, user +Every output in rsyslog uses templates \(en this holds true for files, user messages and so on. Templates compatible with the stock syslogd formats are hardcoded into rsyslogd. If no template is specified, we use one of these hardcoded templates. Search for "template_" in syslogd.c and @@ -439,12 +448,12 @@ A template consists of a template direct and optional options. A sample is: .RS -.B $template MyTemplateName,"\\\\7Text %property% some more text\\\\n",<options> +.B $template MyTemplateName,"\e\e7Text %property% some more text\e\en",<options> .RE The "$template" is the template directive. It tells rsyslog that this line -contains a template. The backslash is an escape character. For example, \\7 rings the -bell (this is an ASCII value), \\n is a new line. The set in rsyslog is a bit restricted +contains a template. The backslash is an escape character. For example, \e7 rings the +bell (this is an ASCII value), \en is a new line. The set in rsyslog is a bit restricted currently. All text in the template is used literally, except for things within percent @@ -455,11 +464,11 @@ section of this manpage. To escape: .sp 0 - % = \\% + % = \e% .sp 0 - \\ = \\\\ --> '\\' is used to escape (as in C) + \e = \e\e \(-> '\e' is used to escape (as in C) .sp 0 -$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\\n" +$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\en" Properties can be accessed by the property replacer (see there for details). @@ -476,21 +485,21 @@ result in something like "/var/log/syste .SS Template options The <options> part is optional. It carries options influencing the template as whole. -See details below. Be sure NOT to mistake template options with property options - the +See details below. Be sure NOT to mistake template options with property options \(en the later ones are processed by the property replacer and apply to a SINGLE property, only (and not the whole template). Template options are case-insensitive. Currently defined are: .RS -.TP +.TP sql format the string suitable for a SQL statement in MySQL format. This will replace single quotes ("'") and the backslash character by their backslash-escaped counterpart -("\'" and "\\") inside each field. Please note that in MySQL configuration, the NO_BACKSLASH_ESCAPES +("\'" and "\e") inside each field. Please note that in MySQL configuration, the NO_BACKSLASH_ESCAPES mode must be turned off for this format to work (this is the default). -.TP +.TP stdsql format the string suitable for a SQL statement that is to be sent to a standards-compliant sql server. This will replace single quotes ("'") by two single quotes ("''") inside each field. @@ -501,7 +510,7 @@ is turned on. Either the .B sql or -.B stdsql +.B stdsql option .B MUST be specified when a template is used for writing to a database, @@ -514,10 +523,10 @@ So you yourself must make sure you are u Please note that the database writer *checks* that the sql option is present in the template. If it is not present, the write database action is disabled. This is to guard you against accidental forgetting it and then becoming -vulnerable to SQL injection. The sql option can also be useful with files - +vulnerable to SQL injection. The sql option can also be useful with files \(en especially if you want to import them into a database on another machine for performance reasons. However, do NOT use it if you do not have a real need for -it - among others, it takes some toll on the processing time. Not much, but on +it \(en among others, it takes some toll on the processing time. Not much, but on a really busy system you might notice it ;) The default template for the write to database action has the sql option set. @@ -531,15 +540,15 @@ A template that resembles traditional sy .RS $template TraditionalFormat,"%timegenerated% %HOSTNAME% .sp 0 -%syslogtag%%msg:::drop-last-lf%\\n" +%syslogtag%%msg:::drop-last-lf%\en" .RE A template that tells you a little more about the message: .sp .RS -$template precise,"%syslogpriority%,%syslogfacility%,%timegenerated%,%HOSTNAME%, +$template precise,"%syslogpriority%,%syslogfacility%,%timegenerated%, .sp 0 -%syslogtag%,%msg%\\n" +%HOSTNAME%,%syslogtag%,%msg%\en" .RE A template for RFC 3164 format: @@ -551,22 +560,22 @@ $template RFC3164fmt,"<%PRI%>%TIMESTAMP% A template for the format traditionally used for user messages: .sp .RS -$template usermsg," XXXX%syslogtag%%msg%\\n\\r" +$template usermsg," XXXX%syslogtag%%msg%\en\er" .RE And a template with the traditional wall-message format: .sp .RS -$template wallmsg,"\\r\\n\\7Message from syslogd@%HOSTNAME% at %timegenerated%" +$template wallmsg,"\er\en\e7Message from syslogd@%HOSTNAME% at %timegenerated%" .RE .B A template that can be used for writing to a database (please note the SQL template option) .sp .RS -.ad l +.na $template MySQLInsert,"insert iut, message, receivedat values ('%iut%', '%msg:::UPPERCASE%', '%timegenerated:::date-mysql%') -into systemevents\\r\\n", SQL +into systemevents\er\en", SQL NOTE 1: This template is embedded into core application under name .B StdDBFmt @@ -607,7 +616,7 @@ name plus ":omfile:$" in front of it. A The property replacer is a core component in rsyslogd's output system. A syslog message has a number of well-defined properties (see below). Each of this properties can be accessed and manipulated by the property replacer. With it, it is easy to use only part of a property value -or manipulate the value, e.g. by converting all characters to lower case. +or manipulate the value, e.g.\& by converting all characters to lower case. .SS Accessing Properties Syslog message properties are used inside templates. They are accessed by putting them between @@ -643,25 +652,25 @@ the "static" part of the tag, as defined programname is "named". .TP .B PRI -PRI part of the message - undecoded (single value) +PRI part of the message \(en undecoded (single value) .TP .B PRI-text -the PRI part of the message in a textual form (e.g. "syslog.info") +the PRI part of the message in a textual form (e.g.\& "syslog.info") .TP .B IUT -the monitorware InfoUnitType - used when talking to a MonitorWare backend (also for phpLogCon) +the monitorware InfoUnitType \(en used when talking to a MonitorWare backend (also for phpLogCon) .TP .B syslogfacility -the facility from the message - in numerical form +the facility from the message \(en in numerical form .TP .B syslogfacility-text -the facility from the message - in text form +the facility from the message \(en in text form .TP .B syslogseverity -severity from the message - in numerical form +severity from the message \(en in numerical form .TP .B syslogseverity-text -severity from the message - in text form +severity from the message \(en in text form .TP .B timegenerated timestamp when the message was RECEIVED. Always in high resolution @@ -716,19 +725,19 @@ the message text, you can use this synta but you want to specify options, you still need to include the colons. For example, if you would like to convert the full message text to lower case, use "%msg:::lowercase%". If you would like to extract from a position until the end of the string, you can place a dollar-sign ("$") in toChar -(e.g. %msg:10:$%, which will extract from position 10 to the end of the string). +(e.g.\& %msg:10:$%, which will extract from position 10 to the end of the string). There is also support for .B regular expressions. To use them, you need to place a "R" into FromChar. This tells rsyslog that a regular expression instead of position-based extraction is desired. The actual regular expression -.B must +.B must then be provided in toChar. The regular expression must be followed -by the string "--end". It denotes the end of the regular expression and will not become part of it. +by the string "\-\-end". It denotes the end of the regular expression and will not become part of it. If you are using regular expressions, the property replacer will return the part of the property text that matches the regular expression. An example for a property replacer sequence with a regular -expression is: "%msg:R:.*Sev:. \\(.*\\) \\[.*--end%" +expression is: "%msg:R:.*Sev:. \e(.*\e) \e[.*\-\-end%" Also, extraction can be done based on so-called "fields". To do so, place a "F" into FromChar. A field in its current definition is anything that is delimited by a delimiter character. The delimiter by @@ -774,7 +783,7 @@ space-cc replace control characters by spaces .TP drop-cc -drop control characters - the resulting string will neither contain control characters, escape sequences nor any other replacement character like space. +drop control characters \(en the resulting string will neither contain control characters, escape sequences nor any other replacement character like space. .SH QUEUED OPERATIONS Rsyslogd supports queued operations to handle offline outputs
Any program (person), that produces man pages, should check the output for defects by using (both groff and nroff) [gn]roff -mandoc -t -ww -b -z -K utf8 <man page> The same goes for man pages that are used as an input. For a style guide use mandoc -T lint -.- Any "autogenerator" should check its products with the above mentioned 'groff', 'mandoc', and additionally with 'nroff ...'. It should also check its input files for too long (> 80) lines. This is just a simple quality control measure. The "autogenerator" may have to be corrected to get a better man page, the source file may, and any additional file may. Common defects: Not removing trailing spaces (in in- and output). The reason for these trailing spaces should be found and eliminated. "git" has a "tool" to point out whitespace, see for example "git-apply(1)" and git-config(1)") Not beginning each input sentence on a new line. Line length and patch size should thus be reduced. The script "reportbug" uses 'quoted-printable' encoding when a line is longer than 1024 characters in an 'ascii' file. See man-pages(7), item "semantic newline". -.- The difference between the formatted output of the original and patched file can be seen with: nroff -mandoc <file1> > <out1> nroff -mandoc <file2> > <out2> diff -d -u <out1> <out2> and for groff, using \"printf '%s\n%s\n' '.kern 0' '.ss 12 0' | groff -mandoc -Z - \" instead of 'nroff -mandoc' Add the option '-t', if the file contains a table. Read the output from 'diff -d -u ...' with 'less -R' or similar. -.-. If 'man' (man-db) is used to check the manual for warnings, the following must be set: The option \"-warnings=w\" The environmental variable: export MAN_KEEP_STDERR=yes (or any non-empty value) or (produce only warnings): export MANROFFOPT=\"-ww -b -z\" export MAN_KEEP_STDERR=yes (or any non-empty value) -.-