summaryrefslogtreecommitdiffstats
path: root/mantools
diff options
context:
space:
mode:
Diffstat (limited to 'mantools')
-rw-r--r--mantools/README38
-rwxr-xr-xmantools/ccformat207
-rwxr-xr-xmantools/check-postlink57
-rwxr-xr-xmantools/dehtml9
-rwxr-xr-xmantools/docparam378
-rwxr-xr-xmantools/docuseparam5
-rwxr-xr-xmantools/double10
-rwxr-xr-xmantools/enter145
-rwxr-xr-xmantools/find-fluff7
-rwxr-xr-xmantools/fixman257
-rw-r--r--mantools/get_anchors.pl50
-rwxr-xr-xmantools/hchangered40
-rwxr-xr-xmantools/html2readme31
-rwxr-xr-xmantools/make-relnotes85
-rwxr-xr-xmantools/make_soho_readme85
-rwxr-xr-xmantools/makemanidx97
-rwxr-xr-xmantools/makepostconf61
-rwxr-xr-xmantools/makepostconflinks29
-rwxr-xr-xmantools/makereadme13
-rwxr-xr-xmantools/man2html48
-rw-r--r--mantools/mandouble7
-rwxr-xr-xmantools/manlint165
-rw-r--r--mantools/manlint.stop113
-rwxr-xr-xmantools/mansect125
-rw-r--r--mantools/manspell7
-rwxr-xr-xmantools/missing-proxy-read-maps56
-rwxr-xr-xmantools/postconf2html99
-rwxr-xr-xmantools/postconf2man94
-rwxr-xr-xmantools/postconffix72
-rwxr-xr-xmantools/postlink1237
-rwxr-xr-xmantools/postlink.sed603
-rwxr-xr-xmantools/readme2html36
-rwxr-xr-xmantools/specmiss27
-rwxr-xr-xmantools/spell10
-rwxr-xr-xmantools/srctoman211
-rwxr-xr-xmantools/useparam368
-rwxr-xr-xmantools/user2var13
-rwxr-xr-xmantools/var2user13
-rwxr-xr-xmantools/xpostconf153
-rwxr-xr-xmantools/xpostdef121
40 files changed, 5182 insertions, 0 deletions
diff --git a/mantools/README b/mantools/README
new file mode 100644
index 0000000..7b95fa9
--- /dev/null
+++ b/mantools/README
@@ -0,0 +1,38 @@
+Scripts and tools to format embedded manual pages, or to format C
+source code files. Each has an embedded man page in the source.
+
+ccformat c code formatter
+ usage: ccformat (copy stdin to stdout)
+ usage: ccformat files... (format files in place)
+
+enter set project-specific environment
+ usage: enter project-name
+
+mansect extract manual page section from source file
+ usage: mansect file.suffix
+ usage: mansect -type file
+
+srctoman extract man page from source file
+ usage: srctoman file.suffix
+ usage: srctoman -type file
+
+man2html quick script to htmlize nroff -man output
+
+postlink quick script to hyperlink HTML text
+
+See the proto/README file for the following tools that generate
+HTML and ASCII forms of README documents and of some manual pages.
+
+fixman quick hack to patch postconf.proto text into C sorce
+
+makereadme create README_FILES table of contents (AAAREADME)
+
+html2readme convert HTML to README file
+
+postconf2html postconf.proto -> postconf.5.html
+
+postconf2man postconf.proto -> postconf.5 (nroff input)
+
+xpostconf extract selected sections from postconf.proto
+
+xpostdef re-compute the defaults in postconf.proto
diff --git a/mantools/ccformat b/mantools/ccformat
new file mode 100755
index 0000000..9ac6c57
--- /dev/null
+++ b/mantools/ccformat
@@ -0,0 +1,207 @@
+#!/bin/sh
+
+# ccformat - convert C code to standard format
+
+# @(#) ccformat.sh 1.3 11/5/89 14:39:29
+
+# how to suppress newlines in echo
+
+case `echo -n` in
+"") n=-n; c=;;
+ *) n=; c='\c';;
+esac
+
+# initialize
+
+TMPF=/tmp/ccformat.$$
+ERROR=
+TROFF=
+BCK=
+FLAGS="-st -di8 -npsl -bap -bad -bbb -nbc -i4 -d0 -nip -nfc1 -cd41 -c49"
+
+trap 'rm -f .ind.$$ $TMPF; exit 1' 1 2 3 15
+
+# parse command options
+
+while :
+do
+ case $1 in
+ -t) TROFF=-troff;;
+ -b) case $# in
+ 1) ERROR="-b option requires backup argument"; break;;
+ *) BCK=$2; shift;;
+ esac;;
+ -T) case $# in
+ 1) ERROR="-T option requires typename argument"; break;;
+ *) FLAGS="$FLAGS -T$2"; shift;;
+ esac;;
+ -*) ERROR="invalid option: $1"; break;;
+ *) break;;
+ esac
+ shift
+done
+
+# check for invalid commands
+
+test -z "$ERROR" || {
+ echo "$0: $ERROR" 1>&2
+ echo "usage: $0 [-b backup] [-t] [-T typename] [file(s)]" 1>&2
+ exit 1; }
+
+# format the files
+
+case $# in
+ 0) indent $TROFF $FLAGS;;
+ *) case "$TROFF" in
+-troff) for i in $*
+ do
+ indent $TROFF $FLAGS $i
+ done;;
+ *) for i in $*
+ do
+ echo $n $i... $c
+ test -z "$BCK" || cp $i $i"$BCK" || { echo backup FAILED; exit 1; }
+ { # some versions of indent return garbage exit status -- gack!
+ (indent $FLAGS <$i 2>.ind.$$ >$TMPF || test ! -s .ind.$$) >$TMPF &&
+ # try a device full check
+ # echo >>$TMPF &&
+ (
+ # ignore interrupts while we overwrite the original file
+ trap '' 1 2 3 15; cp $TMPF $i
+ ) && echo replaced; } || { echo replacement FAILED; exit 1; }
+ done;;
+ esac;;
+esac
+
+rm -f $TMPF .ind.$$
+
+exit
+
+#++
+# NAME
+# ccformat 1
+# SUMMARY
+# convert C source text to standard format
+# PROJECT
+# sdetools
+# SYNOPSIS
+# ccformat [-b backup] [-t] [-T typename] [file(s)]
+# DESCRIPTION
+# The \fIccformat\fR command adjusts the layout of C program text
+# such that it approximates the Kernighan and Ritchie coding style.
+#
+# If no file names are specified, \fIccformat\fR reads
+# from standard input and writes the result to standard output.
+# This is convenient for source formatting from within a text
+# editor program.
+#
+# Otherwise, the named files are overwritten with their
+# formatted equivalent. The \fI-b\fR option (see below) provides
+# a way to create backup copies of the original files.
+#
+# Alternatively, the command can be used as a preprocessor for
+# pretty-printing with the \fInroff\fR or \fItroff\fR commands
+# (see the -t option below). In this case, output is always written
+# to standard output and no change is made to source files.
+#
+# The following options are recognized:
+# .TP
+# -b backup
+# Requests that a copy of the original files be saved. The backup
+# file name is constructed by appending the specified \fIbackup\fR
+# string to the original file name.
+# This option is ignored when the \fI-t\fR
+# option is specifid.
+# .TP
+# -t
+# Makes the program act as a preprocessor
+# for pretty-printing with \fInroff\fR or \fItroff\fR.
+# For example, in order to produce a pretty-printed
+# version on the line printer, use
+#
+ ccformat -t file(s) | nroff -mindent | col | lp
+# .TP
+# -T typename
+# Adds \fItypename\fR to the list of type keywords.
+# Names accumulate: -T can be specified more
+# than once. You need to specify all the
+# typenames that appear in your program that
+# are defined by typedefs - nothing will be
+# harmed if you miss a few, but the program
+# won't be formatted as nicely as it should.
+# PROGRAM LAYOUT
+# .fi
+# .ad
+# The following program layout is produced:
+# .TP
+# comments
+# Comments starting in the first column are left untouched.
+# These are often carefully laid out by the programmer.
+# .sp
+# Comments that appear in-between statements are lined up with
+# the surrounding program text, and are adjusted to accommodate
+# as many words on a line as possible.
+# However, a blank line in the middle of a comment is respected.
+# .sp
+# Trailing comments after declarations begin at column 41
+# (5 tab stops).
+# Trailing comments after executable statements start at
+# column 49 (6 tab stops).
+# .TP
+# indentation
+# Statements are indented by multiples of four columns.
+# There is only one statement per line. A control statement
+# is always placed on a separate line.
+# .TP
+# braces
+# If an opening brace is preceded by a control statement (\fCif,
+# else, do, for\fR or \fCswitch\fR), it is placed on the same line
+# as the control statement.
+# .sp
+# A closing brace is placed at the same level of indentation as the
+# program text that precedes the corresponding opening brace.
+# If a closing brace is followed by a control statement (\fCelse\fR
+# or \fCwhile\fR), that control statement is placed on the same line
+# as the closing brace.
+# .sp
+# In practice, brace placement is as
+# exemplified by the books on C by B.W. Kernighan and D.M. Ritchie.
+# .TP
+# blanks
+# Blanks are placed around assignment and arithmetic operators.
+# Commas in declarations or parameter lists are followed by one blank.
+# .sp
+# In the following cases a
+# blank line is inserted if it is not already present in the text:
+# 1) in front of a block comment, 2) between local declarations and
+# executable statements 3) after each function body.
+# .TP
+# declarations
+# In the output, each variable declaration appears on
+# a separate line.
+# COMMANDS
+# indent(1)
+# FILES
+# /tmp/ccformat.* intermediate files
+# SEE ALSO
+# indent(1)
+# DIAGNOSTICS
+# Indent may complain in case of syntax errors. These show
+# up as comments in the resulting program text.
+# BUGS
+# The programs seems to beave even when fed ANSI C or even C++
+# code; this has not been tested thoroughly, however.
+#
+# Will produce useless files when fed with anything that is
+# not C program text. This does not imply a judgment about
+# C programs in general.
+# AUTHOR(S)
+# W.Z. Venema
+# Eindhoven University of Technology
+# Department of Mathematics and Computer Science
+# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
+# CREATION DATE
+# Fri May 6 14:07:04 MET DST 1988
+# STATUS
+# ccformat.sh 1.3 11/5/89 14:39:29 (draft)
+#--
diff --git a/mantools/check-postlink b/mantools/check-postlink
new file mode 100755
index 0000000..ecddefa
--- /dev/null
+++ b/mantools/check-postlink
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+# Look for missing parameter names in postlink
+
+trap 'rm -f postlink.tmp postconf.tmp check-postlink.tmp 2>/dev/null' 0 1 2 3 15
+
+# Extract parameters from postconf.5.html hyperlinks.
+
+sed -n '/[ ].*href="postconf\.5\.html#/{
+ s/^[^#]*#//
+ s/".*//
+ p
+}' mantools/postlink | sort > postlink.tmp
+#
+# Extract parameters from postlink script. This also produces names
+# of obsolete parameters, and non-parameter names such as SMTPD
+# access restrictions and mask names.
+
+postconf -d | sed 's/ =.*//' | sort >postconf.tmp
+
+# Filter the output through a whitelist.
+
+cat >check-postlink.tmp <<'EOF'
+lmtp_body_checks
+lmtp_cname_overrides_servername
+lmtp_destination_concurrency_failed_cohort_limit
+lmtp_destination_concurrency_negative_feedback
+lmtp_destination_concurrency_positive_feedback
+lmtp_destination_rate_delay
+lmtp_header_checks
+lmtp_initial_destination_concurrency
+lmtp_mime_header_checks
+lmtp_nested_header_checks
+local_destination_concurrency_failed_cohort_limit
+local_destination_concurrency_negative_feedback
+local_destination_concurrency_positive_feedback
+local_destination_rate_delay
+local_initial_destination_concurrency
+relay_destination_concurrency_failed_cohort_limit
+relay_destination_concurrency_negative_feedback
+relay_destination_concurrency_positive_feedback
+relay_destination_rate_delay
+relay_initial_destination_concurrency
+smtp_destination_concurrency_failed_cohort_limit
+smtp_destination_concurrency_negative_feedback
+smtp_destination_concurrency_positive_feedback
+smtp_destination_rate_delay
+smtp_initial_destination_concurrency
+stress
+virtual_destination_concurrency_failed_cohort_limit
+virtual_destination_concurrency_negative_feedback
+virtual_destination_concurrency_positive_feedback
+virtual_destination_rate_delay
+virtual_initial_destination_concurrency
+EOF
+
+comm -23 postconf.tmp postlink.tmp | fgrep -vx -f check-postlink.tmp
diff --git a/mantools/dehtml b/mantools/dehtml
new file mode 100755
index 0000000..cc120de
--- /dev/null
+++ b/mantools/dehtml
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+for i
+do
+ case $i in
+ /*) lynx -dump file://localhost$i;;
+ *) lynx -dump file://localhost`pwd`/$i;;
+ esac
+done
diff --git a/mantools/docparam b/mantools/docparam
new file mode 100755
index 0000000..7a6ddad
--- /dev/null
+++ b/mantools/docparam
@@ -0,0 +1,378 @@
+#!/bin/sh
+
+# docparam - report what configuration parameters a subsystem documents
+
+# Usage: docparam src/mumble/*.c
+
+for name
+do
+ sed -n '
+ /^$/q
+ /^[^ ]* *\.\IP *"*\\fB\([a-zA-Z0-9_]*\).*/{
+ s//\1/
+ p
+ d
+ }
+ ' $name
+done | awk '
+
+BEGIN {
+
+ # Table generated with: user2var mail_params.h
+
+ table["mail_name"] = "var_mail_name"
+ table["helpful_warnings"] = "var_helpful_warnings"
+ table["show_user_unknown_table_name"] = "var_show_unk_rcpt_table"
+ table["notify_classes"] = "var_notify_classes"
+ table["empty_address_recipient"] = "var_empty_addr"
+ table["mail_owner"] = "var_mail_owner"
+ table["mail_owner"] = "var_owner_uid"
+ table["mail_owner"] = "var_owner_gid"
+ table["setgid_group"] = "var_sgid_group"
+ table["setgid_group"] = "var_sgid_gid"
+ table["default_privs"] = "var_default_privs"
+ table["default_privs"] = "var_default_uid"
+ table["default_privs"] = "var_default_gid"
+ table["myorigin"] = "var_myorigin"
+ table["mydestination"] = "var_mydest"
+ table["myhostname"] = "var_myhostname"
+ table["mydomain"] = "var_mydomain"
+ table["local_transport"] = "var_local_transport"
+ table["bounce_notice_recipient"] = "var_bounce_rcpt"
+ table["2bounce_notice_recipient"] = "var_2bounce_rcpt"
+ table["delay_notice_recipient"] = "var_delay_rcpt"
+ table["error_notice_recipient"] = "var_error_rcpt"
+ table["inet_interfaces"] = "var_inet_interfaces"
+ table["proxy_interfaces"] = "var_proxy_interfaces"
+ table["masquerade_domains"] = "var_masq_domains"
+ table["masquerade_exceptions"] = "var_masq_exceptions"
+ table["masquerade_classes"] = "var_masq_classes"
+ table["relayhost"] = "var_relayhost"
+ table["fallback_relay"] = "var_fallback_relay"
+ table["disable_dns_lookups"] = "var_disable_dns"
+ table["smtp_host_lookup"] = "var_smtp_dns_lookup"
+ table["smtp_mx_address_limit"] = "var_smtp_mxaddr_limit"
+ table["smtp_mx_session_limit"] = "var_smtp_mxsess_limit"
+ table["queue_directory"] = "var_queue_dir"
+ table["daemon_directory"] = "var_daemon_dir"
+ table["command_directory"] = "var_command_dir"
+ table["process_id_directory"] = "var_pid_dir"
+ table["process_id_directory"] = "var_starttime"
+ table["config_directory"] = "var_config_dir"
+ table["alternate_config_directories"] = "var_config_dirs"
+ table["default_database_type"] = "var_db_type"
+ table["syslog_facility"] = "var_syslog_facility"
+ table["always_bcc"] = "var_always_bcc"
+ table["undisclosed_recipients_header"] = "var_rcpt_witheld"
+ table["strict_rfc821_envelopes"] = "var_strict_rfc821_env"
+ table["broken_sasl_auth_clients"] = "var_broken_auth_clients"
+ table["disable_vrfy_command"] = "var_disable_vrfy_cmd"
+ table["virtual_alias_maps"] = "var_virt_alias_maps"
+ table["virtual_alias_domains"] = "var_virt_alias_doms"
+ table["unknown_virtual_alias_reject_code"] = "var_virt_alias_code"
+ table["canonical_maps"] = "var_canonical_maps"
+ table["sender_canonical_maps"] = "var_send_canon_maps"
+ table["recipient_canonical_maps"] = "var_rcpt_canon_maps"
+ table["sender_bcc_maps"] = "var_send_bcc_maps"
+ table["recipient_bcc_maps"] = "var_rcpt_bcc_maps"
+ table["transport_maps"] = "var_transport_maps"
+ table["default_transport"] = "var_def_transport"
+ table["swap_bangpath"] = "var_swap_bangpath"
+ table["append_at_myorigin"] = "var_append_at_myorigin"
+ table["append_dot_mydomain"] = "var_append_dot_mydomain"
+ table["allow_percent_hack"] = "var_percent_hack"
+ table["alias_maps"] = "var_alias_maps"
+ table["biff"] = "var_biff"
+ table["allow_mail_to_commands"] = "var_allow_commands"
+ table["command_time_limit"] = "var_command_maxtime"
+ table["allow_mail_to_files"] = "var_allow_files"
+ table["local_command_shell"] = "var_local_cmd_shell"
+ table["alias_database"] = "var_alias_db_map"
+ table["luser_relay"] = "var_luser_relay"
+ table["mail_spool_directory"] = "var_mail_spool_dir"
+ table["home_mailbox"] = "var_home_mailbox"
+ table["mailbox_command"] = "var_mailbox_command"
+ table["mailbox_command_maps"] = "var_mailbox_cmd_maps"
+ table["mailbox_transport"] = "var_mailbox_transport"
+ table["fallback_transport"] = "var_fallback_transport"
+ table["forward_path"] = "var_forward_path"
+ table["mailbox_delivery_lock"] = "var_mailbox_lock"
+ table["mailbox_size_limit"] = "var_mailbox_limit"
+ table["propagate_unmatched_extensions"] = "var_prop_extension"
+ table["recipient_delimiter"] = "var_rcpt_delim"
+ table["command_expansion_filter"] = "var_cmd_exp_filter"
+ table["forward_expansion_filter"] = "var_fwd_exp_filter"
+ table["prepend_delivered_header"] = "var_deliver_hdr"
+ table["enable_original_recipient"] = "var_enable_orcpt"
+ table["enable_errors_to"] = "var_enable_errors_to"
+ table["expand_owner_alias"] = "var_exp_own_alias"
+ table["require_home_directory"] = "var_stat_home_dir"
+ table["duplicate_filter_limit"] = "var_dup_filter_limit"
+ table["relocated_maps"] = "var_relocated_maps"
+ table["minimal_backoff_time"] = "var_min_backoff_time"
+ table["maximal_backoff_time"] = "var_max_backoff_time"
+ table["maximal_queue_lifetime"] = "var_max_queue_time"
+ table["bounce_queue_lifetime"] = "var_dsn_queue_time"
+ table["delay_warning_time"] = "var_delay_warn_time"
+ table["qmgr_message_active_limit"] = "var_qmgr_active_limit"
+ table["qmgr_message_recipient_limit"] = "var_qmgr_rcpt_limit"
+ table["qmgr_message_recipient_minimum"] = "var_qmgr_msg_rcpt_limit"
+ table["default_recipient_limit"] = "var_xport_rcpt_limit"
+ table["default_extra_recipient_limit"] = "var_stack_rcpt_limit"
+ table["default_delivery_slot_cost"] = "var_delivery_slot_cost"
+ table["default_delivery_slot_loan"] = "var_delivery_slot_loan"
+ table["default_delivery_slot_discount"] = "var_delivery_slot_discount"
+ table["default_minimum_delivery_slots"] = "var_min_delivery_slots"
+ table["qmgr_fudge_factor"] = "var_qmgr_fudge"
+ table["initial_destination_concurrency"] = "var_init_dest_concurrency"
+ table["default_destination_concurrency_limit"] = "var_dest_con_limit"
+ table["local"] = "var_local_con_lim"
+ table["default_destination_recipient_limit"] = "var_dest_rcpt_limit"
+ table["local"] = "var_local_rcpt_lim"
+ table["transport_retry_time"] = "var_transport_retry_time"
+ table["defer_transports"] = "var_defer_xports"
+ table["qmgr_clog_warn_time"] = "var_qmgr_clog_warn_time"
+ table["default_process_limit"] = "var_proc_limit"
+ table["service_throttle_time"] = "var_throttle_time"
+ table["max_use"] = "var_use_limit"
+ table["max_idle"] = "var_idle_limit"
+ table["application_event_drain_time"] = "var_event_drain"
+ table["ipc_idle"] = "var_ipc_idle_limit"
+ table["ipc_ttl"] = "var_ipc_ttl_limit"
+ table["line_length_limit"] = "var_line_limit"
+ table["debug_peer_list"] = "var_debug_peer_list"
+ table["debug_peer_level"] = "var_debug_peer_level"
+ table["hash_queue_names"] = "var_hash_queue_names"
+ table["hash_queue_depth"] = "var_hash_queue_depth"
+ table["best_mx_transport"] = "var_bestmx_transp"
+ table["smtp_connect_timeout"] = "var_smtp_conn_tmout"
+ table["smtp_helo_timeout"] = "var_smtp_helo_tmout"
+ table["smtp_xforward_timeout"] = "var_smtp_xfwd_tmout"
+ table["smtp_mail_timeout"] = "var_smtp_mail_tmout"
+ table["smtp_rcpt_timeout"] = "var_smtp_rcpt_tmout"
+ table["smtp_data_init_timeout"] = "var_smtp_data0_tmout"
+ table["smtp_data_xfer_timeout"] = "var_smtp_data1_tmout"
+ table["smtp_data_done_timeout"] = "var_smtp_data2_tmout"
+ table["smtp_rset_timeout"] = "var_smtp_rset_tmout"
+ table["smtp_quit_timeout"] = "var_smtp_quit_tmout"
+ table["smtp_quote_rfc821_envelope"] = "var_smtp_quote_821_env"
+ table["smtp_skip_4xx_greeting"] = "var_smtp_skip_4xx_greeting"
+ table["smtp_skip_5xx_greeting"] = "var_smtp_skip_5xx_greeting"
+ table["ignore_mx_lookup_error"] = "var_ign_mx_lookup_err"
+ table["smtp_skip_quit_response"] = "var_skip_quit_resp"
+ table["smtp_always_send_ehlo"] = "var_smtp_always_ehlo"
+ table["smtp_never_send_ehlo"] = "var_smtp_never_ehlo"
+ table["smtp_bind_address"] = "var_smtp_bind_addr"
+ table["smtp_helo_name"] = "var_smtp_helo_name"
+ table["smtp_randomize_addresses"] = "var_smtp_rand_addr"
+ table["smtp_line_length_limit"] = "var_smtp_line_limit"
+ table["smtp_pix_workaround_threshold_time"] = "var_smtp_pix_thresh"
+ table["smtp_pix_workaround_delay_time"] = "var_smtp_pix_delay"
+ table["smtp_defer_if_no_mx_address_found"] = "var_smtp_defer_mxaddr"
+ table["smtp_send_xforward_command"] = "var_smtp_send_xforward"
+ table["smtpd_banner"] = "var_smtpd_banner"
+ table["smtpd_timeout"] = "var_smtpd_tmout"
+ table["smtpd_recipient_limit"] = "var_smtpd_rcpt_limit"
+ table["smtpd_soft_error_limit"] = "var_smtpd_soft_erlim"
+ table["smtpd_hard_error_limit"] = "var_smtpd_hard_erlim"
+ table["smtpd_error_sleep_time"] = "var_smtpd_err_sleep"
+ table["smtpd_junk_command_limit"] = "var_smtpd_junk_cmd_limit"
+ table["smtpd_history_flush_threshold"] = "var_smtpd_hist_thrsh"
+ table["smtpd_noop_commands"] = "var_smtpd_noop_cmds"
+ table["smtpd_sasl_auth_enable"] = "var_smtpd_sasl_enable"
+ table["smtpd_sasl_security_options"] = "var_smtpd_sasl_opts"
+ table["smtpd_sasl_application_name"] = "var_smtpd_sasl_appname"
+ table["smtpd_sasl_local_domain"] = "var_smtpd_sasl_realm"
+ table["smtpd_sender_login_maps"] = "var_smtpd_snd_auth_maps"
+ table["smtp_sasl_auth_enable"] = "var_smtp_sasl_enable"
+ table["smtp_sasl_mechanism_filter"] = "var_smtp_sasl_mechs"
+ table["smtp_sasl_password_maps"] = "var_smtp_sasl_passwd"
+ table["smtp_sasl_security_options"] = "var_smtp_sasl_opts"
+ table["lmtpd_banner"] = "var_lmtpd_banner"
+ table["lmtpd_timeout"] = "var_lmtpd_tmout"
+ table["lmtpd_recipient_limit"] = "var_lmtpd_rcpt_limit"
+ table["lmtpd_soft_error_limit"] = "var_lmtpd_soft_erlim"
+ table["lmtpd_hard_error_limit"] = "var_lmtpd_hard_erlim"
+ table["lmtpd_error_sleep_time"] = "var_lmtpd_err_sleep"
+ table["lmtpd_junk_command_limit"] = "var_lmtpd_junk_cmd_limit"
+ table["smtpd_sasl_exceptions_networks"] = "var_smtpd_sasl_exceptions_networks"
+ table["lmtpd_sasl_auth_enable"] = "var_lmtpd_sasl_enable"
+ table["lmtpd_sasl_security_options"] = "var_lmtpd_sasl_opts"
+ table["lmtpd_sasl_local_domain"] = "var_lmtpd_sasl_realm"
+ table["lmtp_sasl_auth_enable"] = "var_lmtp_sasl_enable"
+ table["lmtp_sasl_password_maps"] = "var_lmtp_sasl_passwd"
+ table["lmtp_sasl_security_options"] = "var_lmtp_sasl_opts"
+ table["lmtp_tcp_port"] = "var_lmtp_tcp_port"
+ table["lmtp_cache_connection"] = "var_lmtp_cache_conn"
+ table["lmtp_skip_quit_response"] = "var_lmtp_skip_quit_resp"
+ table["lmtp_connect_timeout"] = "var_lmtp_conn_tmout"
+ table["lmtp_rset_timeout"] = "var_lmtp_rset_tmout"
+ table["lmtp_lhlo_timeout"] = "var_lmtp_lhlo_tmout"
+ table["lmtp_xforward_timeout"] = "var_lmtp_xfwd_tmout"
+ table["lmtp_mail_timeout"] = "var_lmtp_mail_tmout"
+ table["lmtp_rcpt_timeout"] = "var_lmtp_rcpt_tmout"
+ table["lmtp_data_init_timeout"] = "var_lmtp_data0_tmout"
+ table["lmtp_data_xfer_timeout"] = "var_lmtp_data1_tmout"
+ table["lmtp_data_done_timeout"] = "var_lmtp_data2_tmout"
+ table["lmtp_quit_timeout"] = "var_lmtp_quit_tmout"
+ table["lmtp_send_xforward_command"] = "var_lmtp_send_xforward"
+ table["hopcount_limit"] = "var_hopcount_limit"
+ table["header_size_limit"] = "var_header_limit"
+ table["header_address_token_limit"] = "var_token_limit"
+ table["virtual_alias_recursion_limit"] = "var_virt_recur_limit"
+ table["virtual_alias_expansion_limit"] = "var_virt_expan_limit"
+ table["message_size_limit"] = "var_message_limit"
+ table["queue_minfree"] = "var_queue_minfree"
+ table["header_checks"] = "var_header_checks"
+ table["mime_header_checks"] = "var_mimehdr_checks"
+ table["nested_header_checks"] = "var_nesthdr_checks"
+ table["body_checks"] = "var_body_checks"
+ table["body_checks_size_limit"] = "var_body_check_len"
+ table["bounce_size_limit"] = "var_bounce_limit"
+ table["double_bounce_sender"] = "var_double_bounce_sender"
+ table["fork_attempts"] = "var_fork_tries"
+ table["fork_delay"] = "var_fork_delay"
+ table["deliver_lock_attempts"] = "var_flock_tries"
+ table["deliver_lock_delay"] = "var_flock_delay"
+ table["stale_lock_time"] = "var_flock_stale"
+ table["sun_mailtool_compatibility"] = "var_mailtool_compat"
+ table["daemon_timeout"] = "var_daemon_timeout"
+ table["ipc_timeout"] = "var_ipc_timeout"
+ table["trigger_timeout"] = "var_trigger_timeout"
+ table["mynetworks"] = "var_mynetworks"
+ table["mynetworks_style"] = "var_mynetworks_style"
+ table["relay_domains"] = "var_relay_domains"
+ table["relay_transport"] = "var_relay_transport"
+ table["relay_recipient_maps"] = "var_relay_rcpt_maps"
+ table["unknown_relay_recipient_reject_code"] = "var_relay_rcpt_code"
+ table["smtpd_client_restrictions"] = "var_client_checks"
+ table["smtpd_helo_required"] = "var_helo_required"
+ table["smtpd_helo_restrictions"] = "var_helo_checks"
+ table["smtpd_sender_restrictions"] = "var_mail_checks"
+ table["smtpd_recipient_restrictions"] = "var_rcpt_checks"
+ table["smtpd_etrn_restrictions"] = "var_etrn_checks"
+ table["smtpd_data_restrictions"] = "var_data_checks"
+ table["smtpd_restriction_classes"] = "var_rest_classes"
+ table["allow_untrusted_routing"] = "var_allow_untrust_route"
+ table["reject_code"] = "var_reject_code"
+ table["defer_code"] = "var_defer_code"
+ table["unknown_client_reject_code"] = "var_unk_client_code"
+ table["invalid_hostname_reject_code"] = "var_bad_name_code"
+ table["unknown_hostname_reject_code"] = "var_unk_name_code"
+ table["non_fqdn_reject_code"] = "var_non_fqdn_code"
+ table["unknown_address_reject_code"] = "var_unk_addr_code"
+ table["smtpd_reject_unlisted_sender"] = "var_smtpd_rej_unl_from"
+ table["smtpd_reject_unlisted_recipient"] = "var_smtpd_rej_unl_rcpt"
+ table["unverified_recipient_reject_code"] = "var_unv_rcpt_code"
+ table["unverified_sender_reject_code"] = "var_unv_from_code"
+ table["multi_recipient_bounce_reject_code"] = "var_mul_rcpt_code"
+ table["relay_domains_reject_code"] = "var_relay_code"
+ table["permit_mx_backup_networks"] = "var_perm_mx_networks"
+ table["access_map_reject_code"] = "var_access_map_code"
+ table["rbl_reply_maps"] = "var_rbl_reply_maps"
+ table["default_rbl_reply"] = "var_def_rbl_reply"
+ table["maps_rbl_reject_code"] = "var_maps_rbl_code"
+ table["maps_rbl_domains"] = "var_maps_rbl_domains"
+ table["smtpd_delay_reject"] = "var_smtpd_delay_reject"
+ table["smtpd_null_access_lookup_key"] = "var_smtpd_null_key"
+ table["smtpd_expansion_filter"] = "var_smtpd_exp_filter"
+ table["local_recipient_maps"] = "var_local_rcpt_maps"
+ table["unknown_local_recipient_reject_code"] = "var_local_rcpt_code"
+ table["proxy_read_maps"] = "var_proxy_read_maps"
+ table["process_name"] = "var_procname"
+ table["process_id"] = "var_pid"
+ table["dont_remove"] = "var_dont_remove"
+ table["soft_bounce"] = "var_soft_bounce"
+ table["owner_request_special"] = "var_ownreq_special"
+ table["allow_min_user"] = "var_allow_min_user"
+ table["content_filter"] = "var_filter_xport"
+ table["fast_flush_domains"] = "var_fflush_domains"
+ table["fast_flush_purge_time"] = "var_fflush_purge"
+ table["fast_flush_refresh_time"] = "var_fflush_refresh"
+ table["import_environment"] = "var_import_environ"
+ table["export_environment"] = "var_export_environ"
+ table["virtual_transport"] = "var_virt_transport"
+ table["virtual_mailbox_maps"] = "var_virt_mailbox_maps"
+ table["virtual_mailbox_domains"] = "var_virt_mailbox_doms"
+ table["unknown_virtual_mailbox_reject_code"] = "var_virt_mailbox_code"
+ table["virtual_uid_maps"] = "var_virt_uid_maps"
+ table["virtual_gid_maps"] = "var_virt_gid_maps"
+ table["virtual_minimum_uid"] = "var_virt_minimum_uid"
+ table["virtual_mailbox_base"] = "var_virt_mailbox_base"
+ table["virtual_mailbox_limit"] = "var_virt_mailbox_limit"
+ table["virtual_mailbox_lock"] = "var_virt_mailbox_lock"
+ table["syslog_name"] = "var_syslog_name"
+ table["qmqpd_authorized_clients"] = "var_qmqpd_clients"
+ table["qmqpd_timeout"] = "var_qmqpd_timeout"
+ table["qmqpd_error_delay"] = "var_qmqpd_err_sleep"
+ table["default_verp_delimiters"] = "var_verp_delims"
+ table["verp_delimiter_filter"] = "var_verp_filter"
+ table["disable_verp_bounces"] = "var_verp_bounce_off"
+ table["smtpd_authorized_verp_clients"] = "var_verp_clients"
+ table["smtpd_authorized_xclient_hosts"] = "var_xclient_hosts"
+ table["smtpd_authorized_xforward_hosts"] = "var_xforward_hosts"
+ table["in_flow_delay"] = "var_in_flow_delay"
+ table["parent_domain_matches_subdomains"] = "var_par_dom_match"
+ table["fault_injection_code"] = "var_fault_inj_code"
+ table["resolve_dequoted_address"] = "var_resolve_dequoted"
+ table["bounce_service_name"] = "var_bounce_service"
+ table["cleanup_service_name"] = "var_cleanup_service"
+ table["defer_service_name"] = "var_defer_service"
+ table["pickup_service_name"] = "var_pickup_service"
+ table["queue_service_name"] = "var_queue_service"
+ table["rewrite_service_name"] = "var_rewrite_service"
+ table["showq_service_name"] = "var_showq_service"
+ table["error_service_name"] = "var_error_service"
+ table["flush_service_name"] = "var_flush_service"
+ table["address_verify_service_name"] = "var_verify_service"
+ table["address_verify_map"] = "var_verify_map"
+ table["address_verify_positive_expire_time"] = "var_verify_pos_exp"
+ table["address_verify_positive_refresh_time"] = "var_verify_pos_try"
+ table["address_verify_negative_expire_time"] = "var_verify_neg_exp"
+ table["address_verify_negative_refresh_time"] = "var_verify_neg_try"
+ table["address_verify_negative_cache"] = "var_verify_neg_cache"
+ table["address_verify_sender"] = "var_verify_sender"
+ table["address_verify_poll_count"] = "var_verify_poll_count"
+ table["address_verify_poll_delay"] = "var_verify_poll_delay"
+ table["address_verify_local_transport"] = "var_vrfy_local_xport"
+ table["address_verify_virtual_transport"] = "var_vrfy_virt_xport"
+ table["address_verify_relay_transport"] = "var_vrfy_relay_xport"
+ table["address_verify_default_transport"] = "var_vrfy_def_xport"
+ table["address_verify_relayhost"] = "var_vrfy_relayhost"
+ table["address_verify_transport_maps"] = "var_vrfy_xport_maps"
+ table["trace_service_name"] = "var_trace_service"
+ table["mailbox_defer_errors"] = "var_mbx_defer_errs"
+ table["maildir_defer_errors"] = "var_mdr_defer_errs"
+ table["berkeley_db_create_buffer_size"] = "var_db_create_buf"
+ table["berkeley_db_read_buffer_size"] = "var_db_read_buf"
+ table["queue_file_attribute_count_limit"] = "var_qattr_count_limit"
+ table["mime_nesting_limit"] = "var_mime_maxdepth"
+ table["mime_boundary_length_limit"] = "var_mime_bound_len"
+ table["disable_mime_input_processing"] = "var_disable_mime_input"
+ table["disable_mime_output_conversion"] = "var_disable_mime_oconv"
+ table["strict_8bitmime"] = "var_strict_8bitmime"
+ table["strict_7bit_headers"] = "var_strict_7bit_hdrs"
+ table["strict_8bitmime_body"] = "var_strict_8bit_body"
+ table["strict_mime_encoding_domain"] = "var_strict_encoding"
+ table["sender_based_routing"] = "var_sender_routing"
+ table["transport_null_address_lookup_key"] = "var_xport_null_key"
+ table["backwards_bounce_logfile_compatibility"] = "var_oldlog_compat"
+ table["smtpd_proxy_filter"] = "var_smtpd_proxy_filt"
+ table["smtpd_proxy_ehlo"] = "var_smtpd_proxy_ehlo"
+ table["smtpd_proxy_timeout"] = "var_smtpd_proxy_tmout"
+ table["receive_override_options"] = "var_smtpd_input_transp"
+ table["smtpd_policy_service_timeout"] = "var_smtpd_policy_tmout"
+ table["smtpd_policy_service_max_idle"] = "var_smtpd_policy_idle"
+ table["smtpd_policy_service_max_ttl"] = "var_smtpd_policy_ttl"
+ table["smtpd_client_connection_rate_limit"] = "var_smtpd_crate_limit"
+ table["smtpd_client_connection_count_limit"] = "var_smtpd_cconn_limit"
+ table["smtpd_client_connection_limit_exceptions"] = "var_smtpd_hoggers"
+ table["client_rate_time_unit"] = "var_anvil_time_unit"
+ table["client_event_status_update_time"] = "var_anvil_stat_time"
+ table["client_connection_rate_service"] = "var_anvil_service"
+
+}
+
+{ if (name = table[$1]) print $1 }
+
+' | sort -u
diff --git a/mantools/docuseparam b/mantools/docuseparam
new file mode 100755
index 0000000..5113b5b
--- /dev/null
+++ b/mantools/docuseparam
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+mantools/docparam "$@" >/tmp/doc
+mantools/useparam "$@" >/tmp/use
+diff /tmp/doc /tmp/use
diff --git a/mantools/double b/mantools/double
new file mode 100755
index 0000000..2103969
--- /dev/null
+++ b/mantools/double
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+for i in $*
+do
+ echo === $i ===
+ dehtml $i | tr A-Z a-z | double
+done
diff --git a/mantools/enter b/mantools/enter
new file mode 100755
index 0000000..4287c1a
--- /dev/null
+++ b/mantools/enter
@@ -0,0 +1,145 @@
+#!/bin/sh
+
+# enter - set up project-specific environment
+
+# @(#) enter.sh 1.5 11/4/89 15:56:03
+
+# initialize
+
+IFS="
+"
+
+: ${HOME?} ${SHELL=/bin/sh} make sure these are set
+
+# sanity checks...
+
+test $# = 1 || {
+ echo "Usage: ${0} project" 1>&2; exit 1
+}
+
+test -r ${HOME}/.${1} || {
+ echo "${0}: can't read environment file: '${HOME}/.${1}'" 1>&2; exit 1
+}
+
+test -x ${SHELL} || {
+ echo "${0}: can't execute command shell: '${SHELL}'" 1>&2; exit 1
+}
+
+# set up default Bourne-shell prompt
+
+export PS1; PS1="$1%${PS1- }"
+
+# load environment
+
+. ${HOME}/.${1}
+
+# define UPPER and lower-case environment variables with the project name
+
+_PNAME_=`echo ${1} | case \`echo -n\` in # assume $1 lower case
+ "") tr a-z A-Z;; # this is for V7, BSD
+ *) tr '[a-z]' '[A-Z]';; # and this is for SYSV
+ esac`
+eval ${1}=\${${_PNAME_}=\${${1}}}
+
+eval test "X\${${1}}" != X || {
+ echo "${0}: ${HOME}/.${1} should set '${1}' or '${_PNAME_}'" 1>&2; exit 1
+}
+
+export ${1} MANPATH PATH ${_PNAME_}
+
+# become a new shell
+
+echo "Entering project '${1}' - leave with 'exit' or 'control-d'" 1>&2
+
+exec ${SHELL}
+
+echo "project ${1} NOT entered" 1>&2; exit 1;
+
+#++
+# NAME
+# enter 1
+# SUMMARY
+# set up a project-specific environment
+# PROJECT
+# sdetools
+# SYNOPSIS
+# enter project
+# exit
+# DESCRIPTION
+# The \fIenter\fR command sets up an environment that makes
+# it easy to access \fIproject\fR-specific programs and files.
+#
+# \fIenter\fP consults a file with environment information
+# ($HOME/.\fIproject\fR, Bourne-shell syntax) and invokes
+# a new command shell of the same type as the login shell.
+# Typically, project environment files are maintained and
+# given out by the project administrator.
+#
+# In order to leave the project environment use the \fIexit\fP
+# command or type a control-d;
+# the details may depend on the type of login shell involved.
+#
+# As a minimum, the environment file should set an environment
+# variable with the same name as the \fIproject\fP. The variable
+# name can be either be identical to \fIproject\fP or in upper case.
+# For consistency, \fIenter\fP will set both variables to the same value.
+# EXAMPLE
+# .fi
+# .ad
+# In this example,
+# all files pertaining to a project \fIfoobar\fR are located under the
+# directory \fI/usr/foo/bar/foobar\fR. For example, there
+# are subdirectories
+# \fI/usr/foo/bar/foobar/man\fR with manual pages,
+# \fI/usr/foo/bar/foobar/bin\fR with executable
+# programs, other directories for object libraries and include files,
+# and so on.
+#
+# In order to enter a project \fIfoobar\fR, the command
+# .PP
+# .ti +5
+# .ft C
+# enter foobar
+# .ft
+# .PP
+# consults a file \fI.foobar\fR (in the user\'s home directory)
+# with contents:
+# .PP
+# .ft C
+# .nf
+# .in +5
+# export FOOBAR; FOOBAR=/usr/foo/bar/foobar
+# export PATH; PATH=$PATH:$FOOBAR/bin
+# export MANPATH; MANPATH=$MANPATH:$FOOBAR/man
+# .ft
+# .fi
+# .PP
+# The second line automatically makes all project-specific
+# executable programs accessible. The third line makes it possible
+# to use the standard UNIX \fIman\fR command for retrieval of
+# project-specific manual pages. The \fIenter\fR command
+# makes sure that both the \fIfoobar\fR and \fIFOOBAR\fR
+# environment variables are set to the same value.
+# COMMANDS
+# sh(1), echo(1), test(1), tr(1), login shell
+# FILES
+# $HOME/.\fIproject\fR
+# ENVIRONMENT VARIABLES
+# SHELL, login shell
+# HOME, login directory
+# PATH, search path for commands
+# MANPATH, search path for the \fIman\fR command.
+# BUGS
+# Name clashes may occur if people have entered several projects
+# at the same time. This can be avoided by using unique project names,
+# which is a good idea anyway.
+# AUTHOR(S)
+# W.Z. Venema
+# Eindhoven University of Technology
+# Department of Mathematics and Computer Science
+# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
+# CREATION DATE
+# Tue Apr 19 15:35:41 MET DST 1988
+# STATUS
+# enter.sh 1.5 11/4/89 15:56:03 (draft)
+#--
diff --git a/mantools/find-fluff b/mantools/find-fluff
new file mode 100755
index 0000000..8556f6c
--- /dev/null
+++ b/mantools/find-fluff
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+for i in $*
+do
+ echo === $i ===
+ grep '<p> *$' $i
+done
diff --git a/mantools/fixman b/mantools/fixman
new file mode 100755
index 0000000..6c2c6ea
--- /dev/null
+++ b/mantools/fixman
@@ -0,0 +1,257 @@
+#!/usr/bin/perl
+
+use Getopt::Std;
+
+# Usage: fixman [-f] postconf.proto filename.c >filename.c.new
+
+# fixman - fix parameter text in embedded man pages
+
+# Basic operation:
+#
+# - Read definitions fron postconf.proto like file
+#
+# - Read source file with embedded manual page
+#
+# - Write to stdout the updated source file.
+#
+
+#use Getopt::Std;
+
+#$opt_h = undef;
+#$opt_v = undef;
+#getopts("hv");
+
+#push @ARGV, "/dev/null"; # XXX
+
+$opt_f = undef;
+$opt_v = undef;
+getopts("fv");
+
+die "Usage: $0 [-fv] protofile [sourcefile...]
+-f: include full parameter description instead of one-line summary
+-v: verbose mode\n"
+ unless $protofile = shift(@ARGV);
+
+# Save one definition.
+
+sub save_text
+{
+ if ($category eq "PARAM") {
+ $text =~ s/\.\s.*/.\n/s unless $opt_f;
+ $param_text{$name} = $text;
+ $defval = "empty" unless $defval ne "";
+ $defval_text{$name} = $defval;
+ if ($opt_v) {
+ printf "saving entry %s %.20s..\n", $name, $text;
+ }
+ } elsif ($category eq "CLASS") {
+ $class_text{$name} = $text;
+ if ($opt_v) {
+ printf "saving class %s %.20s..\n", $name, $text;
+ }
+ } else {
+ die "Unknown category: $category. Need PARAM or CLASS.\n";
+ }
+}
+
+# Emit one parameter name and text
+
+sub emit_text
+{
+ my ($delim) = @_;
+ if ($block = $param_text{$name}) {
+ print "$delim .IP \"\\fB$name ($defval_text{$name})\\fR\"\n";
+ $wantpp = 0;
+ $block =~ s/<a [^>]*>//g;
+ $block =~ s/<\/a>//g;
+ $block =~ s/<b>/\\fB/g;
+ $block =~ s/<i>/\\fI/g;
+ $block =~ s/<\/b>/\\fR/g;
+ $block =~ s/<\/i>/\\fR/g;
+ $block =~ s/\n(<p(re)?>)/\n.sp\n\1/g ; # if ($wantpp);
+ $block =~ s/^(<p(re)?>)/.sp\n\1/ ; # if ($wantpp);
+ $block =~ s/<p> */\n/g;
+ $block =~ s/<\/p>/\n/g;
+ $block =~ s/<pre>/\n.nf\n.na\n.ft C\n/g;
+ $block =~ s/<\/pre>/\n.fi\n.ad\n.ft R\n/g;
+ $block =~ s/<dl[^>]*>/\n.RS\n/g;
+ $block =~ s/<ul>/\n.RS\n/g;
+ #$block =~ s/<\/dl>/\n.PP\n/g;
+ #$block =~ s/<\/ul>/\n.PP\n/g;
+ $block =~ s/<\/dl>/\n.RE\n.IP ""\n/g;
+ $block =~ s/<\/ul>/\n.RE\n.IP ""\n/g;
+ $block =~ s/<dd>/\n/g;
+ $block =~ s/<\/dd>/\n/g;
+ $block =~ s/<li>\s*/\n.IP \\(bu\n/g;
+ $block =~ s/<dt>\s*/\n.IP "/g;
+ $block =~ s/\s*<\/dt>/"/g;
+ $block =~ s/<blockquote>/\n.na\n.nf\n.in +4\n/g;
+ $block =~ s/<\/blockquote>/\n.in -4\n.fi\n.ad\n/g;
+ $block =~ s/\n<br>/\n.br\n/g;
+ $block =~ s/<br>\s*/\n.br\n/g;
+ $block =~ s/&le;/<=/g;
+ $block =~ s/&ge;/>=/g;
+ $block =~ s/&lt;/</g;
+ $block =~ s/&gt;/>/g;
+
+ # Peep-hole optimizer.
+ $block =~ s/^\s+//g;
+ $block =~ s/\s+\n/\n/g;
+ $block =~ s/^\n//g;
+ $block =~ s/\.IP ""\n(\.sp\n)+/.IP ""\n/g;
+ $block =~ s/\.IP ""\n(\.[A-Z][A-Z])/\1/g;
+ $block =~ s/(.IP ""\n)+$//;
+ $block =~ s/^(\.(PP|sp)\n)+//;
+ #$wantpp = !($block =~ /^\.(SH|IP)/);
+
+ # Boldify man page references.
+ $block =~ s/([_a-zA-Z0-9-]+)(\([0-9]\))/\\fB\1\\fR\2/g;
+
+ # Encapsulate as C code comment.
+ $block =~ s/^([^.])/$delim\t\1/;
+ $block =~ s/^\./$delim ./;
+ $block =~ s/\n([^.])/\n$delim\t\1/g;
+ $block =~ s/\n\./\n$delim ./g;
+
+ print $block;
+ } else {
+ print "$delim .IP \"\\fB$name ($defval)\\fR\"\n";
+ print $text;
+ }
+ $name = "";
+}
+
+# Read the whole file even if we want to print only one parameter.
+
+open(POSTCONF, $protofile) || die " cannot open $protofile: $!\n";
+
+while(<POSTCONF>) {
+
+ next if /^#/;
+ next unless ($name || /\S/);
+
+ if (/^%(PARAM|CLASS)/) {
+
+ # Save the accumulated text.
+
+ if ($name && $text) {
+ save_text();
+ }
+
+ # Reset the parameter name and accumulated text.
+
+ $name = $text = "";
+ $category = $1;
+
+ # Accumulate the parameter name and default value.
+
+ do {
+ $text .= $_;
+ } while(($_ = <POSTCONF>) && /\S/);
+ ($junk, $name, $defval) = split(/\s+/, $text, 3);
+
+ $defval =~ s/\s+/ /g;
+ $defval =~ s/\s+$//;
+ $defval =~ s/&le;/<=/g;
+ $defval =~ s/&ge;/>=/g;
+ $defval =~ s/&lt;/</g;
+ $defval =~ s/&gt;/>/g;
+ $defval =~ s/"/'/g;
+ $text = "";
+ next;
+ }
+
+ # Accumulate the text in the class or parameter definition.
+
+ $text .= $_;
+
+}
+
+# Save the last definition.
+
+if ($name && $text) {
+ save_text();
+}
+
+# Process source file with embedded text. For now, hard-coded for C & sh.
+
+while(<>) {
+
+ if (/^(\/\*|#)\+\+/) {
+ $incomment = 1;
+ $name = "";
+ print;
+ next;
+ }
+
+ if (/^(\/\*|#)--/) {
+ emit_text($1) if ($name ne "");
+ $incomment = 0;
+ print;
+ next;
+ }
+
+ if (!$incomment) {
+ print;
+ next;
+ }
+
+ if (/(\/\*|#) +CONFIGURATION +PARAM/) {
+ $incomment = 2;
+ }
+
+ # Delete text after nested itemized list.
+ if ($incomment == 2 && /^(\/\*|#) +\.IP ""/) {
+ $text .= $_;
+ while (<>) {
+ last if /^(\/\*|#) +([A-Z][A-Z][A-Z]+|\.[A-Z][A-Z])/;
+ $text .= $_;
+ }
+ }
+
+ # Delete nested itemized list.
+ if ($incomment == 2 && /^(\/\*|#) +\.RS/) {
+ $text .= $_;
+ $rsnest++;
+ while (<>) {
+ $text .= $_;
+ $rsnest++ if /^(\/\*|#) +\.RS/;
+ $rsnest-- if /(\/\*|#) +\.RE/;
+ last if $rsnest == 0;
+ }
+ next;
+ }
+
+ if ($incomment == 2 && /^(\/\*|#) +\.IP +"?\\fB([a-zA-Z0-9_]+)( +\((.*)\))?/) {
+ emit_text($1) if ($name ne "");
+ $name = $2;
+ $defval = $4;
+ $text = "";
+ next;
+ }
+
+ if ($incomment == 2 && /^(\/\*|#) +\.IP +"?\\fI([a-zA-Z0-9_]+)\\fB([a-zA-Z0-9_]+)( +\((.*)\))?/) {
+ emit_text($1) if ($name ne "");
+ $name = "$2$3";
+ $defval = $4;
+ $text = "";
+ next;
+ }
+
+ if ($incomment == 2 && /^(\/\*|#) +([A-Z][A-Z][A-Z]+|\.[A-Z][A-Z])/) {
+ emit_text($1) if ($name ne "");
+ $incomment = 0 if /^(\/\*|#) +(SEE +ALSO|README +FILES|LICENSE|AUTHOR)/;
+ print;
+ next;
+ }
+
+ if ($name ne "") {
+ $text .= $_;
+ next;
+ }
+
+ print;
+ next;
+}
+
+die "Unterminated comment\n" if $incomment;
diff --git a/mantools/get_anchors.pl b/mantools/get_anchors.pl
new file mode 100644
index 0000000..436c6a1
--- /dev/null
+++ b/mantools/get_anchors.pl
@@ -0,0 +1,50 @@
+#! /usr/bin/perl -w
+#
+# Copyright (c) 2004 Liviu Daia <Liviu.Daia@imar.ro>
+# All rights reserved.
+#
+# $Revision$
+# $Id$
+# $Source$
+#
+
+use HTML::Parser;
+
+use strict;
+use Carp ();
+local $SIG{__WARN__} = \&Carp::cluck;
+
+my ($p, $fn, %a);
+
+
+sub
+html_parse_start ($$)
+{
+ my ($t, $attr) = @_;
+
+ push @{$a{$attr->{name}}}, $fn
+ if ($t eq 'a' and defined $attr->{name});
+}
+
+
+$p = HTML::Parser->new(api_version => 3);
+$p->strict_comment (0);
+$p->report_tags (qw(a));
+$p->ignore_elements (qw(script style));
+
+$p->handler (start => \&html_parse_start, 'tagname, attr');
+
+while ($fn = shift)
+{
+ $p->parse_file ($fn);
+ $p->eof;
+}
+
+for (keys %a)
+{
+ print "$_\t\tdefined in ", (join ', ', @{$a{$_}}), "\n"
+ if (@{$a{$_}} > 1);
+ print "$_\t\tnumerical in ", (join ', ', @{$a{$_}}), "\n"
+ if (m/^[\d.]+$/o);
+}
+
diff --git a/mantools/hchangered b/mantools/hchangered
new file mode 100755
index 0000000..044f2db
--- /dev/null
+++ b/mantools/hchangered
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Usage: hchangered oldfile newfile
+
+# hchangered - crude tool to red-color changes in HTML text. Text is
+# also underlined so it shows on monochrome printers.
+
+# Bugs: does not red-color text inside tables. Fascist software may
+# complain about tags being out of order.
+
+diff -e $1 $2 | (sed -n -e '
+/[ac]$/{
+ p
+ a\
+<font color="red"><u>
+: loop
+ n
+ /^\.$/b done1
+ p
+ b loop
+: done1
+ a\
+</u></font>\
+.
+ b
+}
+/d$/{
+ a\
+ i\
+<font color="red"><u>[DELETED]</u></font>\
+.
+ p
+ b
+}
+'; echo '1,$p') | ed - $1 | perl -e '
+$buf = join("", <STDIN>);
+$buf =~ s/pre>\s+<font/pre><font/g;
+$buf =~ s/font>\s+<\/pre/font><\/pre/g;
+print $buf;
+'
diff --git a/mantools/html2readme b/mantools/html2readme
new file mode 100755
index 0000000..b7d110c
--- /dev/null
+++ b/mantools/html2readme
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+HTML2TEXT="html2text -ascii -style pretty -rcfile html2text.rc"
+
+#case $# in
+# 0) $HTML2TEXT;;
+# *) for file
+# do
+# cat <<EOF | fmt
+#[hyperlinked version: www.postfix.org/$file]
+#EOF
+# $HTML2TEXT $file
+# done;;
+#esac | sed '
+
+$HTML2TEXT "$@" | sed '
+:top
+/ -$/ {
+ N
+ s/ -\n o/ -o/
+ b top
+}
+/^ \*$/ {
+ N
+ s/\*\n /* /
+ b top
+}
+' | awk '
+/^$/ && prev_len == 0 { next }
+ { print; prev_len = length }
+'
diff --git a/mantools/make-relnotes b/mantools/make-relnotes
new file mode 100755
index 0000000..f5d26f3
--- /dev/null
+++ b/mantools/make-relnotes
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+
+# Transform RELEASE_NOTES, split into "leader", and "major changes",
+# split into major categories, and prepend dates to paragraphs.
+#
+# Input format: the leader text is copied verbatim; each section
+# starts with "Incompatible changes with snapshot YYYYMMDD" or "Major
+# changes with snapshot YYYYMMDD"; each paragraph starts with [class,
+# class] where a class specifies one or more categories that the
+# change should be listed under. Adding class info is the only manual
+# processing needed to go from a RELEASE_NOTES file to the transformed
+# representation.
+#
+# Output format: each category is printed with a little header and
+# each paragraph is tagged with [Incompat yyyymmdd] or with [Feature
+# yyyymmdd].
+
+%leader = (); %body = ();
+$append_to = \%leader;
+
+while (<>) {
+
+ if (/^(Incompatible changes|Incompatibility) with/) {
+ die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/;
+ $append_to = \%body;
+ $prefix = "[Incompat $1] ";
+ while (<>) {
+ last if /^====/;
+ }
+ next;
+ }
+
+ if (/^Major changes with/) {
+ die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/;
+ $append_to = \%body;
+ $prefix = "[Feature $1] ";
+ while (<>) {
+ last if /^====/;
+ }
+ next;
+ }
+
+ if (/^\s*\n/) {
+ if ($paragraph) {
+ for $class (@classes) {
+ ${$append_to}{$class} .= $paragraph . $_;
+ }
+ $paragraph = "";
+ }
+ } else {
+ if ($paragraph eq "") {
+ if ($append_to eq \%leader) {
+ @classes = ("default");
+ $paragraph = $_;
+ } elsif (/^\[([^]]+)\]\s*(.*)/s) {
+ $paragraph = $prefix . $2;
+ ($junk = $1) =~ s/\s*,\s*/,/g;
+ $junk =~ s/^\s+//;
+ $junk =~ s/\s+$//;
+ #print "junk >$junk<\n";
+ @classes = split(/,+/, $junk);
+ #print "[", join(', ', @classes), "] ", $paragraph;
+ } else {
+ $paragraph = $_;
+ }
+ } else {
+ $paragraph .= $_;
+ }
+ }
+}
+
+if ($paragraph) {
+ for $class (@classes) {
+ ${$append_to}{$class} .= $prefix . $paragraph . $_;
+ }
+}
+
+print $leader{"default"};
+
+for $class (sort keys %body) {
+ print "Major changes - $class\n";
+ ($junk = "Major changes - $class") =~ s/./-/g;
+ print $junk, "\n\n";
+ print $body{$class};
+}
diff --git a/mantools/make_soho_readme b/mantools/make_soho_readme
new file mode 100755
index 0000000..abeddde
--- /dev/null
+++ b/mantools/make_soho_readme
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+cat <<'EOF'
+<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+
+<head>
+
+<title>Postfix Small/Home Office Hints and Tips</title>
+
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+
+</head>
+
+<body>
+
+<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix Small/Home Office Hints and Tips</h1>
+
+<hr>
+
+<h2>Overview</h2>
+
+<p> This document combines hints and tips for "small office/home
+office" applications into one document so that they are easier to
+find. The text describes the mail sending side only. If your machine
+does not receive mail directly (i.e. it does not have its own
+Internet domain name and its own fixed IP address), then you will
+need a solution such as "fetchmail", which is outside the scope of
+the Postfix documentation. </p>
+
+<ul>
+
+<li> <p> Selected topics from the STANDARD_CONFIGURATION_README document: </p>
+
+<ul>
+
+<li><a href="#stand_alone">Postfix on a stand-alone Internet host</a>
+
+<li><a href="#fantasy">Postfix on hosts without a real
+Internet hostname</a>
+
+</ul>
+
+<p> Selected topics from the SASL_README document: </p>
+
+<ul>
+
+<li><a href="#client_sasl_enable">Enabling SASL authentication in the
+Postfix SMTP client</a></li>
+
+<li><a href="#client_sasl_sender">Configuring Sender-Dependent SASL
+authentication </a></li>
+
+</ul>
+
+</ul>
+
+<p> See the SASL_README and STANDARD_CONFIGURATION_README documents for
+further information on these topics. </p>
+
+EOF
+
+sed -n '/^<h2><a name="stand_alone">/,${
+ /^<h2><a name="null_client">/q
+ p
+}' STANDARD_CONFIGURATION_README.html
+
+sed -n '/^<h2><a name="fantasy">/,${
+ /^<\/body>/q
+ p
+}' STANDARD_CONFIGURATION_README.html
+
+sed -n '/^<h3><a name="client_sasl_enable"/,${
+ /^<h3><a name="client_sasl_policy"/q
+ s/h3>/h2>/g
+ p
+}' SASL_README.html
+
+cat <<'EOF'
+</body>
+
+</html>
+EOF
diff --git a/mantools/makemanidx b/mantools/makemanidx
new file mode 100755
index 0000000..1fbdfb9
--- /dev/null
+++ b/mantools/makemanidx
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+cat <<EOF
+<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+
+<head>
+
+<title>Postfix Manual Pages </title>
+
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+
+</head>
+
+<body>
+
+<h1><img src="postfix-logo.jpg" width="203" height="98" ALT="">Postfix
+Manual Pages </h1>
+
+<hr>
+
+<h2> Information for new Postfix users </h2>
+
+<p> New Postfix users should first look at the following introductory
+documents. These introductions are hyperlinked to more advanced
+documents and to UNIX-style manual pages. The UNIX-style manual
+pages are intended for people who are already familiar with Postfix.
+</p>
+
+<ul>
+
+<li> <a href="OVERVIEW.html"> Postfix architecture overview </a>
+
+<li> <a href="BASIC_CONFIGURATION_README.html"> Basic configuration
+</a>
+
+<li> <a href="DEBUG_README.html"> Trouble shooting </a>
+
+<li> <a href="CONTENT_INSPECTION_README.html"> Content inspection
+overview</a>
+
+<li> <a href="SMTPD_ACCESS_README.html">Relay/access control overview
+</a>
+
+<li> <a href="DATABASE_README.html"> Lookup table overview </a>
+
+</ul>
+
+<h2> Postfix manual page organization </h2>
+
+<p> Each Postfix manual page is numbered after a section of the
+UNIX manual: examples are mailq(1) or access(5). Unfortunately,
+there is no single universal method to organize manual pages; each
+UNIX flavor appears to be different. Postfix documentation assumes
+the following convention: </p>
+
+<blockquote>
+
+<table cellpadding="0" cellspacing="0">
+
+<tr><th> Section </th> <th> Topic </th> </tr>
+
+<tr><td colspan="2"> <hr> </td> </tr>
+
+<tr><td align="center"> 1 </td> <td> Commands </td> </tr>
+
+<tr><td align="center"> 3 </td> <td> Library routines </td> </tr>
+
+<tr><td align="center"> 5 </td> <td> File formats </td> </tr>
+
+<tr><td align="center"> 8 </td> <td> Daemons </td> </tr>
+
+</table>
+
+</blockquote>
+
+EOF
+
+srctoman "$@" | sed 's/\\-/-/g' | awk '
+
+NR == 1,/SH "*SEE ALSO"*/ { next }
+
+/^Other:$/ { print ul; exit }
+
+/^[A-Z].*:$/ { print ul "<h2>", $0, "</h2>\n\n<ul>\n\n"; ul = "</ul>\n\n" }
+
+/^[a-z][-a-z0-9_]+\(/ { print "<li>", $0, "\n" }
+
+' | sed 's;: </h2>$; </h2>;'
+
+cat <<EOF
+</body>
+
+</html>
+EOF
diff --git a/mantools/makepostconf b/mantools/makepostconf
new file mode 100755
index 0000000..7aa741a
--- /dev/null
+++ b/mantools/makepostconf
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+
+# Extract parameter definitions from the sample-mumble.cf files in
+# order to build the postconf raw data file from which everything
+# will be regenerated.
+
+$POSTCONF="postconf";
+
+# Suck in the parameter definition text. Skip non-parameter blocks.
+# Strip all but the body text (i.e. strip off the non-comment line
+# that shows the default, since we will use postconf output to supply
+# the actual values).
+
+while(<>) {
+ if (/^[^#]/) {
+ if ($param_name && $saved_text) {
+ $saved_text =~ s/^(\n|#|\s)+//;
+ $saved_text =~ s/(\n|#|\s)+$//;
+ $saved_text =~ s/^# ?/\n/;
+ $saved_text =~ s/\n# ?/\n/g;
+ $definition{$param_name} = $saved_text;
+ $param_name = $saved_text = "";
+ }
+ next;
+ }
+ if (/^#/ && $param_name) {
+ $saved_text .= $_;
+ next;
+ }
+ if (/^# The (\S+) (configuration )?parameter/) {
+ $param_name = $1;
+ $saved_text = $_;
+ }
+}
+
+# Read all the default parameter values. This also provides us with
+# a list of all the parameters that postconf knows about.
+
+open(POSTCONF, "$POSTCONF -d|") || die "cannot run $POSTCONF: !$\n";
+while(<POSTCONF>) {
+ chop;
+ if (($name, $value) = split(/\s+=\s+/, $_, 2)) {
+ $defaults{$name} = $value;
+ } else {
+ warn "unexpected $POSTCONF output: $_\n";
+ }
+}
+close(POSTCONF) || die "$POSTCONF failed: $!\n";
+
+# Print all parameter definition text that we found, and warn about
+# missing definition text.
+
+for $param_name (sort keys %defaults) {
+ if (defined($definition{$param_name})) {
+ print "#DEFINE $param_name\n\n";
+ print $definition{$param_name};
+ print "\n\n";
+ } else {
+ warn "No definition found for $param_name\n";
+ }
+}
diff --git a/mantools/makepostconflinks b/mantools/makepostconflinks
new file mode 100755
index 0000000..ef61d1c
--- /dev/null
+++ b/mantools/makepostconflinks
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+postconf -d | awk '
+
+BEGIN {
+ # Skip lines with <hN>..</hN>.
+ print "\t/<\\/*[Hh][0-9]+>/{\n\t\tp\n\t\td\n\t\t}"
+
+ # Skip lines with <a name="...">.
+ print "\t/<[Aa] [Nm][Aa][Mm][Ee]=/{\n\t\tp\n\t\td\n\t\t}"
+
+ # Skip lines with <DT> or <DT>.
+ print "\t/<[Dd][Tt]>/{\n\t\tp\n\t\td\n\t\t}"
+
+ # Skip lines with <a href="...">.
+ print "\t/<[Aa] [Hh][Rr][Ee][Ff]=/{\n\t\tp\n\t\td\n\t\t}"
+
+ # XXX debugger_command is not listed in postconf output.
+ print "\ts;[[:<:]]debugger_command[[:>:]];<a href=\"postconf.5.html#debugger_command\">debugger_command</a>;g"
+
+ }
+
+ {
+ # Do not hyperlink word(digit).
+
+ printf "\ts;[[:<:]]%s[[:>:]];<a href=\"postconf.5.html#%s\">%s</a>;g\n",
+ $1, $1, $1
+ }
+'
diff --git a/mantools/makereadme b/mantools/makereadme
new file mode 100755
index 0000000..de066c1
--- /dev/null
+++ b/mantools/makereadme
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+sed '
+ s/<\/*table[^>]*>//g
+ s/<\/th[^>]*>//g
+ s/<\/td[^>]*>//g
+ s/"\([A-Z0-9_]*\)\.html">/&\1:/
+ s/All main.cf parameters/postconf(5): &/
+ /All Postfix manual pages/d
+' "$@"
+
+
+
diff --git a/mantools/man2html b/mantools/man2html
new file mode 100755
index 0000000..2ccb185
--- /dev/null
+++ b/mantools/man2html
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# Crude script to convert formatted manpages to HTML. Requires GROFF_NO_SGR.
+
+while :
+do
+ case $1 in
+ -t) title=$2; shift; shift;;
+ -*) echo "Usage: $0 [-t title] [file(s)]" 1>&2; exit 1;;
+ *) break;;
+ esac
+done
+
+echo "<!doctype html public \"-//W3C//DTD HTML 4.01 Transitional//EN\"
+ \"http://www.w3.org/TR/html4/loose.dtd\">
+<html> <head>
+<meta http-equiv=\"Content-Type\" content=\"text/html; charset=us-ascii\">
+<title> $title </title>
+</head> <body> <pre>"
+
+#ESC=`echo x | tr '[x]' '[\033]'`
+
+sed '
+ s/\([<>&]\)\1/\1/g
+ s/&/\&amp;/g
+ s/_</\&lt;/g
+ s/<</\&lt;/g
+ s/</\&lt;/g
+ s/_>/\&gt;/g
+ s/>>/\&gt;/g
+ s/>/\&gt;/g
+ s;_\([^_]\);<i>\1</i>;g
+ s;.\(.\);<b>\1</b>;g
+
+ s;</i>\( *\)<i>;\1;g
+ s;</b>\( *\)<b>;\1;g
+
+ # Skip the redundant readme/html_directory blurb. The
+ # document names that follow will be hyperlinked.
+ /^<b>README FILES/{
+ h
+ N
+ N
+ g
+ }
+' "$@"
+
+echo '</pre> </body> </html>'
diff --git a/mantools/mandouble b/mantools/mandouble
new file mode 100644
index 0000000..ffb287e
--- /dev/null
+++ b/mantools/mandouble
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+for file
+do
+ echo ==== $file ====
+ deroff $file | double
+done
diff --git a/mantools/manlint b/mantools/manlint
new file mode 100755
index 0000000..8927d89
--- /dev/null
+++ b/mantools/manlint
@@ -0,0 +1,165 @@
+#!/bin/sh
+
+# manlint - lint manual page 'roff source, stop list in mantools/manlint.stop
+
+# example: mantools/manlint man/man?/*
+
+grep -n . "$@" | sed -n '
+ s/$/ /
+ # Non-bold manual page references
+ /[a-z][_a-z0-9_]*([0-9])/{
+ p
+ d
+ }
+ # Command examples not enclosed in quotes
+ /[^"]\\fB[a-z][_a-z0-9-]* /{
+ p
+ d
+ }
+ # Missing manual page sections
+ /\\fBanvil\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBbounce\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBcleanup\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBdiscard\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBerror\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBflush\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBlmtp\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBlocal\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBmaster\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBoqmgr\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpickup\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpipe\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostalias\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostcat\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostconf\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostdrop\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostfix\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostkick\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostlock\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostlog\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostmap\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostqueue\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBpostsuper\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBproxymap\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBqmgr\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBqmqpd\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBscache\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBsendmail\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBshowq\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBsmtp\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBsmtpd\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBspawn\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBtlsmgr\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBtrivial-rewrite\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBverify\\fR[^-(]/{
+ p
+ d
+ }
+ /\\fBvirtual\\fR[^-(]/{
+ p
+ d
+ }
+' | egrep -v ':[a-z][_a-z0-9-]*\([0-9]\),' |
+ fgrep -vf mantools/manlint.stop
diff --git a/mantools/manlint.stop b/mantools/manlint.stop
new file mode 100644
index 0000000..5ff67a6
--- /dev/null
+++ b/mantools/manlint.stop
@@ -0,0 +1,113 @@
+man/man1/postmap.1:23:\fBmakemap \fIfile_type\fR \fIfile_name\fR < \fIfile_name\fR
+man/man1/sendmail.1:14:\fBsendmail -bp\fR
+man/man1/sendmail.1:17:\fBsendmail -I\fR
+man/man5/access.5:11:\fBpostmap /etc/postfix/access\fR
+man/man5/access.5:13:\fBpostmap -q "\fIstring\fB" /etc/postfix/access\fR
+man/man5/access.5:15:\fBpostmap -q - /etc/postfix/access <\fIinputfile\fR
+man/man5/canonical.5:11:\fBpostmap /etc/postfix/canonical\fR
+man/man5/canonical.5:13:\fBpostmap -q "\fIstring\fB" /etc/postfix/canonical\fR
+man/man5/canonical.5:15:\fBpostmap -q - /etc/postfix/canonical <\fIinputfile\fR
+man/man5/cidr_table.5:11:\fBpostmap -q "\fIstring\fB" cidr:/etc/postfix/\fIfilename\fR
+man/man5/cidr_table.5:13:\fBpostmap -q - cidr:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/header_checks.5:11:\fBheader_checks = pcre:/etc/postfix/header_checks\fR
+man/man5/header_checks.5:13:\fBmime_header_checks = pcre:/etc/postfix/mime_header_checks\fR
+man/man5/header_checks.5:15:\fBnested_header_checks = pcre:/etc/postfix/nested_header_checks\fR
+man/man5/header_checks.5:17:\fBbody_checks = pcre:/etc/postfix/body_checks\fR
+man/man5/header_checks.5:19:\fBpostmap -fq "\fIstring\fB" pcre:/etc/postfix/\fIfilename\fR
+man/man5/header_checks.5:21:\fBpostmap -fq - pcre:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/ldap_table.5:11:\fBpostmap -q "\fIstring\fB" ldap:/etc/postfix/filename\fR
+man/man5/ldap_table.5:13:\fBpostmap -q - ldap:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/mysql_table.5:11:\fBpostmap -q "\fIstring\fB" mysql:/etc/postfix/filename\fR
+man/man5/mysql_table.5:13:\fBpostmap -q - mysql:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/nisplus_table.5:11:\fBpostmap -q "\fIstring\fB" "nisplus:[\fIname\fB=%s];\fIname.name.\fB"\fR
+man/man5/nisplus_table.5:13:\fBpostmap -q - "nisplus:[\fIname\fB=%s];\fIname.name.\fB"\fR <\fIinputfile\fR
+man/man5/pcre_table.5:11:\fBpostmap -fq "\fIstring\fB" pcre:/etc/postfix/\fIfilename\fR
+man/man5/pcre_table.5:13:\fBpostmap -fq - pcre:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/pgsql_table.5:11:\fBpostmap -q "\fIstring\fB" pgsql:/etc/postfix/filename\fR
+man/man5/pgsql_table.5:13:\fBpostmap -q - pgsql:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/postconf.5:11:\fBpostconf -e\fR "\fIparameter=value\fR" ...
+man/man5/regexp_table.5:11:\fBpostmap -fq "\fIstring\fB" regexp:/etc/postfix/\fIfilename\fR
+man/man5/regexp_table.5:13:\fBpostmap -fq - regexp:/etc/postfix/\fIfilename\fR <\fIinputfile\fR
+man/man5/relocated.5:11:\fBpostmap /etc/postfix/relocated\fR
+man/man5/tcp_table.5:11:\fBpostmap -q "\fIstring\fB" tcp:\fIhost:port\fR
+man/man5/tcp_table.5:13:\fBpostmap -q - tcp:\fIhost:port\fR <\fIinputfile\fR
+man/man5/transport.5:11:\fBpostmap /etc/postfix/transport\fR
+man/man5/transport.5:13:\fBpostmap -q "\fIstring\fB" /etc/postfix/transport\fR
+man/man5/transport.5:15:\fBpostmap -q - /etc/postfix/transport <\fIinputfile\fR
+man/man5/virtual.5:11:\fBpostmap /etc/postfix/virtual\fR
+man/man5/virtual.5:13:\fBpostmap -q "\fIstring\fB" /etc/postfix/virtual\fR
+man/man5/virtual.5:15:\fBpostmap -q - /etc/postfix/virtual <\fIinputfile\fR
+man/man8/cleanup.8:64:Table-driven rewriting rules make it hard to express \fBif then
+man/man8/lmtp.8:144:.IP "\fItransport_\fBdestination_concurrency_limit ($default_destination_concurrency_limit)\fR"
+man/man8/lmtp.8:147:.IP "\fItransport_\fBdestination_recipient_limit ($default_destination_recipient_limit)\fR"
+man/man1/postalias.1:12:\fBpostalias\fR [\fB-Nfinoprsvw\fR] [\fB-c \fIconfig_dir\fR]
+man/man1/postcat.1:11:\fBpostcat\fR [\fB-oqv\fR] [\fB-c \fIconfig_dir\fR] [\fIfiles\fR...]
+man/man1/postconf.1:12:\fBpostconf\fR [\fB-dhmlnv\fR] [\fB-c \fIconfig_dir\fR]
+man/man1/postconf.1:15:\fBpostconf\fR [\fB-ev\fR] [\fB-c \fIconfig_dir\fR]
+man/man1/postdrop.1:11:\fBpostdrop\fR [\fB-rv\fR] [\fB-c \fIconfig_dir\fR]
+man/man1/postfix.1:12:\fBpostfix\fR [\fB-Dv\fR] [\fB-c \fIconfig_dir\fR] \fIcommand\fR
+man/man1/postkick.1:12:\fBpostkick\fR [\fB-c \fIconfig_dir\fR] [\fB-v\fR]
+man/man1/postlock.1:12:\fBpostlock\fR [\fB-c \fIconfig_dir\fB] [\fB-l \fIlock_style\fB]
+man/man1/postlog.1:12:\fBpostlog\fR [\fB-iv\fR] [\fB-c \fIconfig_dir\fR]
+man/man1/postlog.1:36:\fBerror\fR, \fBfatal\fR, or \fBpanic\fR.
+man/man1/postmap.1:12:\fBpostmap\fR [\fB-Nfinoprsvw\fR] [\fB-c \fIconfig_dir\fR]
+man/man1/postqueue.1:11:\fBpostqueue\fR [\fB-c \fIconfig_dir\fR] \fB-f\fR
+man/man1/postqueue.1:13:\fBpostqueue\fR [\fB-c \fIconfig_dir\fR] \fB-p\fR
+man/man1/postqueue.1:15:\fBpostqueue\fR [\fB-c \fIconfig_dir\fR] \fB-s \fIsite\fR
+man/man1/postsuper.1:12:\fBpostsuper\fR [\fB-psv\fR]
+man/man1/postsuper.1:28:\fBdeferred\fR directories with mail files and the \fBbounce\fR,
+man/man1/postsuper.1:29:\fBdefer\fR, \fBtrace\fR and \fBflush\fR directories with log files.
+man/man1/qshape.1:24:\fBpostfix\fR).
+man/man1/sendmail.1:11:\fBsendmail\fR [\fIoption ...\fR] [\fIrecipient ...\fR]
+man/man1/smtp-source.1:79:port is \fBsmtp\fR.
+man/man5/postconf.5:9:\fBpostconf\fR \fIparameter\fR ...
+man/man5/postconf.5:2438:Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR,
+man/man5/postconf.5:2444:and \fBvirtual\fR is likely to cause problems when mail is forwarded
+man/man5/postconf.5:4562:is \fBsmtpd\fR, corresponding to a SASL configuration file named
+man/man5/transport.5:117:such as \fBsmtp\fR or \fBlocal\fR. The \fInexthop\fR field
+man/man5/virtual.5:223:Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR,
+man/man8/anvil.8:11:\fBanvil\fR [generic Postfix daemon options]
+man/man8/bounce.8:11:\fBbounce\fR [generic Postfix daemon options]
+man/man8/cleanup.8:11:\fBcleanup\fR [generic Postfix daemon options]
+man/man8/discard.8:11:\fBdiscard\fR [generic Postfix daemon options]
+man/man8/error.8:11:\fBerror\fR [generic Postfix daemon options]
+man/man8/flush.8:11:\fBflush\fR [generic Postfix daemon options]
+man/man8/lmtp.8:11:\fBlmtp\fR [generic Postfix daemon options]
+man/man8/lmtp.8:38:\fBlmtp\fR in \fBservices\fR(4).
+man/man8/local.8:11:\fBlocal\fR [generic Postfix daemon options]
+man/man8/local.8:33:\fBsendmail\fR-style alias databases.
+man/man8/local.8:34:Users can have \fBsendmail\fR-style ~/.\fBforward\fR files.
+man/man8/master.8:11:\fBmaster\fR [\fB-Dtv\fR] [\fB-c \fIconfig_dir\fR] [\fB-e \fIexit_time\fR]
+man/man8/oqmgr.8:11:\fBoqmgr\fR [generic Postfix daemon options]
+man/man8/pickup.8:11:\fBpickup\fR [generic Postfix daemon options]
+man/man8/pipe.8:11:\fBpipe\fR [generic Postfix daemon options] command_attributes...
+man/man8/proxymap.8:11:\fBproxymap\fR [generic Postfix daemon options]
+man/man8/qmgr.8:11:\fBqmgr\fR [generic Postfix daemon options]
+man/man8/qmqpd.8:11:\fBqmqpd\fR [generic Postfix daemon options]
+man/man8/scache.8:11:\fBscache\fR [generic Postfix daemon options]
+man/man8/showq.8:11:\fBshowq\fR [generic Postfix daemon options]
+man/man8/smtp.8:11:\fBsmtp\fR [generic Postfix daemon options]
+man/man8/smtpd.8:11:\fBsmtpd\fR [generic Postfix daemon options]
+man/man8/spawn.8:11:\fBspawn\fR [generic Postfix daemon options] command_attributes...
+man/man8/tlsmgr.8:11:\fBtlsmgr\fR [generic Postfix daemon options]
+man/man8/trivial-rewrite.8:11:\fBtrivial-rewrite\fR [generic Postfix daemon options]
+man/man8/trivial-rewrite.8:31:the \fBlocal\fR address rewriting context. This prevents
+man/man8/verify.8:11:\fBverify\fR [generic Postfix daemon options]
+man/man8/virtual.8:11:\fBvirtual\fR [generic Postfix daemon options]
+man/man5/aliases.5:140:\fBvirtual\fR, \fBalias\fR, \fBforward\fR, or \fBinclude\fR.
+man/man5/canonical.5:170:Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR,
+man/man8/bounce.8:19:\fBbounce\fR, \fBdefer\fR or \fBtrace\fR).
+man/man1/postfix.1:80:.IP "\fB-D\fR (with \fBpostfix start\fR only)"
+man/man5/postconf.5:2340:.IP "\fBbounce\fR (also implies \fB2bounce\fR)"
+man/man1/postfix.1:44:.IP \fBflush\fR
+man/man8/oqmgr.8:55:.IP \fBbounce\fR
+man/man8/qmgr.8:55:.IP \fBbounce\fR
+man/man8/trivial-rewrite.8:21:.IP \fBlocal\fR
+man/man5/aliases.5:140:\fBvirtual\fR, \fBalias\fR, \fBforward\fR, \fBinclude\fR,
+man/man5/canonical.5:171:Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR,
+man/man5/generic.5:11:\fBpostmap /etc/postfix/generic\fR
+man/man5/generic.5:13:\fBpostmap -q "\fIstring\fB" /etc/postfix/generic\fR
+man/man5/generic.5:15:\fBpostmap -q - /etc/postfix/generic <\fIinputfile\fR
+man/man5/generic.5:189:Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR,
+man/man5/postconf.5:2446:and \fBvirtual\fR is likely to cause problems when mail is forwarded
+man/man5/postconf.5:4575:is \fBsmtpd\fR, corresponding to a SASL configuration file named
diff --git a/mantools/mansect b/mantools/mansect
new file mode 100755
index 0000000..60262be
--- /dev/null
+++ b/mantools/mansect
@@ -0,0 +1,125 @@
+#!/bin/sh
+
+# mansect - extract manual chapter number from source comment
+
+# @(#) mansect.sh 1.2 11/4/89 15:56:37
+
+LANG=
+
+: process arguments
+
+while :
+do
+ case $1 in
+ [0-9]) SECT=$1;;
+ -) LANG=$1; B='[#:]';;
+ -a) LANG=$1; B='#';;
+ -c) LANG=$1; B='\/\*';;
+ -f) LANG=$1; B='[Cc]';;
+ -m) LANG=$1; B='#';;
+ -n|-t) LANG=$1; B='\\"';;
+ -p) LANG=$1; B='{';;
+ -r) LANG=$1; B='#';;
+ -C) LANG=$1; B=$2; shift;;
+ -*) ERROR="unknown option: $1"; break;;
+ "") ERROR="missing file argument"; break;;
+ *) break;;
+ esac
+ shift
+done
+
+# check error status
+
+case $ERROR in
+"") ;;
+ *) echo "$0: $ERROR" 1>&2
+ echo "usage: $0 [-|-a|-c|-f|-m|-n|-p|-t|-r|-C] file(s)" 1>&2; exit 1;;
+esac
+
+# set up for file suffix processing
+
+case $LANG in
+"") sh='[:#]'; r='#'; rh=$r; awk='#'; mk='#';
+ c='\/\*'; d=$c; h=$c; y=$c; l=$c;
+ f='[Cc]'; fh=$f; p='{'; ph=$p;
+ ms='\\"'; nr=$ms; mn=$ms; man=$ms;
+esac
+
+# extract chapter number from file
+
+for i
+do
+ case $LANG in
+ "") eval B\="\$`expr $i : '.*\.\([^.]*\)$'`"
+ test "$B" || { echo "$0: unknown suffix: '$i'; assuming c" 1>&2; B=$c; }
+ esac
+ sed -n '
+ /^'"$B"'++/,/^'"$B"'--/{
+ s/[ ]*$//
+ /^'"$B"' NAME/{
+ N
+ s/^.*\n'"$B"'.*[ ]\([0-9]\)[ ]*$/\1/p
+ q
+ }
+ }
+' $i
+done
+
+exit
+
+#++
+# NAME
+# mansect 1
+# SUMMARY
+# extract manual chapter number from comment
+# PACKAGE
+# sdetools
+# SYNOPSIS
+# mansect [-|-a|-c|-f|-m|-m|-n|-p|-t|-r|-C] file(s)
+# DESCRIPTION
+# \fImansect\fR extracts the manual chapter number from
+# source file comments in the style of \fInewsrc(1)\fR.
+# Typically, \fImansect\fR is integrated with \fImake(1)\fR scripts.
+#
+# Source files are processed in the indicated order; if no
+# files are specified the command produces no output.
+#
+# The source file language can be specified through a command-line
+# option, or can be implied by the filename suffix.
+# The expected start-of-comment symbol is shown in the last column.
+#
+# .nf
+# .ft C
+ option suffix language comment
+
+ - .sh shell [:#]
+ -a .awk awk #
+ -c .c .h .l .y c lex yacc /*
+ -f .f .fh fortran [Cc]
+ -m .mk make #
+ -n .man .mn .ms .nr nroff troff \\"
+ -p .p .ph pascal {
+ -r .r .rh ratfor #
+ -C any language next argument
+# .ft
+# COMMANDS
+# sh(1), sed(1)
+# SEE ALSO
+# newsrc(1), xman(1)
+# The earlier commands new(1), mod(1), mkman(1) and dssman(1)
+# by Ruud Zwart and Ben Noordzij (Erasmus University, Rotterdam)
+# DIAGNOSTICS
+# The program complaints if an unknown language is specified
+# of if the language cannot be deduced from the file suffix.
+# AUTHOR(S)
+# W.Z. Venema
+# Eindhoven University of Technology
+# Department of Mathematics and Computer Science
+# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
+# CREATION DATE
+# Sun Feb 15 21:40:28 GMT+1:00 1987
+# LAST MODIFICATION
+# 11/4/89 15:56:37
+# VERSION/RELEASE
+# 1.2
+#--
diff --git a/mantools/manspell b/mantools/manspell
new file mode 100644
index 0000000..107873d
--- /dev/null
+++ b/mantools/manspell
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+for file
+do
+ echo ==== $file ====
+ deroff $file | spell | fgrep -vf proto/stop
+done
diff --git a/mantools/missing-proxy-read-maps b/mantools/missing-proxy-read-maps
new file mode 100755
index 0000000..58dc390
--- /dev/null
+++ b/mantools/missing-proxy-read-maps
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+
+# Outputs missing mail_params.h lines for the proxy_read_maps default
+# value.
+#
+# First, get the proxy_read_maps default value from postconf command
+# output. This gives us a list of parameter names that are already
+# present in the proxy_read_maps default value.
+
+$command = "bin/postconf -dh proxy_read_maps | tr ' ' '\12'";
+open(PROXY_READ_MAPS, "$command|")
+ || die "can't execute $command: !$\n";
+while (<PROXY_READ_MAPS>) {
+ chomp;
+ next unless /^\$(.+)$/;
+ $proxy_read_maps{$1} = 1;
+}
+close(PROXY_READ_MAPS) || die "close $command: $!\n";
+
+# Parse mail_params.h, to determine the VAR_XXX name for each main.cf
+# parameter. Ignore parameter names composed from multiple strings,
+# unless the parameter name is known to be of interest. The code
+# block after this one will discover if we ignored too much.
+
+$mail_params_h = "src/global/mail_params.h";
+open(MAIL_PARAMS, "<$mail_params_h")
+ || die "Open $mail_params_h";
+while ($line = <MAIL_PARAMS>) {
+ chomp;
+ if ($line =~ /^#define\s+(VAR\S+)\s+"(\S+)"\s*(\/\*.*\*\/)?$/) {
+ $mail_params{$2} = $1;
+ } elsif ($line =~/^#define\s+(VAR\S+)\s+"address_verify_"\s+VAR_SND_DEF_XPORT_MAPS/) {
+ $mail_params{"address_verify_sender_dependent_default_transport_maps"} = $1;
+ } elsif ($line =~/^#define\s+(VAR\S+)\s+"sender_dependent_"\s+VAR_DEF_TRANSPORT\s+"_maps"/) {
+ $mail_params{"sender_dependent_default_transport_maps"} = $1;
+ }
+}
+close(MAIL_PARAMS) || die "close $mail_params_h: !$\n";
+#
+# Produce mail_params.h lines for all parameters that have names
+# ending in _maps and that are not listed in proxy_read_maps. We get
+# the full parameter name list from postconf command output. Abort
+# if we discover that our mail_params.h parser missed something.
+
+$command = "bin/postconf -H";
+open(ALL_PARAM_NAMES, "$command|")
+ || die "can't execute $command: !$\n";
+while ($param_name = <ALL_PARAM_NAMES>) {
+ chomp($param_name);
+ next unless ($param_name =~ /_maps$/);
+ next if ($param_name =~ /^(proxy_read|proxy_write)_maps$/);
+ next if defined($proxy_read_maps{$param_name});
+ die "unknown parameter: $param_name\n"
+ unless defined($mail_params{$param_name});
+ print "\t\t\t\t\" \$\" $mail_params{$param_name} \\\n";
+}
diff --git a/mantools/postconf2html b/mantools/postconf2html
new file mode 100755
index 0000000..5ad038f
--- /dev/null
+++ b/mantools/postconf2html
@@ -0,0 +1,99 @@
+#!/usr/bin/perl
+
+# postconf2html - add HTML paragraphs
+
+# Basic operation:
+#
+# - Process input as text blocks separated by one or more empty
+# (or all whitespace) lines.
+#
+# - Remove text between <!-- and -->; each may be on a different line.
+#
+# - Optionally remove <nroffescape> pass-through requests (unless
+# the -n option is specified).
+#
+# - Don't touch blocks that start with `<' in column zero.
+#
+# The only changes made are:
+#
+# - Emit "<DT><a name="parametername">parametername</a>...</DT><DD>" at
+# the top of each parameter description.
+#
+# All other non-comment input is flagged as an error.
+
+use Getopt::Std;
+
+$opt_h = undef;
+$opt_v = undef;
+$opt_n = undef;
+getopts("hnv");
+
+die "Usage: $0 [-nv]\n" if ($opt_h);
+
+#push @ARGV, "/dev/null"; # XXX
+
+while(<>) {
+
+ # Skip comments.
+ next if /^#/;
+
+ # Skip blank lines before text block.
+ next unless (/\S/);
+
+ # Gobble up the next text block.
+ $block = "";
+ $comment = 0;
+ do {
+ $_ =~ s/\s+\n$/\n/;
+ $block .= $_;
+ if ($_ =~ /<!--/)
+ { $comment = 1; }
+ if ($comment && $_ =~ /-->/)
+ { $comment = 0; $block =~ s/<!--.*-->//sg; }
+ } while((($_ = <>) && /\S/) || $comment);
+
+ # Strip nroff escapes.
+ $block =~ s/<\s*nroffescape[^>]+>//g unless $opt_n;
+
+ # Skip blanks after comment elimination.
+ if ($block =~ /^\s/) {
+ $block =~ s/^\s+//s;
+ next if ($block eq "");
+ }
+
+ # Don't touch a text block starting with < in column zero.
+ if ($block =~ /^</) {
+ print "$block\n";
+ }
+
+ # Meta block. Emit upper case tags for html2man.
+ elsif ($block =~ /^%PARAM/) {
+ print "\n</DD>\n\n" if ($param);
+ print "\n<DL>\n\n" if ($need_dl);
+ $need_dl = 0;
+ ($junk, $param, $defval) = split(/\s+/, $block, 3);
+ $defval =~ s/\s+$//s;
+ $defval = "empty" if ($defval eq "");
+ $defval = "default: $defval" unless ($defval eq "read-only");
+ print "<DT><b><a name=\"$param\">$param</a>\n($defval)</b></DT><DD>\n\n";
+ }
+
+ # Meta block. Emit upper case tags for html2man.
+ elsif ($block =~ /^%CLASS/) {
+ print "\n</DD>\n\n" if ($param);
+ print "\n</DL>\n\n" if ($class);
+ $param ="";
+ ($junk, $class, $text) = split(/\s+/, $block, 3);
+ $text =~ s/\s+$//s;
+ print "<H2><a name=\"$class\">$text</a></H2>\n\n";
+ $need_dl = 1;
+ }
+
+ # Can't happen.
+ else {
+ die "Unrecognized text block:\n$block";
+ }
+}
+
+print "\n</DD>\n\n" if ($param);
+print "\n</DL>\n\n" if ($class);
diff --git a/mantools/postconf2man b/mantools/postconf2man
new file mode 100755
index 0000000..c9aff6d
--- /dev/null
+++ b/mantools/postconf2man
@@ -0,0 +1,94 @@
+#!/usr/bin/perl
+
+# postconf2man - convert postconf2html to nroff
+
+# Basic operation:
+#
+# - Process input as blocks of text separated by one or more empty
+# (or all whitespace) lines.
+#
+# - Process <nroffescape> pass-through requests for things that this
+# script cannot do automatically.
+#
+# Caution: this depends heavily on the postconf2html output format.
+
+#use Getopt::Std;
+
+#$opt_h = undef;
+#$opt_v = undef;
+#getopts("hv");
+
+#die "Usage: $0 [-hv]\n" if ($opt_h);
+
+#push @ARGV, "/dev/null"; # XXX
+
+while(<>) {
+
+ # Skip blank lines before text block.
+ next unless (/\S/);
+
+ # Gobble up the next text block.
+ $block = "";
+ do {
+ $_ =~ s/\s+\n$/\n/;
+ $block .= $_;
+ } while(($_ = <>) && /\S/);
+
+ # How the %!#$^@ do I get a backslash substituted into a string?
+ # Even \134 comes out as \e. What brain damage is this?
+ #$block =~ s/\n\./\n\\\&./g;
+ $block =~ s/\n\./\n\134\&./g;
+ if ($block =~ /<H2>/) {
+ $block =~ s/<H2><a[^>]+>([^<]+)<\/a><\/H2>/\n.SH \1\n/g;
+ $block =~ tr/a-z/A-Z/;
+ }
+ $block =~ s/<DT><b><a[^>]+>([^<]+)<\/a>\n(.*)<\/b><\/DT><DD>/\n.SH \1 \2\n/g;
+ $block =~ s/<[Aa][ \n]+[Hh][Rr][Ee][Ff]="[^"]+">//g;
+ $block =~ s/<[Aa][ \n]+[Nn][Aa][Mm][Ee]="[^"]+">//g;
+ $block =~ s/<\/[Aa]>//g;
+ $block =~ s/<\/DD>/\n/g;
+ $block =~ s/<DL>/\n/g;
+ $block =~ s/<\/DL>/\n/g;
+ $block =~ s/\\/\\e/g;
+ $block =~ s/<b>/\\fB/g;
+ $block =~ s/<i>/\\fI/g;
+ $block =~ s/<\/b>/\\fR/g;
+ $block =~ s/<\/i>/\\fR/g;
+ $block =~ s/^(<p(re)?>)/.PP\n\1/ if ($wantpp);
+ $block =~ s/<p> */\n/g;
+ $block =~ s/ *<\/p>/\n/g;
+ $block =~ s/<pre>/\n.nf\n.na\n.ft C\n/g;
+ $block =~ s/<\/pre>/\n.fi\n.ad\n.ft R\n/g;
+ $block =~ s/<dl[^>]*>/\n/g;
+ $block =~ s/<ul>/\n/g;
+ #$block =~ s/<\/dl>/\n.PP\n/g;
+ #$block =~ s/<\/ul>/\n.PP\n/g;
+ $block =~ s/<\/dl>/\n.br\n/g;
+ $block =~ s/<\/ul>/\n.br\n/g;
+ $block =~ s/<dd>\s*/\n/g;
+ $block =~ s/<\/dd>/\n.br\n/g;
+ $block =~ s/<li>\s*/\n.IP \\(bu\n/g;
+ $block =~ s/<dt>\s*/\n.IP "/g;
+ $block =~ s/\s*<\/dt>/"/g;
+ $block =~ s/<tt>\s*//g;
+ $block =~ s/\s*<\/tt>//g;
+ # Munge "-" here, so that we don't screw up ".in -4".
+ $block =~ s/-/\\-/g;
+ $block =~ s/<blockquote>/\n.sp\n.in +4\n/g;
+ $block =~ s/<\/blockquote>/\n.in -4\n/g;
+ $block =~ s/\n<br>\s*/\n.br\n/g;
+ $block =~ s/<br>\s*/\n.br\n/g;
+ $block =~ s/&le;/<=/g;
+ $block =~ s/&lt;/</g;
+ $block =~ s/&ge;/>=/g;
+ $block =~ s/&gt;/>/g;
+ $block =~ s/&amp;/\&/g;
+ $block =~ s/&ndash;/-/g;
+ $block =~ s/&mdash;/-/g;
+ $block =~ s/\s+\n/\n/g;
+ $block =~ s/^\n//g;
+ $block =~ s/\s*<\s*nroffescape\s+([^ >]+)\s*>\s*/\n\1\n/g;
+ $block =~ s/([a-z][_a-zA-Z0-9-]*)(\([0-9]\))/\\fB\1\\fR\2/g;
+ print $block;
+ $wantpp = !($block =~ /^\.(SH|IP)/);
+}
diff --git a/mantools/postconffix b/mantools/postconffix
new file mode 100755
index 0000000..1c70f36
--- /dev/null
+++ b/mantools/postconffix
@@ -0,0 +1,72 @@
+#!/usr/bin/perl
+
+# postconffix - add HTML paragraphs
+
+# Basic operation:
+#
+# - Process input as text blocks separated by one or more empty
+# (or all whitespace) lines.
+#
+# - Don't touch blocks that start with `<' in column zero.
+#
+# The only changes made are:
+#
+# - Put <p>..</p> around text blocks that start in column zero.
+#
+# - Put <pre>..</pre> around text blocks that start elsewhere.
+
+#use Getopt::Std;
+
+#$opt_h = undef;
+#$opt_v = undef;
+#getopts("hv");
+
+#die "Usage: $0 [-hv]\n" if ($opt_h);
+
+#push @ARGV, "/dev/null"; # XXX
+
+while(<>) {
+
+ # Pass through comments and blank linkes before a text block.
+ if (/^(#|\s*$)/) {
+ print;
+ next;
+ }
+
+ # Gobble up the next text block.
+ $block = "";
+ do {
+ $_ =~ s/\s+\n$/\n/;
+ $block .= $_;
+ } while(($_ = <>) && /\S/);
+
+ # Don't touch a text block starting with < in column zero.
+ if ($block =~ /^</) {
+ print "$block\n";
+ }
+
+ # Meta block.
+ elsif ($block =~ /^%/) {
+ print "$block\n";
+ }
+
+ # Example block.
+ elsif ($block =~ /^\S+\s=/) {
+ print "<pre>\n$block</pre>\n\n";
+ }
+
+ # Pre-formatted block.
+ elsif ($block =~ /^\s/) {
+ print "<pre>\n$block</pre>\n\n";
+ }
+
+ # Paragraph block.
+ elsif ($block =~ /^\S/) {
+ print "<p>\n$block</p>\n\n";
+ }
+
+ # Can't happen.
+ else {
+ die "Unrecognized text block:\n$block";
+ }
+}
diff --git a/mantools/postlink b/mantools/postlink
new file mode 100755
index 0000000..b94e0f4
--- /dev/null
+++ b/mantools/postlink
@@ -0,0 +1,1237 @@
+#!/usr/bin/perl
+
+$printit++ unless $nflag;
+
+$\ = "\n"; # automatically add newline on print
+
+LINE:
+while (<>) {
+ chop;
+
+ # Glue together words that were broken across line breaks. The
+ # "label: if_block" was generated by a sed-to-perl converter; the
+ # braces around this are a workaround for buggy implementations.
+
+ {
+ Again:
+ if (/(-[<\/bB>]*|RFC)$/) {
+ $_ .= "\n";
+ $len1 = length;
+ $_ .= <>;
+ chop if $len1 < length;
+ goto Again;
+ }
+ }
+ if (/<[Aa] *[HhNn][RrAa][EeMm][FfEe] *=/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ if (/<\/[Aa]>/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ if (/"[Hh][Tt][Tt][Pp]:/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ if (/<[Tt][Ii][Tt][Ll][Ee]>/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+
+ # Following block was generated with "makepostconflinks"
+ # but hyphenation was added manually.
+
+ if (/<\/*[Hh]\d*>/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ if (/<[Aa] [Nm][Aa][Mm][Ee]=/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ if (/<[D][T]>/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ s;\bautho[-</bB>]*\n*[ <bB>]*rized_flush_users\b;<a href="postconf.5.html#authorized_flush_users">$&</a>;g;
+ s;\bautho[-</bB>]*\n*[ <bB>]*rized_mailq_users\b;<a href="postconf.5.html#authorized_mailq_users">$&</a>;g;
+ s;\bautho[-</bB>]*\n*[ <bB>]*rized_submit_users\b;<a href="postconf.5.html#authorized_submit_users">$&</a>;g;
+ s;\bautho[-</bB>]*\n*[ <bB>]*rized_verp_clients\b;<a href="postconf.5.html#authorized_verp_clients">$&</a>;g;
+ s;\bdebugger_command\b;<a href="postconf.5.html#debugger_command">$&</a>;g;
+ s;\b2bounce_notice_recipi[-</bB>]*\n*[ <bB>]*ent\b;<a href="postconf.5.html#2bounce_notice_recipient">$&</a>;g;
+ s;\baccess_map_reject_code\b;<a href="postconf.5.html#access_map_reject_code">$&</a>;g;
+ s;\baccess_map_defer_code\b;<a href="postconf.5.html#access_map_defer_code">$&</a>;g;
+ s;\baddress_verify_default_transport\b;<a href="postconf.5.html#address_verify_default_transport">$&</a>;g;
+ s;\baddress_verify_sender_depen[-</bB>]*\n*[ <bB>]*dent_default_trans[-</bB>]*\n*[ <bB>]*port_maps\b;<a href="postconf.5.html#address_verify_sender_dependent_default_transport_maps">$&</a>;g;
+ s;\baddress_verify_local_transport\b;<a href="postconf.5.html#address_verify_local_transport">$&</a>;g;
+ s;\baddress_verify_map\b;<a href="postconf.5.html#address_verify_map">$&</a>;g;
+ s;\baddress_verify_negative_cache\b;<a href="postconf.5.html#address_verify_negative_cache">$&</a>;g;
+ s;\baddress_verify_negative_expire_time\b;<a href="postconf.5.html#address_verify_negative_expire_time">$&</a>;g;
+ s;\baddress_verify_negative_refresh_time\b;<a href="postconf.5.html#address_verify_negative_refresh_time">$&</a>;g;
+ s;\baddress_verify_cache_cleanup_interval\b;<a href="postconf.5.html#address_verify_cache_cleanup_interval">$&</a>;g;
+ s;\baddress_verify_poll_count\b;<a href="postconf.5.html#address_verify_poll_count">$&</a>;g;
+ s;\baddress_verify_poll_delay\b;<a href="postconf.5.html#address_verify_poll_delay">$&</a>;g;
+ s;\baddress_verify_positive_expire_time\b;<a href="postconf.5.html#address_verify_positive_expire_time">$&</a>;g;
+ s;\baddress_verify_positive_refresh_time\b;<a href="postconf.5.html#address_verify_positive_refresh_time">$&</a>;g;
+ s;\baddress_verify_relay_transport\b;<a href="postconf.5.html#address_verify_relay_transport">$&</a>;g;
+ s;\baddress_verify_relay[-</bB>]*\n*[ <bB>]*host\b;<a href="postconf.5.html#address_verify_relayhost">$&</a>;g;
+ s;\baddress_verify_sender_dependent_relay[-</bB>]*\n*[ <bB>]*host_maps\b;<a href="postconf.5.html#address_verify_sender_dependent_relayhost_maps">$&</a>;g;
+ s;\baddress_verify_sender\b;<a href="postconf.5.html#address_verify_sender">$&</a>;g;
+ s;\baddress_verify_sender_ttl\b;<a href="postconf.5.html#address_verify_sender_ttl">$&</a>;g;
+ s;\baddress_verify_service_name\b;<a href="postconf.5.html#address_verify_service_name">$&</a>;g;
+ s;\baddress_verify_transport_maps\b;<a href="postconf.5.html#address_verify_transport_maps">$&</a>;g;
+ s;\baddress_verify_virtual_transport\b;<a href="postconf.5.html#address_verify_virtual_transport">$&</a>;g;
+ s;\baddress_verify_pending_request_limit\b;<a href="postconf.5.html#address_verify_pending_request_limit">$&</a>;g;
+ s;\bsmtp_address_verify_target\b;<a href="postconf.5.html#smtp_address_verify_target">$&</a>;g;
+ s;\blmtp_address_verify_target\b;<a href="postconf.5.html#lmtp_address_verify_target">$&</a>;g;
+ s;\balias_database\b;<a href="postconf.5.html#alias_database">$&</a>;g;
+ s;\balias_maps\b;<a href="postconf.5.html#alias_maps">$&</a>;g;
+ s;\ballow_mail_to_com[-</bB>]*\n*[ <bB>]*mands\b;<a href="postconf.5.html#allow_mail_to_commands">$&</a>;g;
+ s;\ballow_mail_to_files\b;<a href="postconf.5.html#allow_mail_to_files">$&</a>;g;
+ s;\ballow_min_user\b;<a href="postconf.5.html#allow_min_user">$&</a>;g;
+ s;\ballow_percent_hack\b;<a href="postconf.5.html#allow_percent_hack">$&</a>;g;
+ s;\ballow_untrusted_routing\b;<a href="postconf.5.html#allow_untrusted_routing">$&</a>;g;
+ s;\balternate_con[-</bB>]*\n*[ <bB>]*fig_direc[-</bB>]*\n*[ <bB>]*tories\b;<a href="postconf.5.html#alternate_config_directories">$&</a>;g;
+ s;\balways_add_missing_headers\b;<a href="postconf.5.html#always_add_missing_headers">$&</a>;g;
+ s;\balways_bcc\b;<a href="postconf.5.html#always_bcc">$&</a>;g;
+ s;\banvil_rate_time_unit\b;<a href="postconf.5.html#anvil_rate_time_unit">$&</a>;g;
+ s;\bappend_at_myorigin\b;<a href="postconf.5.html#append_at_myorigin">$&</a>;g;
+ s;\bappend_dot_mydomain\b;<a href="postconf.5.html#append_dot_mydomain">$&</a>;g;
+ s;\bapplication_event_drain_time\b;<a href="postconf.5.html#application_event_drain_time">$&</a>;g;
+ s;\bbackwards_bounce_logfile_compatibility\b;<a href="postconf.5.html#backwards_bounce_logfile_compatibility">$&</a>;g;
+ s;\bberkeley_db_create_buffer_size\b;<a href="postconf.5.html#berkeley_db_create_buffer_size">$&</a>;g;
+ s;\bberkeley_db_read_buffer_size\b;<a href="postconf.5.html#berkeley_db_read_buffer_size">$&</a>;g;
+ s;\bbest_mx_transport\b;<a href="postconf.5.html#best_mx_transport">$&</a>;g;
+ s;\bbiff\b;<a href="postconf.5.html#biff">$&</a>;g;
+ s;\bbody_checks\b;<a href="postconf.5.html#body_checks">$&</a>;g;
+ s;\bbody_checks_size_limit\b;<a href="postconf.5.html#body_checks_size_limit">$&</a>;g;
+ s;\bbounce_notice_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#bounce_notice_recipient">$&</a>;g;
+ s;\bbounce_queue_lifetime\b;<a href="postconf.5.html#bounce_queue_lifetime">$&</a>;g;
+ s;\bbounce_service_name\b;<a href="postconf.5.html#bounce_service_name">$&</a>;g;
+ s;\bbounce_size_limit\b;<a href="postconf.5.html#bounce_size_limit">$&</a>;g;
+ s;\bbounce_tem[-</bB>]*\n* *[<bB>]*plate_file\b;<a href="postconf.5.html#bounce_template_file">$&</a>;g;
+ s;\bbroken_sasl_auth_clients\b;<a href="postconf.5.html#broken_sasl_auth_clients">$&</a>;g;
+ s;\bcanonical_classes\b;<a href="postconf.5.html#canonical_classes">$&</a>;g;
+ s;\bcanonical_maps\b;<a href="postconf.5.html#canonical_maps">$&</a>;g;
+ s;\bnon_smtpd_milters\b;<a href="postconf.5.html#non_smtpd_milters">$&</a>;g;
+ s;\bcleanup_service_name\b;<a href="postconf.5.html#cleanup_service_name">$&</a>;g;
+ s;\bcommand_execu[-</bB>]*\n* *[<bB>]*tion_direc[-</bB>]*\n* *[<bB>]*tory\b;<a href="postconf.5.html#command_execution_directory">$&</a>;g;
+ s;\bexecu[-</bB>]*\n* *[<bB>]*tion_direc[-</bB>]*\n* *[<bB>]*tory_expansion_filter\b;<a href="postconf.5.html#execution_directory_expansion_filter">$&</a>;g;
+ s;\banvil_status_update_time\b;<a href="postconf.5.html#anvil_status_update_time">$&</a>;g;
+ s;\bcommand_direc[-</bB>]*\n* *[<bB>]*tory\b;<a href="postconf.5.html#command_directory">$&</a>;g;
+ s;\bcommand_expan[-</bB>]*\n* *[<bB>]*sion_filter\b;<a href="postconf.5.html#command_expansion_filter">$&</a>;g;
+ s;\bcommand_time_limit\b;<a href="postconf.5.html#command_time_limit">$&</a>;g;
+ s;\bcon[-</bB>]*\n*[ <bB>]*fig_direc[-</bB>]*\n*[ <bB>]*tory\b;<a href="postconf.5.html#config_directory">$&</a>;g;
+ s;\bconfirm_delay_cleared;<a href="postconf.5.html#confirm_delay_cleared">$&</a>;g;
+ s;\bcon[-</bB>]*\n*[ <bB>]*tent_filter\b;<a href="postconf.5.html#content_filter">$&</a>;g;
+ s;\bdata_direc[-</bB>]*\n*[ <bB>]*tory\b;<a href="postconf.5.html#data_directory">$&</a>;g;
+ s;\bdae[-</bB>]*\n*[ <bB>]*mon_direc[-</bB>]*\n*[ <bB>]*tory\b;<a href="postconf.5.html#daemon_directory">$&</a>;g;
+ s;\bdaemon_timeout\b;<a href="postconf.5.html#daemon_timeout">$&</a>;g;
+ s;\bdebug_peer_level\b;<a href="postconf.5.html#debug_peer_level">$&</a>;g;
+ s;\bdebug_peer_list\b;<a href="postconf.5.html#debug_peer_list">$&</a>;g;
+ s;\bdefault_delivery_status_filter\b;<a href="postconf.5.html#default_delivery_status_filter">$&</a>;g;
+ s;\bdefault_data[-</Bb>]*\n* *[<Bb>]*base_type\b;<a href="postconf.5.html#default_database_type">$&</a>;g;
+ s;\bdefault_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_cost\b;<a href="postconf.5.html#default_delivery_slot_cost">$&</a>;g;
+ s;\bdefault_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_discount\b;<a href="postconf.5.html#default_delivery_slot_discount">$&</a>;g;
+ s;\bdefault_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_loan\b;<a href="postconf.5.html#default_delivery_slot_loan">$&</a>;g;
+ s;\bdefault_destina[-</Bb>]*\n* *[<Bb>]*tion_concur[-</Bb>]*\n* *[<Bb>]*rency_limit\b;<a href="postconf.5.html#default_destination_concurrency_limit">$&</a>;g;
+ s;\bdefault_destina[-</Bb>]*\n* *[<Bb>]*tion_recip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent_limit\b;<a href="postconf.5.html#default_destination_recipient_limit">$&</a>;g;
+ s;\bdefault_extra_recipi[-</bB>]*\n* *[<bB>]*ent_limit\b;<a href="postconf.5.html#default_extra_recipient_limit">$&</a>;g;
+ s;\bdefault_minimum_deliv[-</Bb>]*\n* *[<Bb>]*ery_slots\b;<a href="postconf.5.html#default_minimum_delivery_slots">$&</a>;g;
+ s;\bdefault_privs\b;<a href="postconf.5.html#default_privs">$&</a>;g;
+ s;\bdefault_process_limit\b;<a href="postconf.5.html#default_process_limit">$&</a>;g;
+ s;\bdefault_rbl_reply\b;<a href="postconf.5.html#default_rbl_reply">$&</a>;g;
+ s;\bdefault_recipi[-</bB>]*\n* *[<bB>]*ent_refill_limit\b;<a href="postconf.5.html#default_recipient_refill_limit">$&</a>;g;
+ s;\bdefault_recipi[-</bB>]*\n* *[<bB>]*ent_refill_delay\b;<a href="postconf.5.html#default_recipient_refill_delay">$&</a>;g;
+ s;\bdefault_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#default_recipient_limit">$&</a>;g;
+ s;\bdefault_transport\b;<a href="postconf.5.html#default_transport">$&</a>;g;
+ s;\bsender[-</bB>]*\n* *[<bB>]*_de[-</bB>]*\n* *[<bB>]*pen[-</bB>]*\n* *[<bB>]*dent_de[-</bB>]*\n* *[<bB>]*fault[-</bB>]*\n* *[<bB>]*_trans[-</bB>]*\n* *[<bB>]*port[-</bB>]*\n* *[<bB>]*_maps\b;<a href="postconf.5.html#sender_dependent_default_transport_maps">$&</a>;g;
+ s;\bempty_address_default_transport_maps_lookup_key\b;<a href="postconf.5.html#empty_address_default_transport_maps_lookup_key">$&</a>;g;
+ s;\bdefault_verp_delim[-</bB>]*\n* *[<bB>]*iters\b;<a href="postconf.5.html#default_verp_delimiters">$&</a>;g;
+ s;\bdefer_code\b;<a href="postconf.5.html#defer_code">$&</a>;g;
+ s;\bdefer_service_name\b;<a href="postconf.5.html#defer_service_name">$&</a>;g;
+ s;\bdefer_transports\b;<a href="postconf.5.html#defer_transports">$&</a>;g;
+ s;\bdelay_logging_resolution_limit\b;<a href="postconf.5.html#delay_logging_resolution_limit">$&</a>;g;
+ s;\bdelay_notice_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#delay_notice_recipient">$&</a>;g;
+ s;\bdelay_warn[-</bB>]*\n*[ <bB>]*ing_time\b;<a href="postconf.5.html#delay_warning_time">$&</a>;g;
+ s;\bdeliver_lock_attempts\b;<a href="postconf.5.html#deliver_lock_attempts">$&</a>;g;
+ s;\bdeliver_lock_delay\b;<a href="postconf.5.html#deliver_lock_delay">$&</a>;g;
+ s;\bdetect_8bit_encoding_header\b;<a href="postconf.5.html#detect_8bit_encoding_header">$&</a>;g;
+ s;\bdisable_dns_lookups\b;<a href="postconf.5.html#disable_dns_lookups">$&</a>;g;
+ s;\bdisable_mime_input_processing\b;<a href="postconf.5.html#disable_mime_input_processing">$&</a>;g;
+ s;\bdisable_mime_output_conversion\b;<a href="postconf.5.html#disable_mime_output_conversion">$&</a>;g;
+ s;\bdisable_verp_bounces\b;<a href="postconf.5.html#disable_verp_bounces">$&</a>;g;
+ s;\bdisable_vrfy_command\b;<a href="postconf.5.html#disable_vrfy_command">$&</a>;g;
+ s;\bdont_remove\b;<a href="postconf.5.html#dont_remove">$&</a>;g;
+ s;\bdouble_bounce_sender\b;<a href="postconf.5.html#double_bounce_sender">$&</a>;g;
+ s;\bdupli[-</bB>]*\n* *[<bB>]*cate_filter_limit\b;<a href="postconf.5.html#duplicate_filter_limit">$&</a>;g;
+ s;\bempty_address_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#empty_address_recipient">$&</a>;g;
+ s;\benable_original_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#enable_original_recipient">$&</a>;g;
+ s;\benable_errors_to\b;<a href="postconf.5.html#enable_errors_to">$&</a>;g;
+ s;\berror_notice_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#error_notice_recipient">$&</a>;g;
+ s;\berror_service_name\b;<a href="postconf.5.html#error_service_name">$&</a>;g;
+ s;\bexpand_owner_alias\b;<a href="postconf.5.html#expand_owner_alias">$&</a>;g;
+ s;\bexport_environment\b;<a href="postconf.5.html#export_environment">$&</a>;g;
+ s;\bfall[-</bB>]*\n* *[<bB>]*back_relay\b;<a href="postconf.5.html#fallback_relay">$&</a>;g;
+ s;\bfall[-</bB>]*\n* *[<bB>]*back_transport\b;<a href="postconf.5.html#fallback_transport">$&</a>;g;
+ s;\bfall[-</bB>]*\n* *[<bB>]*back_transport_maps\b;<a href="postconf.5.html#fallback_transport_maps">$&</a>;g;
+ s;\bfast_flush_domains\b;<a href="postconf.5.html#fast_flush_domains">$&</a>;g;
+ s;\bfast_flush_purge_time\b;<a href="postconf.5.html#fast_flush_purge_time">$&</a>;g;
+ s;\bfast_flush_refresh_time\b;<a href="postconf.5.html#fast_flush_refresh_time">$&</a>;g;
+ s;\bfault_injection_code\b;<a href="postconf.5.html#fault_injection_code">$&</a>;g;
+ s;\bflush_service_name\b;<a href="postconf.5.html#flush_service_name">$&</a>;g;
+ s;\bfork_attempts\b;<a href="postconf.5.html#fork_attempts">$&</a>;g;
+ s;\bfork_delay\b;<a href="postconf.5.html#fork_delay">$&</a>;g;
+ s;\bforward_expan[-</bB>]*\n* *[<bB>]*sion_filter\b;<a href="postconf.5.html#forward_expansion_filter">$&</a>;g;
+ s;\bfor[-</bB>]*\n* *[<bB>]*ward_path\b;<a href="postconf.5.html#forward_path">$&</a>;g;
+ s;\bhash_queue_depth\b;<a href="postconf.5.html#hash_queue_depth">$&</a>;g;
+ s;\bhash_queue_names\b;<a href="postconf.5.html#hash_queue_names">$&</a>;g;
+ s;\bheader_address_token_limit\b;<a href="postconf.5.html#header_address_token_limit">$&</a>;g;
+ s;\bheader_checks\b;<a href="postconf.5.html#header_checks">$&</a>;g;
+ s;\bheader_size_limit\b;<a href="postconf.5.html#header_size_limit">$&</a>;g;
+ s;\bhelpful_warnings\b;<a href="postconf.5.html#helpful_warnings">$&</a>;g;
+ s;\bhome_mailbox\b;<a href="postconf.5.html#home_mailbox">$&</a>;g;
+ s;\bhopcount_limit\b;<a href="postconf.5.html#hopcount_limit">$&</a>;g;
+ s;\bhtml_direc[-</bB>]*\n*[ <bB>]*tory\b;<a href="postconf.5.html#html_directory">$&</a>;g;
+ s;\bignore_mx_lookup_error\b;<a href="postconf.5.html#ignore_mx_lookup_error">$&</a>;g;
+ s;\binternal_mail_filter_classes\b;<a href="postconf.5.html#internal_mail_filter_classes">$&</a>;g;
+ s;\bimport_environment\b;<a href="postconf.5.html#import_environment">$&</a>;g;
+ s;\bin_flow_delay\b;<a href="postconf.5.html#in_flow_delay">$&</a>;g;
+ s;\binet_inter[-</bB>]*\n*[ <bB>]*faces\b;<a href="postconf.5.html#inet_interfaces">$&</a>;g;
+ s;\binet_protocols\b;<a href="postconf.5.html#inet_protocols">$&</a>;g;
+ s;\binitial_desti[-</bB>]*\n*[ <bB>]*nation_concur[-</bB>]*\n*[ <bB>]*rency\b;<a href="postconf.5.html#initial_destination_concurrency">$&</a>;g;
+ s;\binvalid_hostname_reject_code\b;<a href="postconf.5.html#invalid_hostname_reject_code">$&</a>;g;
+ s;\bipc_idle\b;<a href="postconf.5.html#ipc_idle">$&</a>;g;
+ s;\bipc_timeout\b;<a href="postconf.5.html#ipc_timeout">$&</a>;g;
+ s;\bipc_ttl\b;<a href="postconf.5.html#ipc_ttl">$&</a>;g;
+ s;\bline_length_limit\b;<a href="postconf.5.html#line_length_limit">$&</a>;g;
+ s;\blmdb_map_size\b;<a href="postconf.5.html#lmdb_map_size">$&</a>;g;
+ s;\blmtp_address_preference\b;<a href="postconf.5.html#lmtp_address_preference">$&</a>;g;
+ s;\blmtp_body_checks\b;<a href="postconf.5.html#lmtp_body_checks">$&</a>;g;
+ s;\blmtp_cname_overrides_servername\b;<a href="postconf.5.html#lmtp_cname_overrides_servername">$&</a>;g;
+ s;\blmtp_delivery_status_filter\b;<a href="postconf.5.html#lmtp_delivery_status_filter">$&</a>;g;
+ s;\blmtp_dns_resolver_options\b;<a href="postconf.5.html#lmtp_dns_resolver_options">$&</a>;g;
+ s;\blmtp_dns_support_level\b;<a href="postconf.5.html#lmtp_dns_support_level">$&</a>;g;
+ s;\blmtp_header_checks\b;<a href="postconf.5.html#lmtp_header_checks">$&</a>;g;
+ s;\blmtp_mime_header_checks\b;<a href="postconf.5.html#lmtp_mime_header_checks">$&</a>;g;
+ s;\blmtp_nested_header_checks\b;<a href="postconf.5.html#lmtp_nested_header_checks">$&</a>;g;
+ s;\blmtp_per_record_deadline\b;<a href="postconf.5.html#lmtp_per_record_deadline">$&</a>;g;
+ s;\blmtp_reply_filter\b;<a href="postconf.5.html#lmtp_reply_filter">$&</a>;g;
+ s;\blmtp_sasl_password_maps\b;<a href="postconf.5.html#lmtp_sasl_password_maps">$&</a>;g;
+ s;\blmtp_send_dummy_mail_auth\b;<a href="postconf.5.html#lmtp_send_dummy_mail_auth">$&</a>;g;
+ s;\blmtp_balance_inet_protocols\b;<a href="postconf.5.html#lmtp_balance_inet_protocols">$&</a>;g;
+ s;\blmtp_sender_dependent_authentication\b;<a href="postconf.5.html#lmtp_sender_dependent_authentication">$&</a>;g;
+ s;\blmtp_bind_address\b;<a href="postconf.5.html#lmtp_bind_address">$&</a>;g;
+ s;\blmtp_bind_address6\b;<a href="postconf.5.html#lmtp_bind_address6">$&</a>;g;
+ s;\blmtp_assume_final\b;<a href="postconf.5.html#lmtp_assume_final">$&</a>;g;
+ s;\blmtp_cache_connection\b;<a href="postconf.5.html#lmtp_cache_connection">$&</a>;g;
+ s;\blmtp_discard_lhlo_keyword_address_maps\b;<a href="postconf.5.html#lmtp_discard_lhlo_keyword_address_maps">$&</a>;g;
+ s;\blmtp_discard_lhlo_keywords\b;<a href="postconf.5.html#lmtp_discard_lhlo_keywords">$&</a>;g;
+ s;\blmtp_sasl_tls_security_options\b;<a href="postconf.5.html#lmtp_sasl_tls_security_options">$&</a>;g;
+ s;\blmtp_sasl_tls_verified_security_options\b;<a href="postconf.5.html#lmtp_sasl_tls_verified_security_options">$&</a>;g;
+ s;\blmtp_sasl_mechanism_filter\b;<a href="postconf.5.html#lmtp_sasl_mechanism_filter">$&</a>;g;
+ s;\blmtp_host_lookup\b;<a href="postconf.5.html#lmtp_host_lookup">$&</a>;g;
+ s;\blmtp_connection_cache_destinations\b;<a href="postconf.5.html#lmtp_connection_cache_destinations">$&</a>;g;
+ s;\blmtp_connection_cache_time_limit\b;<a href="postconf.5.html#lmtp_connection_cache_time_limit">$&</a>;g;
+ s;\blmtp_tls_mandatory_protocols\b;<a href="postconf.5.html#lmtp_tls_mandatory_protocols">$&</a>;g;
+ s;\blmtp_tls_protocols\b;<a href="postconf.5.html#lmtp_tls_protocols">$&</a>;g;
+ s;\blmtp_tls_ciphers\b;<a href="postconf.5.html#lmtp_tls_ciphers">$&</a>;g;
+ s;\blmtp_tls_policy_maps\b;<a href="postconf.5.html#lmtp_tls_policy_maps">$&</a>;g;
+ s;\blmtp_tls_secure_cert_match\b;<a href="postconf.5.html#lmtp_tls_secure_cert_match">$&</a>;g;
+ s;\blmtp_tls_security_level\b;<a href="postconf.5.html#lmtp_tls_security_level">$&</a>;g;
+ s;\blmtp_tls_servername\b;<a href="postconf.5.html#lmtp_tls_servername">$&</a>;g;
+ s;\blmtp_tls_fingerprint_cert_match\b;<a href="postconf.5.html#lmtp_tls_fingerprint_cert_match">$&</a>;g;
+ s;\blmtp_tls_verify_cert_match\b;<a href="postconf.5.html#lmtp_tls_verify_cert_match">$&</a>;g;
+ s;\blmtp_tls_trust_anchor_file\b;<a href="postconf.5.html#lmtp_tls_trust_anchor_file">$&</a>;g;
+ s;\blmtp_tls_per_site\b;<a href="postconf.5.html#lmtp_tls_per_site">$&</a>;g;
+ s;\blmtp_tls_chain_files\b;<a href="postconf.5.html#lmtp_tls_chain_files">$&</a>;g;
+ s;\blmtp_tls_cert_file\b;<a href="postconf.5.html#lmtp_tls_cert_file">$&</a>;g;
+ s;\blmtp_tls_key_file\b;<a href="postconf.5.html#lmtp_tls_key_file">$&</a>;g;
+ s;\blmtp_tls_dcert_file\b;<a href="postconf.5.html#lmtp_tls_dcert_file">$&</a>;g;
+ s;\blmtp_tls_dkey_file\b;<a href="postconf.5.html#lmtp_tls_dkey_file">$&</a>;g;
+ s;\blmtp_tls_eccert_file\b;<a href="postconf.5.html#lmtp_tls_eccert_file">$&</a>;g;
+ s;\blmtp_tls_eckey_file\b;<a href="postconf.5.html#lmtp_tls_eckey_file">$&</a>;g;
+ s;\blmtp_tls_CAfile\b;<a href="postconf.5.html#lmtp_tls_CAfile">$&</a>;g;
+ s;\blmtp_tls_CApath\b;<a href="postconf.5.html#lmtp_tls_CApath">$&</a>;g;
+ s;\blmtp_tls_fingerprint_digest\b;<a href="postconf.5.html#lmtp_tls_fingerprint_digest">$&</a>;g;
+ s;\blmtp_tls_mandatory_ciphers\b;<a href="postconf.5.html#lmtp_tls_mandatory_ciphers">$&</a>;g;
+ s;\blmtp_tls_exclude_ciphers\b;<a href="postconf.5.html#lmtp_tls_exclude_ciphers">$&</a>;g;
+ s;\blmtp_tls_mandatory_exclude_ciphers\b;<a href="postconf.5.html#lmtp_tls_mandatory_exclude_ciphers">$&</a>;g;
+ s;\blmtp_tls_loglevel\b;<a href="postconf.5.html#lmtp_tls_loglevel">$&</a>;g;
+ s;\blmtp_tls_session_cache_database\b;<a href="postconf.5.html#lmtp_tls_session_cache_database">$&</a>;g;
+ s;\blmtp_tls_session_cache_timeout\b;<a href="postconf.5.html#lmtp_tls_session_cache_timeout">$&</a>;g;
+ s;\blmtp_generic_maps\b;<a href="postconf.5.html#lmtp_generic_maps">$&</a>;g;
+ s;\blmtp_pix_workaround_threshold_time\b;<a href="postconf.5.html#lmtp_pix_workaround_threshold_time">$&</a>;g;
+ s;\blmtp_pix_workaround_delay_time\b;<a href="postconf.5.html#lmtp_pix_workaround_delay_time">$&</a>;g;
+ s;\blmtp_pix_workarounds\b;<a href="postconf.5.html#lmtp_pix_workarounds">$&</a>;g;
+ s;\blmtp_pix_workaround_maps\b;<a href="postconf.5.html#lmtp_pix_workaround_maps">$&</a>;g;
+ s;\blmtp_connection_reuse_count_limit\b;<a href="postconf.5.html#lmtp_connection_reuse_count_limit">$&</a>;g;
+ s;\blmtp_connection_reuse_time_limit\b;<a href="postconf.5.html#lmtp_connection_reuse_time_limit">$&</a>;g;
+ s;\blmtp_starttls_timeout\b;<a href="postconf.5.html#lmtp_starttls_timeout">$&</a>;g;
+ s;\blmtp_line_length_limit\b;<a href="postconf.5.html#lmtp_line_length_limit">$&</a>;g;
+ s;\blmtp_mx_address_limit\b;<a href="postconf.5.html#lmtp_mx_address_limit">$&</a>;g;
+ s;\blmtp_mx_session_limit\b;<a href="postconf.5.html#lmtp_mx_session_limit">$&</a>;g;
+ s;\blmtp_tls_scert_verifydepth\b;<a href="postconf.5.html#lmtp_tls_scert_verifydepth">$&</a>;g;
+ s;\blmtp_skip_5xx_greeting\b;<a href="postconf.5.html#lmtp_skip_5xx_greeting">$&</a>;g;
+ s;\blmtp_randomize_addresses\b;<a href="postconf.5.html#lmtp_randomize_addresses">$&</a>;g;
+ s;\blmtp_quote_rfc821_envelope\b;<a href="postconf.5.html#lmtp_quote_rfc821_envelope">$&</a>;g;
+ s;\blmtp_defer_if_no_mx_address_found\b;<a href="postconf.5.html#lmtp_defer_if_no_mx_address_found">$&</a>;g;
+ s;\blmtp_connection_cache_on_demand\b;<a href="postconf.5.html#lmtp_connection_cache_on_demand">$&</a>;g;
+ s;\blmtp_use_tls\b;<a href="postconf.5.html#lmtp_use_tls">$&</a>;g;
+ s;\blmtp_enforce_tls\b;<a href="postconf.5.html#lmtp_enforce_tls">$&</a>;g;
+ s;\blmtp_tls_enforce_peername\b;<a href="postconf.5.html#lmtp_tls_enforce_peername">$&</a>;g;
+ s;\blmtp_tls_note_starttls_offer\b;<a href="postconf.5.html#lmtp_tls_note_starttls_offer">$&</a>;g;
+ s;\blmtp_tls_block_early_mail_reply\b;<a href="postconf.5.html#lmtp_tls_block_early_mail_reply">$&</a>;g;
+ s;\blmtp_tls_force_insecure_host_tlsa_lookup\b;<a href="postconf.5.html#lmtp_tls_force_insecure_host_tlsa_lookup">$&</a>;g;
+ s;\blmtp_sender_dependent_authentication\b;<a href="postconf.5.html#lmtp_sender_dependent_authentication">$&</a>;g;
+ s;\blmtp_sasl_path\b;<a href="postconf.5.html#lmtp_sasl_path">$&</a>;g;
+ s;\blmtp_lhlo_name\b;<a href="postconf.5.html#lmtp_lhlo_name">$&</a>;g;
+ s;\blmtp_connect_timeout\b;<a href="postconf.5.html#lmtp_connect_timeout">$&</a>;g;
+ s;\blmtp_data_done_timeout\b;<a href="postconf.5.html#lmtp_data_done_timeout">$&</a>;g;
+ s;\blmtp_data_init_timeout\b;<a href="postconf.5.html#lmtp_data_init_timeout">$&</a>;g;
+ s;\blmtp_data_xfer_timeout\b;<a href="postconf.5.html#lmtp_data_xfer_timeout">$&</a>;g;
+ s;\blmtp_lhlo_timeout\b;<a href="postconf.5.html#lmtp_lhlo_timeout">$&</a>;g;
+ s;\blmtp_mail_timeout\b;<a href="postconf.5.html#lmtp_mail_timeout">$&</a>;g;
+ s;\blmtp_quit_timeout\b;<a href="postconf.5.html#lmtp_quit_timeout">$&</a>;g;
+ s;\blmtp_rcpt_timeout\b;<a href="postconf.5.html#lmtp_rcpt_timeout">$&</a>;g;
+ s;\blmtp_rset_timeout\b;<a href="postconf.5.html#lmtp_rset_timeout">$&</a>;g;
+ s;\blmtp_sasl_auth_cache_name\b;<a href="postconf.5.html#lmtp_sasl_auth_cache_name">$&</a>;g;
+ s;\blmtp_sasl_auth_cache_time\b;<a href="postconf.5.html#lmtp_sasl_auth_cache_time">$&</a>;g;
+ s;\blmtp_sasl_auth_enable\b;<a href="postconf.5.html#lmtp_sasl_auth_enable">$&</a>;g;
+ s;\blmtp_sasl_auth_soft_bounce\b;<a href="postconf.5.html#lmtp_sasl_auth_soft_bounce">$&</a>;g;
+ s;\blmtp_sasl_password_maps\b;<a href="postconf.5.html#lmtp_sasl_password_maps">$&</a>;g;
+ s;\blmtp_sasl_security_options\b;<a href="postconf.5.html#lmtp_sasl_security_options">$&</a>;g;
+ s;\blmtp_sasl_type\b;<a href="postconf.5.html#lmtp_sasl_type">$&</a>;g;
+ s;\blmtp_send_xforward_command\b;<a href="postconf.5.html#lmtp_send_xforward_command">$&</a>;g;
+ s;\blmtp_skip_quit_response\b;<a href="postconf.5.html#lmtp_skip_quit_response">$&</a>;g;
+ s;\blmtp_tcp_port\b;<a href="postconf.5.html#lmtp_tcp_port">$&</a>;g;
+ s;\blmtp_xforward_timeout\b;<a href="postconf.5.html#lmtp_xforward_timeout">$&</a>;g;
+ s;\blocal_delivery_status_filter\b;<a href="postconf.5.html#local_delivery_status_filter">$&</a>;g;
+ s;\blocal_command_shell\b;<a href="postconf.5.html#local_command_shell">$&</a>;g;
+ s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_concurrency_limit\b;<a href="postconf.5.html#local_destination_concurrency_limit">$&</a>;g;
+ s;\blocal_destina[-</bB>]*\n* *[<bB>]*tion_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#local_destination_recipient_limit">$&</a>;g;
+ s;\blocal_recip[-</bB>]*\n* *[<bB>]*ient_maps\b;<a href="postconf.5.html#local_recipient_maps">$&</a>;g;
+ s;\blocal_transport\b;<a href="postconf.5.html#local_transport">$&</a>;g;
+ s;\bluser_relay\b;<a href="postconf.5.html#luser_relay">$&</a>;g;
+ s;\blocal_header_re[-</bB>]*\n* *[<bB>]*write_clients\b;<a href="postconf.5.html#local_header_rewrite_clients">$&</a>;g;
+ s;\bmail_name\b;<a href="postconf.5.html#mail_name">$&</a>;g;
+ s;\bmail_owner\b;<a href="postconf.5.html#mail_owner">$&</a>;g;
+ s;\bmail_release_date\b;<a href="postconf.5.html#mail_release_date">$&</a>;g;
+ s;\bmail_spool_direc[-</bB>]*\n* *[<bB>]*tory\b;<a href="postconf.5.html#mail_spool_directory">$&</a>;g;
+ s;\bmail_ver[-</bB>]*\n* *[<bB>]*sion\b;<a href="postconf.5.html#mail_version">$&</a>;g;
+ s;\bmail[-</bB>]*\n* *[<bB>]*box_com[-</bB>]*\n* *[<bB>]*mand\b;<a href="postconf.5.html#mailbox_command">$&</a>;g;
+ s;\bmail[-</bB>]*\n* *[<bB>]*box_com[-</bB>]*\n* *[<bB>]*mand_maps\b;<a href="postconf.5.html#mailbox_command_maps">$&</a>;g;
+ s;\bmail[-</bB>]*\n* *[<bB>]*box_deliv[-</Bb>]*\n* *[<Bb>]*ery_lock\b;<a href="postconf.5.html#mailbox_delivery_lock">$&</a>;g;
+ s;\bmail[-</bB>]*\n* *[<bB>]*box_size_limit\b;<a href="postconf.5.html#mailbox_size_limit">$&</a>;g;
+ s;\bmail[-</bB>]*\n* *[<bB>]*box_transport\b;<a href="postconf.5.html#mailbox_transport">$&</a>;g;
+ s;\bmail[-</bB>]*\n* *[<bB>]*box_transport_maps\b;<a href="postconf.5.html#mailbox_transport_maps">$&</a>;g;
+ s;\bmailq_path\b;<a href="postconf.5.html#mailq_path">$&</a>;g;
+ s;\bmanpage_directory\b;<a href="postconf.5.html#manpage_directory">$&</a>;g;
+ s;\bmaps_rbl_domains\b;<a href="postconf.5.html#maps_rbl_domains">$&</a>;g;
+ s;\bmaps_rbl_reject_code\b;<a href="postconf.5.html#maps_rbl_reject_code">$&</a>;g;
+ s;\bmasquer[-</bB>]*\n* *[<bB>]*ade_classes\b;<a href="postconf.5.html#masquerade_classes">$&</a>;g;
+ s;\bmasquer[-</bB>]*\n* *[<bB>]*ade_domains\b;<a href="postconf.5.html#masquerade_domains">$&</a>;g;
+ s;\bmasquer[-</bB>]*\n* *[<bB>]*ade_exceptions\b;<a href="postconf.5.html#masquerade_exceptions">$&</a>;g;
+ s;\bmaster_service_disable\b;<a href="postconf.5.html#master_service_disable">$&</a>;g;
+ s;\bmax_idle\b;<a href="postconf.5.html#max_idle">$&</a>;g;
+ s;\bmax_use\b;<a href="postconf.5.html#max_use">$&</a>;g;
+ s;\bmaxi[-</bB>]*\n*[ <bB>]*mal_backoff_time\b;<a href="postconf.5.html#maximal_backoff_time">$&</a>;g;
+ s;\bmaxi[-</bB>]*\n*[ <bB>]*mal_queue_life[-</bB>]*\n*[ <bB>]*time\b;<a href="postconf.5.html#maximal_queue_lifetime">$&</a>;g;
+ s;\bmessage_drop_headers\b;<a href="postconf.5.html#message_drop_headers">$&</a>;g;
+ s;\bmessage_reject_characters\b;<a href="postconf.5.html#message_reject_characters">$&</a>;g;
+ s;\bmessage_size_limit\b;<a href="postconf.5.html#message_size_limit">$&</a>;g;
+ s;\bmessage_strip_characters\b;<a href="postconf.5.html#message_strip_characters">$&</a>;g;
+ s;\bmime_boundary_length_limit\b;<a href="postconf.5.html#mime_boundary_length_limit">$&</a>;g;
+ s;\bmime_header_checks\b;<a href="postconf.5.html#mime_header_checks">$&</a>;g;
+ s;\bmime_nesting_limit\b;<a href="postconf.5.html#mime_nesting_limit">$&</a>;g;
+ s;\bminimal_backoff_time\b;<a href="postconf.5.html#minimal_backoff_time">$&</a>;g;
+ s;\bmulti_recip[-</bB>]*\n* *[<bB>]*ient_bounce_reject_code\b;<a href="postconf.5.html#multi_recipient_bounce_reject_code">$&</a>;g;
+ s;\bmydes[-</bB>]*\n*[ <bB>]*ti[-</bB>]*\n*[ <bB>]*na[-</bB>]*\n*[ <bB>]*tion\b;<a href="postconf.5.html#mydestination">$&</a>;g;
+ s;\bmydo[-</bB>]*\n* *[<bB>]*main\b;<a href="postconf.5.html#mydomain">$&</a>;g;
+ s;\bmyhostname\b;<a href="postconf.5.html#myhostname">$&</a>;g;
+ s;\bmynet[-</bB>]*\n* *[<bB>]*works\b;<a href="postconf.5.html#mynetworks">$&</a>;g;
+ s;\bmynetworks_style\b;<a href="postconf.5.html#mynetworks_style">$&</a>;g;
+ s;\bmyo[-</bB>]*\n*[ <bB>]*rigin\b;<a href="postconf.5.html#myorigin">$&</a>;g;
+ s;\bnested_header_checks\b;<a href="postconf.5.html#nested_header_checks">$&</a>;g;
+ s;\bnewaliases_path\b;<a href="postconf.5.html#newaliases_path">$&</a>;g;
+ s;\bnon_fqdn_reject_code\b;<a href="postconf.5.html#non_fqdn_reject_code">$&</a>;g;
+ s;\bnotify_classes\b;<a href="postconf.5.html#notify_classes">$&</a>;g;
+ s;\bopenssl_path\b;<a href="postconf.5.html#openssl_path">$&</a>;g;
+ s;\bowner_request_special\b;<a href="postconf.5.html#owner_request_special">$&</a>;g;
+ s;\bpar[-</bB>]*\n* *[<bB>]*ent_domain_matches_subdomains\b;<a href="postconf.5.html#parent_domain_matches_subdomains">$&</a>;g;
+ s;\bpermit_mx_backup_networks\b;<a href="postconf.5.html#permit_mx_backup_networks">$&</a>;g;
+ s;\bpickup_service_name\b;<a href="postconf.5.html#pickup_service_name">$&</a>;g;
+ s;\bpipe_delivery_status_filter\b;<a href="postconf.5.html#pipe_delivery_status_filter">$&</a>;g;
+ s;\bplaintext_reject_code\b;<a href="postconf.5.html#plaintext_reject_code">$&</a>;g;
+ s;\bpost[-</bB>]*\n* *[<bB>]*multi_start_commands\b;<a href="postconf.5.html#postmulti_start_commands">$&</a>;g;
+ s;\bpost[-</bB>]*\n* *[<bB>]*multi_stop_commands\b;<a href="postconf.5.html#postmulti_stop_commands">$&</a>;g;
+ s;\bpost[-</bB>]*\n* *[<bB>]*multi_con[-</bB>]*\n* *[<bB>]*trol_com[-</bB>]*\n* *[<bB>]*mands\b;<a href="postconf.5.html#postmulti_control_commands">$&</a>;g;
+ s;\bprepend_delivered_header\b;<a href="postconf.5.html#prepend_delivered_header">$&</a>;g;
+ s;\bprocess_id\b;<a href="postconf.5.html#process_id">$&</a>;g;
+ s;\bprocess_id_directory\b;<a href="postconf.5.html#process_id_directory">$&</a>;g;
+ s;\bprocess_name\b;<a href="postconf.5.html#process_name">$&</a>;g;
+ s;\bpropagate_unmatched_extensions\b;<a href="postconf.5.html#propagate_unmatched_extensions">$&</a>;g;
+ s;\bproxy_inter[-</bB>]*\n* *[<bB>]*faces\b;<a href="postconf.5.html#proxy_interfaces">$&</a>;g;
+ s;\bproxymap_service_name\b;<a href="postconf.5.html#proxymap_service_name">$&</a>;g;
+ s;\bproxywrite_service_name\b;<a href="postconf.5.html#proxywrite_service_name">$&</a>;g;
+ s;\bproxy_read_maps\b;<a href="postconf.5.html#proxy_read_maps">$&</a>;g;
+ s;\bproxy_write_maps\b;<a href="postconf.5.html#proxy_write_maps">$&</a>;g;
+ s;\bqmgr_clog_warn_time\b;<a href="postconf.5.html#qmgr_clog_warn_time">$&</a>;g;
+ s;\bqmgr_fudge_factor\b;<a href="postconf.5.html#qmgr_fudge_factor">$&</a>;g;
+ s;\bdefault_filter_nexthop\b;<a href="postconf.5.html#default_filter_nexthop">$&</a>;g;
+ s;\bqmgr_message_active_limit\b;<a href="postconf.5.html#qmgr_message_active_limit">$&</a>;g;
+ s;\bqmgr_message_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#qmgr_message_recipient_limit">$&</a>;g;
+ s;\bqmgr_message_recip[-</bB>]*\n* *[<bB>]*ient_minimum\b;<a href="postconf.5.html#qmgr_message_recipient_minimum">$&</a>;g;
+ s;\bqmgr_daemon_timeout\b;<a href="postconf.5.html#qmgr_daemon_timeout">$&</a>;g;
+ s;\bqmgr_ipc_timeout\b;<a href="postconf.5.html#qmgr_ipc_timeout">$&</a>;g;
+ s;\bqmqpd_authorized_clients\b;<a href="postconf.5.html#qmqpd_authorized_clients">$&</a>;g;
+ s;\bservice_name\b;<a href="postconf.5.html#service_name">$&</a>;g;
+
+ s;\bdefault_desti[-</Bb>]*\n* *[<Bb>]*na[-</Bb>]*\n* *[<Bb>]*tion_concur[-</Bb>]*\n* *[<Bb>]*rency_negative_feedback\b;<a href="postconf.5.html#default_destination_concurrency_negative_feedback">$&</a>;g;
+ s;\bdefault_desti[-</Bb>]*\n* *[<Bb>]*na[-</Bb>]*\n* *[<Bb>]*tion_concur[-</Bb>]*\n* *[<Bb>]*rency_positive_feedback\b;<a href="postconf.5.html#default_destination_concurrency_positive_feedback">$&</a>;g;
+ s;\bdefault_desti[-</Bb>]*\n* *[<Bb>]*na[-</Bb>]*\n* *[<Bb>]*tion_con[-</Bb>]*\n* *[<Bb>]*currency_failed_cohort_limit\b;<a href="postconf.5.html#default_destination_concurrency_failed_cohort_limit">$&</a>;g;
+ s;\bdestination_concurrency_feedback_debug\b;<a href="postconf.5.html#destination_concurrency_feedback_debug">$&</a>;g;
+ s;\bdefault_destina[-</Bb>]*\n* *[<Bb>]*tion_rate_delay\b;<a href="postconf.5.html#default_destination_rate_delay">$&</a>;g;
+ s;\bdefault_trans[-<\/bB>]*\n*[ <bB>]*port_rate_delay\b;<a href="postconf.5.html#default_transport_rate_delay">$&</a>;g;
+ s;\bmeta_directory\b;<a href="postconf.5.html#meta_directory">$&</a>;g;
+
+ s;\bqmqpd_client_port_logging\b;<a href="postconf.5.html#qmqpd_client_port_logging">$&</a>;g;
+ s;\bqmqpd_error_delay\b;<a href="postconf.5.html#qmqpd_error_delay">$&</a>;g;
+ s;\bqmqpd_timeout\b;<a href="postconf.5.html#qmqpd_timeout">$&</a>;g;
+ s;\bqueue_directory\b;<a href="postconf.5.html#queue_directory">$&</a>;g;
+ s;\bqueue_file_attribute_count_limit\b;<a href="postconf.5.html#queue_file_attribute_count_limit">$&</a>;g;
+ s;\bqueue_minfree\b;<a href="postconf.5.html#queue_minfree">$&</a>;g;
+ s;\bqueue_run_delay\b;<a href="postconf.5.html#queue_run_delay">$&</a>;g;
+ s;\bqueue_service_name\b;<a href="postconf.5.html#queue_service_name">$&</a>;g;
+ s;\brbl_reply_maps\b;<a href="postconf.5.html#rbl_reply_maps">$&</a>;g;
+ s;\breadme_directory\b;<a href="postconf.5.html#readme_directory">$&</a>;g;
+ s;\breceive_override_options\b;<a href="postconf.5.html#receive_override_options">$&</a>;g;
+ s;\bremote_header_re[-</bB>]*\n* *[<bB>]*write_domain\b;<a href="postconf.5.html#remote_header_rewrite_domain">$&</a>;g;
+ s;\bno_unknown_recip[-</bB>]*\n* *[<bB>]*ient_checks\b;<a href="postconf.5.html#no_unknown_recipient_checks">$&</a>;g;
+ s;\bno_address_mappings\b;<a href="postconf.5.html#no_address_mappings">$&</a>;g;
+ s;\bno_header_body_checks\b;<a href="postconf.5.html#no_header_body_checks">$&</a>;g;
+ s;\bno_milters\b;<a href="postconf.5.html#no_milters">$&</a>;g;
+ s;\brecip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent_bcc_maps\b;<a href="postconf.5.html#recipient_bcc_maps">$&</a>;g;
+ s;\brecip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent_canoni[-</bB>]*\n* *[<bB>]*cal_classes\b;<a href="postconf.5.html#recipient_canonical_classes">$&</a>;g;
+ s;\brecip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent_canoni[-</bB>]*\n* *[<bB>]*cal_maps\b;<a href="postconf.5.html#recipient_canonical_maps">$&</a>;g;
+ s;\brecip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent_delim[-</bB>]*\n* *[<bB>]*iter\b;<a href="postconf.5.html#recipient_delimiter">$&<\/a>;g;
+ s;\breject_code\b;<a href="postconf.5.html#reject_code">$&</a>;g;
+ s;\breject_temp[-</bB>]*\n* *[<bB>]*fail_action\b;<a href="postconf.5.html#reject_tempfail_action">$&</a>;g;
+ s;\brelay_clientcerts\b;<a href="postconf.5.html#relay_clientcerts">$&</a>;g;
+ s;\brelay_domains\b;<a href="postconf.5.html#relay_domains">$&</a>;g;
+ s;\brelay_domains_reject_code\b;<a href="postconf.5.html#relay_domains_reject_code">$&</a>;g;
+ s;\brelay_recipi[-</bB>]*\n*[ <bB>]*ent_maps\b;<a href="postconf.5.html#relay_recipient_maps">$&</a>;g;
+ s;\brelay_transport\b;<a href="postconf.5.html#relay_transport">$&</a>;g;
+ s;\brelay[-</bB>]*\n*[ <bB>]*host\b;<a href="postconf.5.html#relayhost">$&</a>;g;
+ s;\brelocated_maps\b;<a href="postconf.5.html#relocated_maps">$&</a>;g;
+ s;\brequire_home_directory\b;<a href="postconf.5.html#require_home_directory">$&</a>;g;
+ s;\bresolve_dequoted_address\b;<a href="postconf.5.html#resolve_dequoted_address">$&</a>;g;
+ s;\brewrite_service_name\b;<a href="postconf.5.html#rewrite_service_name">$&</a>;g;
+ s;\bsample_directory\b;<a href="postconf.5.html#sample_directory">$&</a>;g;
+ s;\bsend_cyrus_sasl_authzid\b;<a href="postconf.5.html#send_cyrus_sasl_authzid">$&</a>;g;
+ s;\bsender_based_routing\b;<a href="postconf.5.html#sender_based_routing">$&</a>;g;
+ s;\bsender_bcc_maps\b;<a href="postconf.5.html#sender_bcc_maps">$&</a>;g;
+ s;\bsender_canonical_classes\b;<a href="postconf.5.html#sender_canonical_classes">$&</a>;g;
+ s;\bsender_canonical_maps\b;<a href="postconf.5.html#sender_canonical_maps">$&</a>;g;
+ s;\bsender_de[-</bB>]*\n* *[<bB>]*pen[-</bB>]*\n* *[<bB>]*dent_relay[-</bB>]*\n*[ <bB>]*host_maps\b;<a href="postconf.5.html#sender_dependent_relayhost_maps">$&</a>;g;
+ s;\bempty_address_relayhost_maps_lookup_key\b;<a href="postconf.5.html#empty_address_relayhost_maps_lookup_key">$&</a>;g;
+ s;\bsendmail_path\b;<a href="postconf.5.html#sendmail_path">$&</a>;g;
+ s;\bsendmail_fix_line_endings\b;<a href="postconf.5.html#sendmail_fix_line_endings">$&</a>;g;
+ s;\bservice_throttle_time\b;<a href="postconf.5.html#service_throttle_time">$&</a>;g;
+ s;\bsetgid_group\b;<a href="postconf.5.html#setgid_group">$&</a>;g;
+ s;\bshlib_directory\b;<a href="postconf.5.html#shlib_directory">$&</a>;g;
+
+ s;\bconnection_cache_service_name\b;<a href="postconf.5.html#connection_cache_service_name">$&</a>;g;
+ s;\bconnection_cache_status_update_time\b;<a href="postconf.5.html#connection_cache_status_update_time">$&</a>;g;
+ s;\bconnection_cache_protocol_timeout\b;<a href="postconf.5.html#connection_cache_protocol_timeout">$&</a>;g;
+ s;\bconnection_cache_ttl_limit\b;<a href="postconf.5.html#connection_cache_ttl_limit">$&</a>;g;
+
+ s;\bshow_user_unknown_table_name\b;<a href="postconf.5.html#show_user_unknown_table_name">$&</a>;g;
+ s;\bshowq_service_name\b;<a href="postconf.5.html#showq_service_name">$&</a>;g;
+ s;\bsmtp_always_send_ehlo\b;<a href="postconf.5.html#smtp_always_send_ehlo">$&</a>;g;
+ s;\bsmtp_bind_address\b;<a href="postconf.5.html#smtp_bind_address">$&</a>;g;
+ s;\bsmtp_bind_address6\b;<a href="postconf.5.html#smtp_bind_address6">$&</a>;g;
+ s;\bsmtp_cname_overrides_servername\b;<a href="postconf.5.html#smtp_cname_overrides_servername">$&</a>;g;
+ s;\bsmtp_connect_timeout\b;<a href="postconf.5.html#smtp_connect_timeout">$&</a>;g;
+
+ s;\bsmtp_connection_cache_on_demand\b;<a href="postconf.5.html#smtp_connection_cache_on_demand">$&</a>;g;
+ s;\bsmtp_connection_reuse_count_limit\b;<a href="postconf.5.html#smtp_connection_reuse_count_limit">$&</a>;g;
+ s;\bsmtp_connection_reuse_time_limit\b;<a href="postconf.5.html#smtp_connection_reuse_time_limit">$&</a>;g;
+ s;\bsmtp_connection_cache_time_limit\b;<a href="postconf.5.html#smtp_connection_cache_time_limit">$&</a>;g;
+ s;\bsmtp_connection_cache_destinations\b;<a href="postconf.5.html#smtp_connection_cache_destinations">$&</a>;g;
+
+ s;\bsmtp_delivery_status_filter\b;<a href="postconf.5.html#smtp_delivery_status_filter">$&</a>;g;
+ s;\bsmtp_data_done_timeout\b;<a href="postconf.5.html#smtp_data_done_timeout">$&</a>;g;
+ s;\bsmtp_data_init_timeout\b;<a href="postconf.5.html#smtp_data_init_timeout">$&</a>;g;
+ s;\bsmtp_data_xfer_timeout\b;<a href="postconf.5.html#smtp_data_xfer_timeout">$&</a>;g;
+ s;\bsmtp_defer_if_no_mx_address_found\b;<a href="postconf.5.html#smtp_defer_if_no_mx_address_found">$&</a>;g;
+ s;\bsmtp_generic_maps\b;<a href="postconf.5.html#smtp_generic_maps">$&</a>;g;
+ s;\blmtp_destination_concurrency_limit\b;<a href="postconf.5.html#lmtp_destination_concurrency_limit">$&</a>;g;
+ s;\blmtp_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#lmtp_destination_recipient_limit">$&</a>;g;
+ s;\brelay_destination_concurrency_limit\b;<a href="postconf.5.html#relay_destination_concurrency_limit">$&</a>;g;
+ s;\brelay_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#relay_destination_recipient_limit">$&</a>;g;
+ s;\bresolve_null_domain\b;<a href="postconf.5.html#resolve_null_domain">$&</a>;g;
+ s;\bresolve_numeric_domain\b;<a href="postconf.5.html#resolve_numeric_domain">$&</a>;g;
+ s;\bsmtp_destination_concurrency_limit\b;<a href="postconf.5.html#smtp_destination_concurrency_limit">$&</a>;g;
+ s;\bsmtp_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#smtp_destination_recipient_limit">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_destination_concurrency_limit\b;<a href="postconf.5.html#virtual_destination_concurrency_limit">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#virtual_destination_recipient_limit">$&</a>;g;
+ s;\bsmtp_discard_ehlo_keyword_address_maps\b;<a href="postconf.5.html#smtp_discard_ehlo_keyword_address_maps">$&</a>;g;
+ s;\bsmtp_discard_ehlo_keywords\b;<a href="postconf.5.html#smtp_discard_ehlo_keywords">$&</a>;g;
+ s;\bsmtp_dns_resolver_options\b;<a href="postconf.5.html#smtp_dns_resolver_options">$&</a>;g;
+ s;\bsmtp_dns_support_level\b;<a href="postconf.5.html#smtp_dns_support_level">$&</a>;g;
+ s;\blmtp_dns_reply_filter\b;<a href="postconf.5.html#lmtp_dns_reply_filter">$&</a>;g;
+ s;\bsmtp_dns_reply_filter\b;<a href="postconf.5.html#smtp_dns_reply_filter">$&</a>;g;
+ s;\bsmtpd_dns_reply_filter\b;<a href="postconf.5.html#smtpd_dns_reply_filter">$&</a>;g;
+ s;\bsmtp_helo_name\b;<a href="postconf.5.html#smtp_helo_name">$&</a>;g;
+ s;\bsmtp_helo_timeout\b;<a href="postconf.5.html#smtp_helo_timeout">$&</a>;g;
+ s;\bsmtp_host_lookup\b;<a href="postconf.5.html#smtp_host_lookup">$&</a>;g;
+ s;\bsmtp_line_length_limit\b;<a href="postconf.5.html#smtp_line_length_limit">$&</a>;g;
+ s;\bsmtp_mail_timeout\b;<a href="postconf.5.html#smtp_mail_timeout">$&</a>;g;
+ s;\bsmtp_mx_address_limit\b;<a href="postconf.5.html#smtp_mx_address_limit">$&</a>;g;
+ s;\bsmtp_mx_session_limit\b;<a href="postconf.5.html#smtp_mx_session_limit">$&</a>;g;
+ s;\bsmtp_never_send_ehlo\b;<a href="postconf.5.html#smtp_never_send_ehlo">$&</a>;g;
+ s;\bsmtp_sender_depen[-</bB>]*\n*[ <bB>]*dent_authentication\b;<a href="postconf.5.html#smtp_sender_dependent_authentication">$&</a>;g;
+ s;\bsmtp_pix_workaround_delay_time\b;<a href="postconf.5.html#smtp_pix_workaround_delay_time">$&</a>;g;
+ s;\bsmtp_pix_workaround_threshold_time\b;<a href="postconf.5.html#smtp_pix_workaround_threshold_time">$&</a>;g;
+ s;\bsmtp_pix_workarounds\b;<a href="postconf.5.html#smtp_pix_workarounds">$&</a>;g;
+ s;\bsmtp_pix_workaround_maps\b;<a href="postconf.5.html#smtp_pix_workaround_maps">$&</a>;g;
+ s;\bsmtp_quit_timeout\b;<a href="postconf.5.html#smtp_quit_timeout">$&</a>;g;
+ s;\bsmtp_quote_rfc821_envelope\b;<a href="postconf.5.html#smtp_quote_rfc821_envelope">$&</a>;g;
+ s;\bsmtp_randomize_addresses\b;<a href="postconf.5.html#smtp_randomize_addresses">$&</a>;g;
+ s;\bsmtp_rcpt_timeout\b;<a href="postconf.5.html#smtp_rcpt_timeout">$&</a>;g;
+ s;\bsmtp_rset_timeout\b;<a href="postconf.5.html#smtp_rset_timeout">$&</a>;g;
+ s;\bsmtp_sasl_auth_cache_name\b;<a href="postconf.5.html#smtp_sasl_auth_cache_name">$&</a>;g;
+ s;\bsmtp_sasl_auth_cache_time\b;<a href="postconf.5.html#smtp_sasl_auth_cache_time">$&</a>;g;
+ s;\bsmtp_sasl_auth_enable\b;<a href="postconf.5.html#smtp_sasl_auth_enable">$&</a>;g;
+ s;\bsmtp_sasl_auth_soft_bounce\b;<a href="postconf.5.html#smtp_sasl_auth_soft_bounce">$&</a>;g;
+ s;\bsmtp_sasl_mechanism_filter\b;<a href="postconf.5.html#smtp_sasl_mechanism_filter">$&</a>;g;
+ s;\bsmtp_sasl_pass[-</Bb>]*\n* *[<Bb>]*word_maps\b;<a href="postconf.5.html#smtp_sasl_password_maps">$&</a>;g;
+ s;\bsmtp_sasl_path\b;<a href="postconf.5.html#smtp_sasl_path">$&</a>;g;
+ s;\bsmtp_sasl_secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_security_options">$&</a>;g;
+ s;\bsmtp_send_xforward_command\b;<a href="postconf.5.html#smtp_send_xforward_command">$&</a>;g;
+ s;\bsmtp_skip_4xx_greeting\b;<a href="postconf.5.html#smtp_skip_4xx_greeting">$&</a>;g;
+ s;\bsmtp_skip_5xx_greeting\b;<a href="postconf.5.html#smtp_skip_5xx_greeting">$&</a>;g;
+ s;\bsmtp_skip_quit_response\b;<a href="postconf.5.html#smtp_skip_quit_response">$&</a>;g;
+ s;\bsmtp_tcp_port\b;<a href="postconf.5.html#smtp_tcp_port">$&</a>;g;
+ s;\bsmtp_xforward_timeout\b;<a href="postconf.5.html#smtp_xforward_timeout">$&</a>;g;
+ s;\bsmtpd_log_access_permit_actions\b;<a href="postconf.5.html#smtpd_log_access_permit_actions">$&</a>;g;
+ s;\bsmtpd_autho[-</bB>]*\n*[ <bB>]*rized_verp_clients\b;<a href="postconf.5.html#smtpd_authorized_verp_clients">$&</a>;g;
+ s;\bsmtpd_autho[-</bB>]*\n*[ <bB>]*rized_xclient_hosts\b;<a href="postconf.5.html#smtpd_authorized_xclient_hosts">$&</a>;g;
+ s;\bsmtpd_autho[-</bB>]*\n*[ <bB>]*rized_xforward_hosts\b;<a href="postconf.5.html#smtpd_authorized_xforward_hosts">$&</a>;g;
+ s;\bsmtpd_ban[-</bB>]*\n*[ <bB>]*ner\b;<a href="postconf.5.html#smtpd_banner">$&</a>;g;
+ s;\bsmtpd_client_auth_rate_limit\b;<a href="postconf.5.html#smtpd_client_auth_rate_limit">$&</a>;g;
+ s;\bsmtpd_client_connec[-</bB>]*\n*[ <bB>]*tion_count_limit\b;<a href="postconf.5.html#smtpd_client_connection_count_limit">$&</a>;g;
+ s;\bsmtpd_client_event_limit_exceptions\b;<a href="postconf.5.html#smtpd_client_event_limit_exceptions">$&</a>;g;
+ s;\bsmtpd_client_connec[-</bB>]*\n*[ <bB>]*tion_rate_limit\b;<a href="postconf.5.html#smtpd_client_connection_rate_limit">$&</a>;g;
+ s;\bsmtpd_client_message_rate_limit\b;<a href="postconf.5.html#smtpd_client_message_rate_limit">$&</a>;g;
+ s;\bsmtpd_client_port_logging\b;<a href="postconf.5.html#smtpd_client_port_logging">$&</a>;g;
+ s;\bsmtpd_client_recipient_rate_limit\b;<a href="postconf.5.html#smtpd_client_recipient_rate_limit">$&</a>;g;
+ s;\bsmtpd_client_new_tls_session_rate_limit\b;<a href="postconf.5.html#smtpd_client_new_tls_session_rate_limit">$&</a>;g;
+ s;\bsmtpd_client_restrictions\b;<a href="postconf.5.html#smtpd_client_restrictions">$&</a>;g;
+ s;\bsmtpd_command_filter\b;<a href="postconf.5.html#smtpd_command_filter">$&</a>;g;
+ s;\bsmtpd_data_restrictions\b;<a href="postconf.5.html#smtpd_data_restrictions">$&</a>;g;
+ s;\bsmtpd_delay_open_until_valid_rcpt\b;<a href="postconf.5.html#smtpd_delay_open_until_valid_rcpt">$&</a>;g;
+ s;\bsmtpd_delay_reject\b;<a href="postconf.5.html#smtpd_delay_reject">$&</a>;g;
+ s;\bsmtpd_dis[-</bB>]*\n* *[<bB>]*card_ehlo_key[-</bB>]*\n* *[<bB>]*word_address_maps\b;<a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">$&</a>;g;
+ s;\bsmtpd_dis[-</bB>]*\n* *[<bB>]*card_ehlo_key[-</bB>]*\n* *[<bB>]*words\b;<a href="postconf.5.html#smtpd_discard_ehlo_keywords">$&</a>;g;
+ s;\bsmtpd_end_of_data_restrictions\b;<a href="postconf.5.html#smtpd_end_of_data_restrictions">$&</a>;g;
+ s;\bsmtpd_error_sleep_time\b;<a href="postconf.5.html#smtpd_error_sleep_time">$&</a>;g;
+ s;\bsmtpd_etrn_restrictions\b;<a href="postconf.5.html#smtpd_etrn_restrictions">$&</a>;g;
+ s;\bsmtpd_expansion_filter\b;<a href="postconf.5.html#smtpd_expansion_filter">$&</a>;g;
+ s;\bsmtpd_for[-</bB>]*\n*[ <bB>]*bidden_commands\b;<a href="postconf.5.html#smtpd_forbidden_commands">$&</a>;g;
+ s;\bsmtpd_hard_error_limit\b;<a href="postconf.5.html#smtpd_hard_error_limit">$&</a>;g;
+ s;\bsmtpd_helo_required\b;<a href="postconf.5.html#smtpd_helo_required">$&</a>;g;
+ s;\bsmtpd_helo_restrictions\b;<a href="postconf.5.html#smtpd_helo_restrictions">$&</a>;g;
+ s;\bsmtpd_history_flush_threshold\b;<a href="postconf.5.html#smtpd_history_flush_threshold">$&</a>;g;
+ s;\bsmtpd_junk_command_limit\b;<a href="postconf.5.html#smtpd_junk_command_limit">$&</a>;g;
+ s;\bsmtpd_milters\b;<a href="postconf.5.html#smtpd_milters">$&</a>;g;
+ s;\bsmtpd_milter_maps\b;<a href="postconf.5.html#smtpd_milter_maps">$&</a>;g;
+ s;\bsmtpd_noop_commands\b;<a href="postconf.5.html#smtpd_noop_commands">$&</a>;g;
+ s;\bsmtpd_null_access_lookup_key\b;<a href="postconf.5.html#smtpd_null_access_lookup_key">$&</a>;g;
+ s;\bsmtpd_recipient_overshoot_limit\b;<a href="postconf.5.html#smtpd_recipient_overshoot_limit">$&</a>;g;
+ s;\bsmtpd_peername_lookup\b;<a href="postconf.5.html#smtpd_peername_lookup">$&</a>;g;
+ s;\bsmtpd_policy_service_max_idle\b;<a href="postconf.5.html#smtpd_policy_service_max_idle">$&</a>;g;
+ s;\bsmtpd_policy_service_max_ttl\b;<a href="postconf.5.html#smtpd_policy_service_max_ttl">$&</a>;g;
+ s;\bsmtpd_policy_service_timeout\b;<a href="postconf.5.html#smtpd_policy_service_timeout">$&</a>;g;
+ s;\bsmtpd_policy_service_request_limit\b;<a href="postconf.5.html#smtpd_policy_service_request_limit">$&</a>;g;
+ s;\bsmtpd_policy_service_default_action\b;<a href="postconf.5.html#smtpd_policy_service_default_action">$&</a>;g;
+ s;\bsmtpd_policy_service_try_limit\b;<a href="postconf.5.html#smtpd_policy_service_try_limit">$&</a>;g;
+ s;\bsmtpd_policy_service_retry_delay\b;<a href="postconf.5.html#smtpd_policy_service_retry_delay">$&</a>;g;
+ s;\bsmtpd_policy_service_policy_context\b;<a href="postconf.5.html#smtpd_policy_service_policy_context">$&</a>;g;
+ s;\bsmtpd_proxy_ehlo\b;<a href="postconf.5.html#smtpd_proxy_ehlo">$&</a>;g;
+ s;\bsmtpd_proxy_filter\b;<a href="postconf.5.html#smtpd_proxy_filter">$&</a>;g;
+ s;\bsmtpd_proxy_timeout\b;<a href="postconf.5.html#smtpd_proxy_timeout">$&</a>;g;
+ s;\bsmtpd_proxy_options\b;<a href="postconf.5.html#smtpd_proxy_options">$&</a>;g;
+ s;\bsmtpd_recip[-</bB>]*\n* *[<bB>]*ient_limit\b;<a href="postconf.5.html#smtpd_recipient_limit">$&</a>;g;
+ s;\bsmtpd_recip[-</bB>]*\n* *[<bB>]*ient_restric[-</bB>]*\n* *[<bB>]*tions\b;<a href="postconf.5.html#smtpd_recipient_restrictions">$&</a>;g;
+ s;\bsmtpd_relay_restrictions\b;<a href="postconf.5.html#smtpd_relay_restrictions">$&</a>;g;
+ s;\bsmtpd_reject_unlisted_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#smtpd_reject_unlisted_recipient">$&</a>;g;
+ s;\bsmtpd_reject_unlisted_sender\b;<a href="postconf.5.html#smtpd_reject_unlisted_sender">$&</a>;g;
+ s;\bsmtpd_restriction_classes\b;<a href="postconf.5.html#smtpd_restriction_classes">$&</a>;g;
+ s;\bsmtpd_sasl_application_name\b;<a href="postconf.5.html#smtpd_sasl_application_name">$&</a>;g;
+ s;\bsmtpd_sasl_path\b;<a href="postconf.5.html#smtpd_sasl_path">$&</a>;g;
+ s;\bcyrus_sasl_config_path\b;<a href="postconf.5.html#cyrus_sasl_config_path">$&</a>;g;
+ s;\bsmtpd_sasl_auth_enable\b;<a href="postconf.5.html#smtpd_sasl_auth_enable">$&</a>;g;
+ s;\bsmtpd_sasl_authenticated_header\b;<a href="postconf.5.html#smtpd_sasl_authenticated_header">$&</a>;g;
+ s;\bsmtpd_sasl_exceptions_networks\b;<a href="postconf.5.html#smtpd_sasl_exceptions_networks">$&</a>;g;
+ s;\bsmtpd_sasl_local_domain\b;<a href="postconf.5.html#smtpd_sasl_local_domain">$&</a>;g;
+ s;\bsmtpd_sasl_response_limit\b;<a href="postconf.5.html#smtpd_sasl_response_limit">$&</a>;g;
+ s;\bsmtpd_sasl_secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtpd_sasl_security_options">$&</a>;g;
+ s;\bsmtpd_sender_login_maps\b;<a href="postconf.5.html#smtpd_sender_login_maps">$&</a>;g;
+ s;\bsmtpd_sender_restrictions\b;<a href="postconf.5.html#smtpd_sender_restrictions">$&</a>;g;
+ s;\bsmtpd_soft_error_limit\b;<a href="postconf.5.html#smtpd_soft_error_limit">$&</a>;g;
+ s;\bsmtpd_timeout\b;<a href="postconf.5.html#smtpd_timeout">$&</a>;g;
+ s;\bsoft_bounce\b;<a href="postconf.5.html#soft_bounce">$&</a>;g;
+ s;\bstale_lock_time\b;<a href="postconf.5.html#stale_lock_time">$&</a>;g;
+ s;\bstrict_7bit_headers\b;<a href="postconf.5.html#strict_7bit_headers">$&</a>;g;
+ s;\bstrict_8bitmime\b;<a href="postconf.5.html#strict_8bitmime">$&</a>;g;
+ s;\bstrict_8bitmime_body\b;<a href="postconf.5.html#strict_8bitmime_body">$&</a>;g;
+ s;\bstrict_mime_encoding_domain\b;<a href="postconf.5.html#strict_mime_encoding_domain">$&</a>;g;
+ s;\bstrict_mailbox_ownership\b;<a href="postconf.5.html#strict_mailbox_ownership">$&</a>;g;
+ s;\bstrict_rfc821_envelopes\b;<a href="postconf.5.html#strict_rfc821_envelopes">$&</a>;g;
+ s;\bsun_mailtool_compatibility\b;<a href="postconf.5.html#sun_mailtool_compatibility">$&</a>;g;
+ s;\bswap_bangpath\b;<a href="postconf.5.html#swap_bangpath">$&</a>;g;
+ s;\bsyslog_facility\b;<a href="postconf.5.html#syslog_facility">$&</a>;g;
+ s;\bsyslog_name\b;<a href="postconf.5.html#syslog_name">$&</a>;g;
+ s;\btrace_service_name\b;<a href="postconf.5.html#trace_service_name">$&</a>;g;
+ s;\btrans[-</bB>]*\n* *[<bB>]*port[-</bB>]*\n* *[<bB>]*_maps\b;<a href="postconf.5.html#transport_maps">$&</a>;g;
+ s;\btransport_retry_time\b;<a href="postconf.5.html#transport_retry_time">$&</a>;g;
+ s;\btrigger_timeout\b;<a href="postconf.5.html#trigger_timeout">$&</a>;g;
+ s;\btcp_windowsize\b;<a href="postconf.5.html#tcp_windowsize">$&</a>;g;
+ s;\bundisclosed_recip[-</bB>]*\n* *[<bB>]*ients_header\b;<a href="postconf.5.html#undisclosed_recipients_header">$&</a>;g;
+ s;\bunknown_address_reject_code\b;<a href="postconf.5.html#unknown_address_reject_code">$&</a>;g;
+ s;\bunknown_address_tempfail_action\b;<a href="postconf.5.html#unknown_address_tempfail_action">$&</a>;g;
+ s;\bunknown_client_reject_code\b;<a href="postconf.5.html#unknown_client_reject_code">$&</a>;g;
+ s;\bunknown_hostname_reject_code\b;<a href="postconf.5.html#unknown_hostname_reject_code">$&</a>;g;
+ s;\bunknown_helo_hostname_tempfail_action\b;<a href="postconf.5.html#unknown_helo_hostname_tempfail_action">$&</a>;g;
+ s;\bunknown_local_recip[-</bB>]*\n* *[<bB>]*ient_reject_code\b;<a href="postconf.5.html#unknown_local_recipient_reject_code">$&</a>;g;
+ s;\bunknown_relay_recipi[-</bB>]*\n*[ <bB>]*ent_reject_code\b;<a href="postconf.5.html#unknown_relay_recipient_reject_code">$&</a>;g;
+ s;\bunknown_virtual_alias_reject_code\b;<a href="postconf.5.html#unknown_virtual_alias_reject_code">$&</a>;g;
+ s;\bunknown_virtual_mail[-</bB>]*\n* *[<bB>]*box_reject_code\b;<a href="postconf.5.html#unknown_virtual_mailbox_reject_code">$&</a>;g;
+ s;\bunverified_recip[-</bB>]*\n* *[<bB>]*ient_reject_code\b;<a href="postconf.5.html#unverified_recipient_reject_code">$&</a>;g;
+ s;\bunverified_recip[-</bB>]*\n* *[<bB>]*ient_defer_code\b;<a href="postconf.5.html#unverified_recipient_defer_code">$&</a>;g;
+ s;\bunverified_recip[-</bB>]*\n* *[<bB>]*ient_tempfail_action\b;<a href="postconf.5.html#unverified_recipient_tempfail_action">$&</a>;g;
+ s;\bunverified_sender_reject_code\b;<a href="postconf.5.html#unverified_sender_reject_code">$&</a>;g;
+ s;\bunverified_sender_defer_code\b;<a href="postconf.5.html#unverified_sender_defer_code">$&</a>;g;
+ s;\bunverified_sender_tempfail_action\b;<a href="postconf.5.html#unverified_sender_tempfail_action">$&</a>;g;
+ s;\bunverified_recipient_reject_reason\b;<a href="postconf.5.html#unverified_recipient_reject_reason">$&</a>;g;
+ s;\bunverified_sender_reject_reason\b;<a href="postconf.5.html#unverified_sender_reject_reason">$&</a>;g;
+ s;\bverp_delimiter_filter\b;<a href="postconf.5.html#verp_delimiter_filter">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_address_length_limit\b;<a href="postconf.5.html#virtual_alias_address_length_limit">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_domains\b;<a href="postconf.5.html#virtual_alias_domains">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_expansion_limit\b;<a href="postconf.5.html#virtual_alias_expansion_limit">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_maps\b;<a href="postconf.5.html#virtual_alias_maps">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_maps\b;<a href="postconf.5.html#virtual_maps">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_alias_recursion_limit\b;<a href="postconf.5.html#virtual_alias_recursion_limit">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_delivery_status_filter\b;<a href="postconf.5.html#virtual_delivery_status_filter">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_gid_maps\b;<a href="postconf.5.html#virtual_gid_maps">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_base\b;<a href="postconf.5.html#virtual_mailbox_base">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_domains\b;<a href="postconf.5.html#virtual_mailbox_domains">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_limit\b;<a href="postconf.5.html#virtual_mailbox_limit">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_lock\b;<a href="postconf.5.html#virtual_mailbox_lock">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_maps\b;<a href="postconf.5.html#virtual_mailbox_maps">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_minimum_uid\b;<a href="postconf.5.html#virtual_minimum_uid">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_transport\b;<a href="postconf.5.html#virtual_transport">$&</a>;g;
+ s;\bvir[-</bB>]*\n*[ <bB>]*tual_uid_maps\b;<a href="postconf.5.html#virtual_uid_maps">$&</a>;g;
+
+ s;\bsmtp_enforce_tls\b;<a href="postconf.5.html#smtp_enforce_tls">$&</a>;g;
+ s;\bsmtp_fallback_relay\b;<a href="postconf.5.html#smtp_fallback_relay">$&</a>;g;
+ s;\blmtp_fallback_relay\b;<a href="postconf.5.html#lmtp_fallback_relay">$&</a>;g;
+ s;\bsmtp_[-</Bb>]*\n* *[<Bb>]*sasl_[-</Bb>]*\n* *[<Bb>]*tls_[-</Bb>]*\n* *[<Bb>]*secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_tls_security_options">$&</a>;g;
+ s;\bsmtp_sasl_tls_verified_secu[-</Bb>]*\n* *[<Bb>]*rity_options\b;<a href="postconf.5.html#smtp_sasl_tls_verified_security_options">$&</a>;g;
+ s;\bsmtp_sasl_type\b;<a href="postconf.5.html#smtp_sasl_type">$&</a>;g;
+ s;\bsmtp_starttls_timeout\b;<a href="postconf.5.html#smtp_starttls_timeout">$&</a>;g;
+ s;\bsmtp_tls_CAfile\b;<a href="postconf.5.html#smtp_tls_CAfile">$&</a>;g;
+ s;\bsmtp_tls_CApath\b;<a href="postconf.5.html#smtp_tls_CApath">$&</a>;g;
+ s;\bsmtp_tls_chain_files\b;<a href="postconf.5.html#smtp_tls_chain_files">$&</a>;g;
+ s;\bsmtp_tls_cert_file\b;<a href="postconf.5.html#smtp_tls_cert_file">$&</a>;g;
+ s;\bsmtp_tls_fingerprint_digest\b;<a href="postconf.5.html#smtp_tls_fingerprint_digest">$&</a>;g;
+ s;\bsmtp_tls_protocols\b;<a href="postconf.5.html#smtp_tls_protocols">$&</a>;g;
+ s;\bsmtp_tls_ciphers\b;<a href="postconf.5.html#smtp_tls_ciphers">$&</a>;g;
+ s;\bsmtp_tls_mandatory_ciphers\b;<a href="postconf.5.html#smtp_tls_mandatory_ciphers">$&</a>;g;
+ s;\bsmtp_tls_cipherlist\b;<a href="postconf.5.html#smtp_tls_cipherlist">$&</a>;g;
+ s;\bsmtp_tls_exclude_ciphers\b;<a href="postconf.5.html#smtp_tls_exclude_ciphers">$&</a>;g;
+ s;\bsmtp_tls_mandatory_exclude_ciphers\b;<a href="postconf.5.html#smtp_tls_mandatory_exclude_ciphers">$&</a>;g;
+ s;\bsmtp_tls_dcert_file\b;<a href="postconf.5.html#smtp_tls_dcert_file">$&</a>;g;
+ s;\bsmtp_tls_dkey_file\b;<a href="postconf.5.html#smtp_tls_dkey_file">$&</a>;g;
+ s;\bsmtp_tls_eccert_file\b;<a href="postconf.5.html#smtp_tls_eccert_file">$&</a>;g;
+ s;\bsmtp_tls_eckey_file\b;<a href="postconf.5.html#smtp_tls_eckey_file">$&</a>;g;
+ s;\bsmtp_tls_enforce_peername\b;<a href="postconf.5.html#smtp_tls_enforce_peername">$&</a>;g;
+ s;\bsmtp_tls_key_file\b;<a href="postconf.5.html#smtp_tls_key_file">$&</a>;g;
+ s;\bsmtp_tls_loglevel\b;<a href="postconf.5.html#smtp_tls_loglevel">$&</a>;g;
+ s;\bsmtp_tls_note_starttls_offer\b;<a href="postconf.5.html#smtp_tls_note_starttls_offer">$&</a>;g;
+ s;\bsmtp_tls_per_site\b;<a href="postconf.5.html#smtp_tls_per_site">$&</a>;g;
+ s;\bsmtp_tls_policy_maps\b;<a href="postconf.5.html#smtp_tls_policy_maps">$&</a>;g;
+ s;\bsmtp_tls_mandatory_protocols\b;<a href="postconf.5.html#smtp_tls_mandatory_protocols">$&</a>;g;
+ s;\bsmtp_tls_fingerprint_cert_match\b;<a href="postconf.5.html#smtp_tls_fingerprint_cert_match">$&</a>;g;
+ s;\bsmtp_tls_verify_cert_match\b;<a href="postconf.5.html#smtp_tls_verify_cert_match">$&</a>;g;
+ s;\bsmtp_tls_secure_cert_match\b;<a href="postconf.5.html#smtp_tls_secure_cert_match">$&</a>;g;
+ s;\bsmtp_tls_servername\b;<a href="postconf.5.html#smtp_tls_servername">$&</a>;g;
+ s;\bsmtp_tls_trust_anchor_file\b;<a href="postconf.5.html#smtp_tls_trust_anchor_file">$&</a>;g;
+ s;\bsmtp_tls_scert_verifydepth\b;<a href="postconf.5.html#smtp_tls_scert_verifydepth">$&</a>;g;
+ s;\bsmtp_tls_secu[-</Bb>]*\n* *[<Bb>]*rity_level\b;<a href="postconf.5.html#smtp_tls_security_level">$&</a>;g;
+ s;\bsmtp_tls_session_cache_database\b;<a href="postconf.5.html#smtp_tls_session_cache_database">$&</a>;g;
+ s;\bsmtp_tls_session_cache_timeout\b;<a href="postconf.5.html#smtp_tls_session_cache_timeout">$&</a>;g;
+ s;\bsmtp_tls_block_early_mail_reply\b;<a href="postconf.5.html#smtp_tls_block_early_mail_reply">$&</a>;g;
+ s;\bsmtp_tls_dane_insecure_mx_policy\b;<a href="postconf.5.html#smtp_tls_dane_insecure_mx_policy">$&</a>;g;
+ s;\bsmtp_tls_force_insecure_host_tlsa_lookup\b;<a href="postconf.5.html#smtp_tls_force_insecure_host_tlsa_lookup">$&</a>;g;
+ s;\bsmtp_tls_wrappermode\b;<a href="postconf.5.html#smtp_tls_wrappermode">$&</a>;g;
+ s;\bsmtp_use_tls\b;<a href="postconf.5.html#smtp_use_tls">$&</a>;g;
+ s;\bsmtp_header_checks\b;<a href="postconf.5.html#smtp_header_checks">$&</a>;g;
+ s;\bsmtp_mime_header_checks\b;<a href="postconf.5.html#smtp_mime_header_checks">$&</a>;g;
+ s;\bsmtp_nested_header_checks\b;<a href="postconf.5.html#smtp_nested_header_checks">$&</a>;g;
+ s;\bsmtp_body_checks\b;<a href="postconf.5.html#smtp_body_checks">$&</a>;g;
+ s;\bsmtp_reply_filter\b;<a href="postconf.5.html#smtp_reply_filter">$&</a>;g;
+ s;\bsmtp_address_preference\b;<a href="postconf.5.html#smtp_address_preference">$&</a>;g;
+ s;\bsmtp_per_record_deadline\b;<a href="postconf.5.html#smtp_per_record_deadline">$&</a>;g;
+ s;\bsmtp_send_dummy_mail_auth\b;<a href="postconf.5.html#smtp_send_dummy_mail_auth">$&</a>;g;
+ s;\bsmtp_balance_inet_protocols\b;<a href="postconf.5.html#smtp_balance_inet_protocols">$&</a>;g;
+ s;\bdnssec_probe\b;<a href="postconf.5.html#dnssec_probe">$&</a>;g;
+ s;\bsmtp_tls_connection_reuse\b;<a href="postconf.5.html#smtp_tls_connection_reuse">$&</a>;g;
+ s;\blmtp_tls_connection_reuse\b;<a href="postconf.5.html#lmtp_tls_connection_reuse">$&</a>;g;
+ s;\bsmtpd_enforce_tls\b;<a href="postconf.5.html#smtpd_enforce_tls">$&</a>;g;
+ s;\bsmtpd_sasl_tls_security_options\b;<a href="postconf.5.html#smtpd_sasl_tls_security_options">$&</a>;g;
+ s;\bsmtpd_sasl_type\b;<a href="postconf.5.html#smtpd_sasl_type">$&</a>;g;
+ s;\bsmtpd_start[-</bB>]*\n* *[<bB>]*tls_timeout\b;<a href="postconf.5.html#smtpd_starttls_timeout">$&</a>;g;
+ s;\bsmtpd_tls_CAfile\b;<a href="postconf.5.html#smtpd_tls_CAfile">$&</a>;g;
+ s;\bsmtpd_tls_CApath\b;<a href="postconf.5.html#smtpd_tls_CApath">$&</a>;g;
+ s;\bsmtpd_tls_ask_ccert\b;<a href="postconf.5.html#smtpd_tls_ask_ccert">$&</a>;g;
+ s;\bsmtpd_tls_auth_only\b;<a href="postconf.5.html#smtpd_tls_auth_only">$&</a>;g;
+ s;\bsmtpd_tls_ccert_verify[-</bB>]*\n*[ <bB>]*depth\b;<a href="postconf.5.html#smtpd_tls_ccert_verifydepth">$&</a>;g;
+ s;\bsmtpd_tls_chain_files\b;<a href="postconf.5.html#smtpd_tls_chain_files">$&</a>;g;
+ s;\bsmtpd_tls_cert_file\b;<a href="postconf.5.html#smtpd_tls_cert_file">$&</a>;g;
+ s;\bsmtpd_tls_cipherlist\b;<a href="postconf.5.html#smtpd_tls_cipherlist">$&</a>;g;
+ s;\bsmtpd_tls_exclude_ciphers\b;<a href="postconf.5.html#smtpd_tls_exclude_ciphers">$&</a>;g;
+ s;\bsmtpd_tls_finger[-</bB>]*\n*[ <bB>]*print_digest\b;<a href="postconf.5.html#smtpd_tls_fingerprint_digest">$&</a>;g;
+ s;\bsmtpd_tls_protocols\b;<a href="postconf.5.html#smtpd_tls_protocols">$&</a>;g;
+ s;\bsmtpd_tls_ciphers\b;<a href="postconf.5.html#smtpd_tls_ciphers">$&</a>;g;
+ s;\bsmtpd_tls_manda[-</bB>]*\n*[ <bB>]*tory_ciphers\b;<a href="postconf.5.html#smtpd_tls_mandatory_ciphers">$&</a>;g;
+ s;\bsmtpd_tls_manda[-</bB>]*\n*[ <bB>]*tory_exclude_ciphers\b;<a href="postconf.5.html#smtpd_tls_mandatory_exclude_ciphers">$&</a>;g;
+ s;\bsmtpd_tls_dcert_file\b;<a href="postconf.5.html#smtpd_tls_dcert_file">$&</a>;g;
+ s;\bsmtpd_tls_eccert_file\b;<a href="postconf.5.html#smtpd_tls_eccert_file">$&</a>;g;
+ s;\bsmtpd_tls_eckey_file\b;<a href="postconf.5.html#smtpd_tls_eckey_file">$&</a>;g;
+ s;\bsmtpd_tls_eecdh_grade\b;<a href="postconf.5.html#smtpd_tls_eecdh_grade">$&</a>;g;
+ s;\bsmtpd_tls_dh1024_param_file\b;<a href="postconf.5.html#smtpd_tls_dh1024_param_file">$&</a>;g;
+ s;\bsmtpd_tls_dh512_param_file\b;<a href="postconf.5.html#smtpd_tls_dh512_param_file">$&</a>;g;
+ s;\bsmtpd_tls_dkey_file\b;<a href="postconf.5.html#smtpd_tls_dkey_file">$&</a>;g;
+ s;\bsmtpd_tls_key_file\b;<a href="postconf.5.html#smtpd_tls_key_file">$&</a>;g;
+ s;\bsmtpd_tls_security_level\b;<a href="postconf.5.html#smtpd_tls_security_level">$&</a>;g;
+ s;\bsmtpd_tls_loglevel\b;<a href="postconf.5.html#smtpd_tls_loglevel">$&</a>;g;
+ s;\bsmtpd_tls_manda[-</bB>]*\n*[ <bB>]*tory_protocols\b;<a href="postconf.5.html#smtpd_tls_mandatory_protocols">$&</a>;g;
+ s;\bsmtpd_tls_received_header\b;<a href="postconf.5.html#smtpd_tls_received_header">$&</a>;g;
+ s;\bsmtpd_tls_req_ccert\b;<a href="postconf.5.html#smtpd_tls_req_ccert">$&</a>;g;
+ s;\bsmtpd_tls_ses[-</bB>]*\n*[ <bB>]*sion_cache_database\b;<a href="postconf.5.html#smtpd_tls_session_cache_database">$&</a>;g;
+ s;\bsmtpd_tls_ses[-</bB>]*\n*[ <bB>]*sion_cache_timeout\b;<a href="postconf.5.html#smtpd_tls_session_cache_timeout">$&</a>;g;
+ s;\bsmtpd_tls_always_issue_ses[-</bB>]*\n*[ <bB>]*sion_ids\b;<a href="postconf.5.html#smtpd_tls_always_issue_session_ids">$&</a>;g;
+ s;\bsmtpd_tls_wrappermode\b;<a href="postconf.5.html#smtpd_tls_wrappermode">$&</a>;g;
+ s;\bsmtpd_use_tls\b;<a href="postconf.5.html#smtpd_use_tls">$&</a>;g;
+ s;\bsmtpd_reject_footer\b;<a href="postconf.5.html#smtpd_reject_footer">$&</a>;g;
+ s;\bsmtpd_reject_footer_maps\b;<a href="postconf.5.html#smtpd_reject_footer_maps">$&</a>;g;
+ s;\bsmtpd_per_record_deadline\b;<a href="postconf.5.html#smtpd_per_record_deadline">$&</a>;g;
+ s;\bsmtpd_upstream_proxy_protocol\b;<a href="postconf.5.html#smtpd_upstream_proxy_protocol">$&</a>;g;
+ s;\bsmtpd_upstream_proxy_timeout\b;<a href="postconf.5.html#smtpd_upstream_proxy_timeout">$&</a>;g;
+ s;\btls_daemon_random_bytes\b;<a href="postconf.5.html#tls_daemon_random_bytes">$&</a>;g;
+ s;\btls_daemon_random_source\b;<a href="postconf.5.html#tls_daemon_random_source">$&</a>;g;
+ s;\btlsmgr_service_name\b;<a href="postconf.5.html#tlsmgr_service_name">$&</a>;g;
+ s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_bytes\b;<a href="postconf.5.html#tls_random_bytes">$&</a>;g;
+ s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_exchange_name\b;<a href="postconf.5.html#tls_random_exchange_name">$&</a>;g;
+ s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_prng_update_period\b;<a href="postconf.5.html#tls_random_prng_update_period">$&</a>;g;
+ s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_reseed_period\b;<a href="postconf.5.html#tls_random_reseed_period">$&</a>;g;
+ s;\btls_ran[-</Bb>]*\n* *[<Bb>]*dom_source\b;<a href="postconf.5.html#tls_random_source">$&</a>;g;
+ s;\btls_high_cipherlist\b;<a href="postconf.5.html#tls_high_cipherlist">$&</a>;g;
+ s;\btls_medium_cipherlist\b;<a href="postconf.5.html#tls_medium_cipherlist">$&</a>;g;
+ s;\btls_low_cipherlist\b;<a href="postconf.5.html#tls_low_cipherlist">$&</a>;g;
+ s;\btls_export_cipherlist\b;<a href="postconf.5.html#tls_export_cipherlist">$&</a>;g;
+ s;\btls_null_cipherlist\b;<a href="postconf.5.html#tls_null_cipherlist">$&</a>;g;
+ s;\btls_eecdh_auto_curves\b;<a href="postconf.5.html#tls_eecdh_auto_curves">$&</a>;g;
+ s;\btls_eecdh_strong_curve\b;<a href="postconf.5.html#tls_eecdh_strong_curve">$&</a>;g;
+ s;\btls_eecdh_ultra_curve\b;<a href="postconf.5.html#tls_eecdh_ultra_curve">$&</a>;g;
+ s;\btls_preempt_cipherlist\b;<a href="postconf.5.html#tls_preempt_cipherlist">$&</a>;g;
+ s;\btls_disable_workarounds\b;<a href="postconf.5.html#tls_disable_workarounds">$&</a>;g;
+ s;\btls_append_default_CA\b;<a href="postconf.5.html#tls_append_default_CA">$&</a>;g;
+ s;\btls_legacy_public_key_fingerprints\b;<a href="postconf.5.html#tls_legacy_public_key_fingerprint">$&</a>;g;
+ s;\btls_dane_digests\b;<a href="postconf.5.html#tls_dane_digests">$&</a>;g;
+ s;\btls_wildcard_matches_multiple_labels\b;<a href="postconf.5.html#tls_wildcard_matches_multiple_labels">$&</a>;g;
+ s;\btls_session_ticket_cipher\b;<a href="postconf.5.html#tls_session_ticket_cipher">$&</a>;g;
+ s;\btls_server_sni_maps\b;<a href="postconf.5.html#tls_server_sni_maps">$&</a>;g;
+ s;\btls_ssl_options\b;<a href="postconf.5.html#tls_ssl_options">$&</a>;g;
+ s;\btls_dane_digest_agility\b;<a href="postconf.5.html#tls_dane_digest_agility">$&</a>;g;
+ s;\btls_dane_trust_anchor_digest_enable\b;<a href="postconf.5.html#tls_dane_trust_anchor_digest_enable">$&</a>;g;
+ s;\btls_fast_shutdown_enable\b;<a href="postconf.5.html#tls_fast_shutdown_enable">$&</a>;g;
+
+ s;\bfrozen_delivered_to\b;<a href="postconf.5.html#frozen_delivered_to">$&</a>;g;
+ s;\breset_owner_alias\b;<a href="postconf.5.html#reset_owner_alias">$&</a>;g;
+ s;\benable_long_queue_ids\b;<a href="postconf.5.html#enable_long_queue_ids">$&</a>;g;
+
+ # Transport-dependent magical parameters.
+
+ s;(<i>transport</i>)(<b>)?(_destination_concurrency_failed_cohort_limit)\b;$2<a href="postconf.5.html#transport_destination_concurrency_failed_cohort_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_destination_concurrency_negative_feedback)\b;$2<a href="postconf.5.html#transport_destination_concurrency_negative_feedback">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_destination_concurrency_positive_feedback)\b;$2<a href="postconf.5.html#transport_destination_concurrency_positive_feedback">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_delivery_slot_cost)\b;$2<a href="postconf.5.html#transport_delivery_slot_cost">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_delivery_slot_discount)\b;$2<a href="postconf.5.html#transport_delivery_slot_discount">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_delivery_slot_loan)\b;$2<a href="postconf.5.html#transport_delivery_slot_loan">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_destination_concurrency_limit)\b;$2<a href="postconf.5.html#transport_destination_concurrency_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_destination_recipient_limit)\b;$2<a href="postconf.5.html#transport_destination_recipient_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_extra_recipient_limit)\b;$2<a href="postconf.5.html#transport_extra_recipient_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_initial_destination_concurrency)\b;$2<a href="postconf.5.html#transport_initial_destination_concurrency">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_minimum_delivery_slots)\b;$2<a href="postconf.5.html#transport_minimum_delivery_slots">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_recipient_limit)\b;$2<a href="postconf.5.html#transport_recipient_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_recipient_refill_delay)\b;$2<a href="postconf.5.html#transport_recipient_refill_delay">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_recipient_refill_limit)\b;$2<a href="postconf.5.html#transport_recipient_refill_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_time_limit)\b;$2<a href="postconf.5.html#transport_time_limit">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_destination_rate_delay)\b;$2<a href="postconf.5.html#transport_destination_rate_delay">$1$3</a>;g;
+ s;(<i>transport</i>)(<b>)?(_transport_rate_delay)\b;$2<a href="postconf.5.html#transport_transport_rate_delay">$1$3</a>;g;
+
+ # Undo hyperlinks of manual pages with the same name as parameters.
+
+ s/<a href="[^"]*">([^<]*)<\/a>\(/$1(/g;
+
+ # Undo hyperlinks of pathnames thay collide with parameter names.
+
+ s/\/<a href="[^"]*">([^<]*)<\/a>/\/$1/g;
+
+ # Hyperlink Postfix manual page references.
+
+ s/[<bB>]*anvil[<\/bB>]*\(8\)/<a href="anvil.8.html">$&<\/a>/g;
+ s/[<bB>]*bounce[<\/bB>]*\(8\)/<a href="bounce.8.html">$&<\/a>/g;
+ s/[<bB>]*cleanup[<\/bB>]*\(8\)/<a href="cleanup.8.html">$&<\/a>/g;
+ s/[<bB>]*defer[<\/bB>]*\(8\)/<a href="defer.8.html">$&<\/a>/g;
+ s/[<bB>]*dis[-<\/bB>]*\n* *[<bB>]*card[<\/bB>]*\(8\)/<a href="discard.8.html">$&<\/a>/g;
+ s/[<bB>]*dns[-<\/Bb>]*\n* *[<Bb>]*blog[<\/bB>]*\(8\)/<a href="dnsblog.8.html">$&<\/a>/g;
+ s/[<bB>]*error[<\/bB>]*\(8\)/<a href="error.8.html">$&<\/a>/g;
+ s/[<bB>]*flush[<\/bB>]*\(8\)/<a href="flush.8.html">$&<\/a>/g;
+ s/[<bB>]*lmtp[<\/bB>]*\(8\)/<a href="lmtp.8.html">$&<\/a>/g;
+ s/[<bB>]*local[<\/bB>]*\(8\)/<a href="local.8.html">$&<\/a>/g;
+ s/[<bB>]*mas[-<\/bB>]*\n* *[<bB>]*ter[<\/bB>]*\(8\)/<a href="master.8.html">$&<\/a>/g;
+ s/[<bB>]*pickup[<\/bB>]*\(8\)/<a href="pickup.8.html">$&<\/a>/g;
+ s/[<bB>]*pipe[<\/bB>]*\(8\)/<a href="pipe.8.html">$&<\/a>/g;
+ s/[<bB>]*postlogd[<\/bB>]*\(8\)/<a href="postlogd.8.html">$&<\/a>/g;
+ s/[<bB>]*postscreen[<\/bB>]*\(8\)/<a href="postscreen.8.html">$&<\/a>/g;
+ s/[<bB>]*oqmgr[<\/bB>]*\(8\)/<a href="qmgr.8.html">$&<\/a>/g;
+ s/[<bB>]*\bqmgr[<\/bB>]*\(8\)/<a href="qmgr.8.html">$&<\/a>/g;
+ s/[<bB>]*qmqpd[<\/bB>]*\(8\)/<a href="qmqpd.8.html">$&<\/a>/g;
+ s/[<bB>]*showq[<\/bB>]*\(8\)/<a href="showq.8.html">$&<\/a>/g;
+ s/[<bB>]*smtp[<\/bB>]*\(8\)/<a href="smtp.8.html">$&<\/a>/g;
+ s/[<bB>]*smtpd[<\/bB>]*\(8\)/<a href="smtpd.8.html">$&<\/a>/g;
+ s/[<bB>]*spawn[<\/bB>]*\(8\)/<a href="spawn.8.html">$&<\/a>/g;
+ s/[<bB>]*tlsproxy[<\/bB>]*\(8\)/<a href="tlsproxy.8.html">$&<\/a>/g;
+ s/[<bB>]*tlsmgr[<\/bB>]*\(8\)/<a href="tlsmgr.8.html">$&<\/a>/g;
+ s/[<bB>]*trace[<\/bB>]*\(8\)/<a href="trace.8.html">$&<\/a>/g;
+ s/[<bB>]*trivial- *<br> *rewrite[<\/bB>]*\(8\)/<a href="trivial-rewrite.8.html">$&<\/a>/g;
+ s/[<bB>]*triv[-<\/bB>]*\n* *[<bB>]*ial-[<\/bB>]*\n* *[<bB>]*re[-<\/bB>]*\n*[ <bB>]*write[<\/bB>]*\(8\)/<a href="trivial-rewrite.8.html">$&<\/a>/g;
+ s/[<bB>]*mailq[<\/bB>]*\(1\)/<a href="mailq.1.html">$&<\/a>/g;
+ s/[<bB>]*newaliases[<\/bB>]*\(1\)/<a href="newaliases.1.html">$&<\/a>/g;
+ s/[<bB>]*postalias[<\/bB>]*\(1\)/<a href="postalias.1.html">$&<\/a>/g;
+ s/[<bB>]*postcat[<\/bB>]*\(1\)/<a href="postcat.1.html">$&<\/a>/g;
+ s/[<bB>]*post[-<\/bB>]*\n*[ <bB>]*conf[<\/bB>]*\(1\)/<a href="postconf.1.html">$&<\/a>/g;
+ s/[<bB>]*postdrop[<\/bB>]*\(1\)/<a href="postdrop.1.html">$&<\/a>/g;
+ s/[<bB>]*post[-<\/bB>]*\n* *[<bB>]*fix[<\/bB>]*\(1\)/<a href="postfix.1.html">$&<\/a>/g;
+ s/[<bB>]*post[-<\/bB>]*\n* *[<bB>]*fix-tls[<\/bB>]*\(1\)/<a href="postfix-tls.1.html">$&<\/a>/g;
+ s/[<bB>]*postkick[<\/bB>]*\(1\)/<a href="postkick.1.html">$&<\/a>/g;
+ s/[<bB>]*postlock[<\/bB>]*\(1\)/<a href="postlock.1.html">$&<\/a>/g;
+ s/[<bB>]*postlog[<\/bB>]*\(1\)/<a href="postlog.1.html">$&<\/a>/g;
+ s/[<bB>]*postmap[<\/bB>]*\(1\)/<a href="postmap.1.html">$&<\/a>/g;
+ s/[<bB>]*postmulti[<\/bB>]*\(1\)/<a href="postmulti.1.html">$&<\/a>/g;
+ s/[<bB>]*postqueue[<\/bB>]*\(1\)/<a href="postqueue.1.html">$&<\/a>/g;
+ s/[<bB>]*post[-<\/bB>]*\n*[ <bB>]*super[<\/bB>]*\(1\)/<a href="postsuper.1.html">$&<\/a>/g;
+ s/[<bB>]*post[-<\/bB>]*\n*[ <bB>]*tls-finger[<\/bB>]*\(1\)/<a href="posttls-finger.1.html">$&<\/a>/g;
+ s/[<bB>]*send[-<\/bB>]*\n*[ <bB>]*mail[<\/bB>]*\(1\)/<a href="sendmail.1.html">$&<\/a>/g;
+ s/[<bB>]*smtp-[<\/bB>]*\n* *[<bB>]*source[<\/bB>]*\(1\)/<a href="smtp-source.1.html">$&<\/a>/g;
+ s/[<bB>]*smtp-[<\/bB>]*\n* *[<bB>]*sink[<\/bB>]*\(1\)/<a href="smtp-sink.1.html">$&<\/a>/g;
+ s/[<bB>]*qmqp-[<\/bB>]*\n* *[<bB>]*source[<\/bB>]*\(1\)/<a href="qmqp-source.1.html">$&<\/a>/g;
+ s/[<bB>]*qmqp-[<\/bB>]*\n* *[<bB>]*sink[<\/bB>]*\(1\)/<a href="qmqp-sink.1.html">$&<\/a>/g;
+ s/[<bB>]*qshape[<\/bB>]*\(1\)/<a href="qshape.1.html">$&<\/a>/g;
+ s/[<bB>]*access[<\/bB>]*\(5\)/<a href="access.5.html">$&<\/a>/g;
+ s/[<bB>]*aliases[<\/bB>]*\(5\)/<a href="aliases.5.html">$&<\/a>/g;
+ s/[<bB>]*bounce[<\/bB>]*\(5\)/<a href="bounce.5.html">$&<\/a>/g;
+ s/[<bB>]*canonical[<\/bB>]*\(5\)/<a href="canonical.5.html">$&<\/a>/g;
+ s/[<bB>]*gener[-<\/bB>]*\n* *[<bB>]*ic[<\/bB>]*\(5\)/<a href="generic.5.html">$&<\/a>/g;
+ s/[<bB>]*ldap[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="ldap_table.5.html">$&<\/a>/g;
+ s/[<bB>]*lmdb[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="lmdb_table.5.html">$&<\/a>/g;
+ s/[<bB>]*mas[-<\/bB>]*\n* *[<bB>]*ter[<\/bB>]*\(5\)/<a href="master.5.html">$&<\/a>/g;
+ s/[<bB>]*mem[-<\/bB>]*\n* *[<bB>]*cache[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="memcache_table.5.html">$&<\/a>/g;
+ s/[<bB>]*mysql[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="mysql_table.5.html">$&<\/a>/g;
+ s/[<bB>]*nisplus[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="nisplus_table.5.html">$&<\/a>/g;
+ s/[<bB>]*pcre[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="pcre_table.5.html">$&<\/a>/g;
+ s/[<bB>]*pgsql[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="pgsql_table.5.html">$&<\/a>/g;
+ s/[<bB>]*post[-<\/Bb>]*\n* *[<Bb>]*conf[<\/bB>]*\(5\)/<a href="postconf.5.html">$&<\/a>/g;
+ s/[<bB>]*postfix-wrapper[<\/bB>]*\(5\)/<a href="postfix-wrapper.5.html">$&<\/a>/g;
+ s/[<bB>]*prox[-<\/bB>]*\n*[ <bB>]*ymap[<\/bB>]*\(8\)/<a href="proxymap.8.html">$&<\/a>/g;
+ s/[<bB>]*reg[-<\/bB>]*\n*[ <bB>]*exp[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="regexp_table.5.html">$&<\/a>/g;
+ s/[<bB>]*relocated[<\/bB>]*\(5\)/<a href="relocated.5.html">$&<\/a>/g;
+ s/[<bB>]*scache[<\/bB>]*\(8\)/<a href="scache.8.html">$&<\/a>/g;
+ s/[<bB>]*sock[-<\/bB>]*\n*[ <bB>]*etmap[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="socketmap_table.5.html">$&<\/a>/g;
+ s/[<bB>]*sqlite[<\/bBiI>]*_[<\/iIbB>]*ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="sqlite_table.5.html">$&<\/a>/g;
+ s/[<bB>]*trans[-<\/bB>]*\n*[ <bB>]*port[<\/bB>]*\(5\)/<a href="transport.5.html">$&<\/a>/g;
+ s/[<bB>]*ver[-<\/bB>]*\n*[ <bB>]*ify[<\/bB>]*\(8\)/<a href="verify.8.html">$&<\/a>/g;
+ s/[<bB>]*vir[-<\/bB>]*\n*[ <bB>]*tual[<\/bB>]*\(5\)/<a href="virtual.5.html">$&<\/a>/g;
+ s/[<bB>]*vir[-<\/bB>]*\n*[ <bB>]*tual[<\/bB>]*\(8\)/<a href="virtual.8.html">$&<\/a>/g;
+ s/[<bB>]*cidr_ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="cidr_table.5.html">$&<\/a>/g;
+ s/[<bB>]*tcp_ta[-<\/bB>]*\n*[ <bB>]*ble[<\/bB>]*\(5\)/<a href="tcp_table.5.html">$&<\/a>/g;
+ # Workaround...
+ s/<b><a href="postconf.5.html#body_checks">body_checks<\/a><\/b>\(5\)/<b>body_checks<\/b>(5)/;
+ s/<b><a href="postconf.5.html#header_checks">header_checks<\/a><\/b>\(5\)/<b>header_checks<\/b>(5)/;
+ s/[<bB>]*body_checks[<\/bB>]*\(5\)/<a href="header_checks.5.html">$&<\/a>/g;
+ s/[<bB>]*header_checks[<\/bB>]*\(5\)/<a href="header_checks.5.html">$&<\/a>/g;
+
+ s/[<bB>]*main\.cf[<\/bB>]*/<a href="postconf.5.html">$&<\/a>/g;
+ s/[<bB>]*mas[-<\/bB>]*\n* *[<bB>]*ter\.cf[<\/bB>]*/<a href="master.5.html">$&<\/a>/g;
+
+ # Hyperlink README document names
+
+ s/\b([A-Z][A-Z0-9_]*)[-]*\n*[ ]*([A-Z0-9_]*_README)\b/<a href="$1$2.html">$&<\/a>/g;
+ s/\bINSTALL\b/<a href="$&.html">$&<\/a>/g;
+ s/\bOVERVIEW\b/<a href="$&.html">$&<\/a>/g;
+ s/\btype:table\b/<a href="DATABASE_README.html">type:table<\/a>/g;
+
+ # Split manual page hyperlinks across newlines
+
+ s/(<a href="[^"]*">)([<bB>]*[-a-z0-9_]*[-<\/bB>]*)(\n *)([<bB>]*[-a-z0-9_]*[<\/bB>]*\(\d\))(<\/a>)/$1$2$5$3$1$4$5/;
+
+ # Access restrictions - generic
+
+ s;\bcheck_address_map\b;<a href="postconf.5.html#check_address_map">$&</a>;g;
+ s;\bcheck_policy_service\b;<a href="postconf.5.html#check_policy_service">$&</a>;g;
+ s;\bdefer_if_permit\b;<a href="postconf.5.html#defer_if_permit">$&</a>;g;
+ s;\bdefer_if_reject\b;<a href="postconf.5.html#defer_if_reject">$&</a>;g;
+ s;\breject_multi_recip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent_bounce\b;<a href="postconf.5.html#reject_multi_recipient_bounce">$&</a>;g;
+ s;\breject_plaintext_session\b;<a href="postconf.5.html#reject_plaintext_session">$&</a>;g;
+ s;\breject_unauth_pipelining\b;<a href="postconf.5.html#reject_unauth_pipelining">$&</a>;g;
+ s;\bwarn_if_reject\b;<a href="postconf.5.html#warn_if_reject">$&</a>;g;
+
+ # Access restrictions - client
+
+ s;\bcheck_client_access\b;<a href="postconf.5.html#check_client_access">$&</a>;g;
+ s;\bcheck_client_mx_access\b;<a href="postconf.5.html#check_client_mx_access">$&</a>;g;
+ s;\bcheck_client_ns_access\b;<a href="postconf.5.html#check_client_ns_access">$&</a>;g;
+ s;\bcheck_ccert_access\b;<a href="postconf.5.html#check_ccert_access">$&</a>;g;
+ s;\bcheck_reverse_client_hostname_access\b;<a href="postconf.5.html#check_reverse_client_hostname_access">$&</a>;g;
+ s;\bcheck_reverse_client_hostname_mx_access\b;<a href="postconf.5.html#check_reverse_client_hostname_mx_access">$&</a>;g;
+ s;\bcheck_reverse_client_hostname_ns_access\b;<a href="postconf.5.html#check_reverse_client_hostname_ns_access">$&</a>;g;
+ s;\bcheck_sasl_access\b;<a href="postconf.5.html#check_sasl_access">$&</a>;g;
+ s;\bpermit_inet_interfaces\b;<a href="postconf.5.html#permit_inet_interfaces">$&</a>;g;
+ s;\bpermit_mynetworks\b;<a href="postconf.5.html#permit_mynetworks">$&</a>;g;
+ s;\bper[-</bB>]*\n* *[<bB>]*mit_sasl_authenticated\b;<a href="postconf.5.html#permit_sasl_authenticated">$&</a>;g;
+ s;\bpermit_tls_clientcerts\b;<a href="postconf.5.html#permit_tls_clientcerts">$&</a>;g;
+ s;\bpermit_tls_all_clientcerts\b;<a href="postconf.5.html#permit_tls_all_clientcerts">$&</a>;g;
+ s;\breject_unknown_client_hostname\b;<a href="postconf.5.html#reject_unknown_client_hostname">$&</a>;g;
+ s;\breject_unknown_client\b;<a href="postconf.5.html#reject_unknown_client_hostname">$&</a>;g;
+ s;\breject_unknown_reverse_client_hostname\b;<a href="postconf.5.html#reject_unknown_reverse_client_hostname">$&</a>;g;
+ s;\breject_unknown_forward_client_hostname\b;<a href="postconf.5.html#reject_unknown_forward_client_hostname">$&</a>;g;
+ s;\breject_rbl_client\b;<a href="postconf.5.html#reject_rbl_client">$&</a>;g;
+ s;\breject_rhsbl_client\b;<a href="postconf.5.html#reject_rhsbl_client">$&</a>;g;
+ s;\breject_rhsbl_reverse_client\b;<a href="postconf.5.html#reject_rhsbl_reverse_client">$&</a>;g;
+ s;\bpermit_dnswl_client\b;<a href="postconf.5.html#permit_dnswl_client">$&</a>;g;
+ s;\bpermit_rhswl_client\b;<a href="postconf.5.html#permit_rhswl_client">$&</a>;g;
+
+ # Access restrictions - helo
+
+ s;\bcheck_helo_access\b;<a href="postconf.5.html#check_helo_access">$&</a>;g;
+ s;\bcheck_helo_mx_access\b;<a href="postconf.5.html#check_helo_mx_access">$&</a>;g;
+ s;\bcheck_helo_ns_access\b;<a href="postconf.5.html#check_helo_ns_access">$&</a>;g;
+ s;\breject_invalid_helo_hostname\b;<a href="postconf.5.html#reject_invalid_helo_hostname">$&</a>;g;
+ s;\breject_invalid_hostname\b;<a href="postconf.5.html#reject_invalid_helo_hostname">$&</a>;g;
+ s;\breject_non_fqdn_helo_hostname\b;<a href="postconf.5.html#reject_non_fqdn_helo_hostname">$&</a>;g;
+ s;\breject_non_fqdn_hostname\b;<a href="postconf.5.html#reject_non_fqdn_helo_hostname">$&</a>;g;
+ s;\breject_rhsbl_helo\b;<a href="postconf.5.html#reject_rhsbl_helo">$&</a>;g;
+ s;\breject_unknown_helo_host[-</bB>]*\n* *[<bB>]*name\b;<a href="postconf.5.html#reject_unknown_helo_hostname">$&</a>;g;
+ s;\breject_unknown_hostname\b;<a href="postconf.5.html#reject_unknown_helo_hostname">$&</a>;g;
+
+ # Access restrictions - sender
+
+ s;\bcheck_sender_access\b;<a href="postconf.5.html#check_sender_access">$&</a>;g;
+ s;\bcheck_sender_mx_access\b;<a href="postconf.5.html#check_sender_mx_access">$&</a>;g;
+ s;\bcheck_sender_ns_access\b;<a href="postconf.5.html#check_sender_ns_access">$&</a>;g;
+ s;\b(reject_authenti)([-</bB>]*\n*[ <bB>]*)(cated_sender_login_mismatch)\b;<a href="postconf.5.html#reject_authenticated_sender_login_mismatch">$1<\/a>$2<a href="postconf.5.html#reject_authenticated_sender_login_mismatch">$3</a>;g;
+ s;\breject_known_sender_login_mismatch\b;<a href="postconf.5.html#reject_known_sender_login_mismatch">$&</a>;g;
+ s;\breject_non_fqdn_sender\b;<a href="postconf.5.html#reject_non_fqdn_sender">$&</a>;g;
+ s;\breject_rhsbl_sender\b;<a href="postconf.5.html#reject_rhsbl_sender">$&</a>;g;
+ s;\breject_sender_login_mis[-</bB>]*\n*[ <bB>]*match\b;<a href="postconf.5.html#reject_sender_login_mismatch">$&</a>;g;
+ s;\breject_unauthenticated_sender_login_mismatch\b;<a href="postconf.5.html#reject_unauthenticated_sender_login_mismatch">$&</a>;g;
+ s;\breject_unknown_sender_domain\b;<a href="postconf.5.html#reject_unknown_sender_domain">$&</a>;g;
+ s;\breject_unlisted_sender\b;<a href="postconf.5.html#reject_unlisted_sender">$&</a>;g;
+ s;\breject_unver[-</bB>]*\n*[ <bB>]*ified_sender\b;<a href="postconf.5.html#reject_unverified_sender">$&</a>;g;
+
+ # Access restrictions - recipient
+
+ s;\bcheck_recip[-</bB>]*\n* *[<bB>]*ient_access\b;<a href="postconf.5.html#check_recipient_access">$&</a>;g;
+ s;\bcheck_recip[-</bB>]*\n* *[<bB>]*ient_mx_access\b;<a href="postconf.5.html#check_recipient_mx_access">$&</a>;g;
+ s;\bcheck_recip[-</bB>]*\n* *[<bB>]*ient_ns_access\b;<a href="postconf.5.html#check_recipient_ns_access">$&</a>;g;
+ s;\bpermit_auth_destination\b;<a href="postconf.5.html#permit_auth_destination">$&</a>;g;
+ s;\bpermit_mx_backup\b;<a href="postconf.5.html#permit_mx_backup">$&</a>;g;
+ s;\breject_non_fqdn_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#reject_non_fqdn_recipient">$&</a>;g;
+ s;\breject_rhsbl_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#reject_rhsbl_recipient">$&</a>;g;
+ s;\breject_unauth_destination\b;<a href="postconf.5.html#reject_unauth_destination">$&</a>;g;
+ s;\bdefer_unauth_destination\b;<a href="postconf.5.html#defer_unauth_destination">$&</a>;g;
+ s;\breject_unknown_recipi[-</bB>]*\n*[ <bB>]*ent_domain\b;<a href="postconf.5.html#reject_unknown_recipient_domain">$&</a>;g;
+ s;\breject_unlisted_recip[-</bB>]*\n* *[<bB>]*ient\b;<a href="postconf.5.html#reject_unlisted_recipient">$&</a>;g;
+ s;\breject_unver[-</bB>]*\n*[ <bB>]*ified_recip[-</bB>]*\n* *[<bB>]*i[-</bB>]*\n* *[<bB>]*ent\b;<a href="postconf.5.html#reject_unverified_recipient">$&</a>;g;
+
+ # Access restrictions - etrn
+
+ s;\bcheck_etrn_access\b;<a href="postconf.5.html#check_etrn_access">$&</a>;g;
+
+ # Milters.
+
+ s;\bmilter_macro_daemon_name\b;<a href="postconf.5.html#milter_macro_daemon_name">$&</a>;g;
+ s;\bmilter_macro_v\b;<a href="postconf.5.html#milter_macro_v">$&</a>;g;
+ s;\bmilter_connect_timeout\b;<a href="postconf.5.html#milter_connect_timeout">$&</a>;g;
+ s;\bmilter_command_timeout\b;<a href="postconf.5.html#milter_command_timeout">$&</a>;g;
+ s;\bmilter_content_timeout\b;<a href="postconf.5.html#milter_content_timeout">$&</a>;g;
+ s;\bmilter_protocol\b;<a href="postconf.5.html#milter_protocol">$&</a>;g;
+ s;\bmilter_default_action\b;<a href="postconf.5.html#milter_default_action">$&</a>;g;
+ s;\bmilter_connect_macros\b;<a href="postconf.5.html#milter_connect_macros">$&</a>;g;
+ s;\bmilter_helo_macros\b;<a href="postconf.5.html#milter_helo_macros">$&</a>;g;
+ s;\bmilter_mail_macros\b;<a href="postconf.5.html#milter_mail_macros">$&</a>;g;
+ s;\bmilter_rcpt_macros\b;<a href="postconf.5.html#milter_rcpt_macros">$&</a>;g;
+ s;\bmilter_data_macros\b;<a href="postconf.5.html#milter_data_macros">$&</a>;g;
+ s;\bmilter_unknown_command_macros\b;<a href="postconf.5.html#milter_unknown_command_macros">$&</a>;g;
+ s;\bmilter_end_of_data_macros\b;<a href="postconf.5.html#milter_end_of_data_macros">$&</a>;g;
+ s;\bmilter_end_of_header_macros\b;<a href="postconf.5.html#milter_end_of_header_macros">$&</a>;g;
+ s;\bmilter_header_checks\b;<a href="postconf.5.html#milter_header_checks">$&</a>;g;
+ s;\bmilter_macro_defaults\b;<a href="postconf.5.html#milter_macro_defaults">$&</a>;g;
+
+ # Multi-instance support
+ s;\bmulti_instance_directo[-</bB>]*\n*[ <bB>]*ries\b;<a href="postconf.5.html#multi_instance_directories">$&</a>;g;
+ s;\bmulti_instance_wrap[-</bB>]*\n* *[<bB>]*per\b;<a href="postconf.5.html#multi_instance_wrapper">$&</a>;g;
+ s;\bmulti_instance_group\b;<a href="postconf.5.html#multi_instance_group">$&</a>;g;
+ s;\bmulti_instance_name\b;<a href="postconf.5.html#multi_instance_name">$&</a>;g;
+ s;\bmulti_instance_enable\b;<a href="postconf.5.html#multi_instance_enable">$&</a>;g;
+
+ # postscreen
+ s;\bdns_ncache_ttl_fix_enable\b;<a href="postconf.5.html#dns_ncache_ttl_fix_enable">$&</a>;g;
+ s;\bdnsblog_reply_delay\b;<a href="postconf.5.html#dnsblog_reply_delay">$&</a>;g;
+ s;\bpostscreen_cache_map\b;<a href="postconf.5.html#postscreen_cache_map">$&</a>;g;
+ s;\bpostscreen_cache_cleanup_interval\b;<a href="postconf.5.html#postscreen_cache_cleanup_interval">$&</a>;g;
+ s;\bpostscreen_cache_retention_time\b;<a href="postconf.5.html#postscreen_cache_retention_time">$&</a>;g;
+ s;\bpostscreen_command_count_limit\b;<a href="postconf.5.html#postscreen_command_count_limit">$&</a>;g;
+ s;\bpostscreen_com[-</bB>]*\n* *[<bB>]*mand_time_limit\b;<a href="postconf.5.html#postscreen_command_time_limit">$&</a>;g;
+ s;\bsmtpd_service_name\b;<a href="postconf.5.html#smtpd_service_name">$&</a>;g;
+ s;\bdnsblog_service_name\b;<a href="postconf.5.html#dnsblog_service_name">$&</a>;g;
+ s;\btlsproxy_service_name\b;<a href="postconf.5.html#tlsproxy_service_name">$&</a>;g;
+ s;\bpostscreen_bare_newline_enable\b;<a href="postconf.5.html#postscreen_bare_newline_enable">$&</a>;g;
+ s;\bpostscreen_bare_newline_action\b;<a href="postconf.5.html#postscreen_bare_newline_action">$&</a>;g;
+ s;\bpostscreen_bare_newline_ttl\b;<a href="postconf.5.html#postscreen_bare_newline_ttl">$&</a>;g;
+ s;\bpostscreen_post_queue_limit\b;<a href="postconf.5.html#postscreen_post_queue_limit">$&</a>;g;
+ s;\bpostscreen_pre_queue_limit\b;<a href="postconf.5.html#postscreen_pre_queue_limit">$&</a>;g;
+ s;\bpostscreen_greet_wait\b;<a href="postconf.5.html#postscreen_greet_wait">$&</a>;g;
+ s;\bpostscreen_greet_banner\b;<a href="postconf.5.html#postscreen_greet_banner">$&</a>;g;
+ s;\bpostscreen_greet_action\b;<a href="postconf.5.html#postscreen_greet_action">$&</a>;g;
+ s;\bpostscreen_greet_ttl\b;<a href="postconf.5.html#postscreen_greet_ttl">$&</a>;g;
+ s;\bpostscreen_disable_vrfy_command\b;<a href="postconf.5.html#postscreen_disable_vrfy_command">$&</a>;g;
+ s;\bpostscreen_dnsbl_reply_map\b;<a href="postconf.5.html#postscreen_dnsbl_reply_map">$&</a>;g;
+ s;\bpostscreen_dnsbl_sites\b;<a href="postconf.5.html#postscreen_dnsbl_sites">$&</a>;g;
+ s;\bpostscreen_dnsbl_thresh[-</bB>]*\n* *[<bB>]*old\b;<a href="postconf.5.html#postscreen_dnsbl_threshold">$&</a>;g;
+ s;\bpostscreen_dnsbl_whitelist_thresh[-</bB>]*\n* *[<bB>]*old\b;<a href="postconf.5.html#postscreen_dnsbl_whitelist_threshold">$&</a>;g;
+ s;\bpostscreen_dnsbl_action\b;<a href="postconf.5.html#postscreen_dnsbl_action">$&</a>;g;
+ s;\bpostscreen_dnsbl_max_ttl\b;<a href="postconf.5.html#postscreen_dnsbl_max_ttl">$&</a>;g;
+ s;\bpostscreen_dnsbl_min_ttl\b;<a href="postconf.5.html#postscreen_dnsbl_min_ttl">$&</a>;g;
+ s;\bpostscreen_dnsbl_ttl\b;<a href="postconf.5.html#postscreen_dnsbl_ttl">$&</a>;g;
+ s;\bpostscreen_dnsbl_timeout\b;<a href="postconf.5.html#postscreen_dnsbl_timeout">$&</a>;g;
+ s;\bpostscreen_for[-</bB>]*\n*[ <bB>]*bid[-</bB>]*\n* *[<bB>]*den_commands\b;<a href="postconf.5.html#postscreen_forbidden_commands">$&</a>;g;
+ s;\bpostscreen_helo_required\b;<a href="postconf.5.html#postscreen_helo_required">$&</a>;g;
+ s;\bpostscreen_non_smtp_command_enable\b;<a href="postconf.5.html#postscreen_non_smtp_command_enable">$&</a>;g;
+ s;\bpostscreen_non_smtp_command_action\b;<a href="postconf.5.html#postscreen_non_smtp_command_action">$&</a>;g;
+ s;\bpostscreen_non_smtp_command_ttl\b;<a href="postconf.5.html#postscreen_non_smtp_command_ttl">$&</a>;g;
+ s;\bpostscreen_pipelining_enable\b;<a href="postconf.5.html#postscreen_pipelining_enable">$&</a>;g;
+ s;\bpostscreen_pipelining_action\b;<a href="postconf.5.html#postscreen_pipelining_action">$&</a>;g;
+ s;\bpostscreen_pipelining_ttl\b;<a href="postconf.5.html#postscreen_pipelining_ttl">$&</a>;g;
+ s;\bpostscreen_watchdog_timeout\b;<a href="postconf.5.html#postscreen_watchdog_timeout">$&</a>;g;
+ s;\bpostscreen_access_list\b;<a href="postconf.5.html#postscreen_access_list">$&</a>;g;
+ s;\bpostscreen_whitelist_networks\b;<a href="postconf.5.html#postscreen_whitelist_networks">$&</a>;g;
+ s;\bpostscreen_black[-</bB>]*\n*[ <bB>]*list_networks\b;<a href="postconf.5.html#postscreen_blacklist_networks">$&</a>;g;
+ s;\bpostscreen_black[-</bB>]*\n*[ <bB>]*list_action\b;<a href="postconf.5.html#postscreen_blacklist_action">$&</a>;g;
+ s;\bpostscreen_client_connection_count_limit\b;<a href="postconf.5.html#postscreen_client_connection_count_limit">$&</a>;g;
+ s;\bpostscreen_tls_security_level\b;<a href="postconf.5.html#postscreen_tls_security_level">$&</a>;g;
+ s;\bpostscreen_enforce_tls\b;<a href="postconf.5.html#postscreen_enforce_tls">$&</a>;g;
+ s;\bpostscreen_use_tls\b;<a href="postconf.5.html#postscreen_use_tls">$&</a>;g;
+ s;\bpostscreen_discard_ehlo_keyword_address_maps\b;<a href="postconf.5.html#postscreen_discard_ehlo_keyword_address_maps">$&</a>;g;
+ s;\bpostscreen_discard_ehlo_keywords\b;<a href="postconf.5.html#postscreen_discard_ehlo_keywords">$&</a>;g;
+ s;\bpostscreen_expansion_filter\b;<a href="postconf.5.html#postscreen_expansion_filter">$&</a>;g;
+ s;\bpostscreen_reject_footer\b;<a href="postconf.5.html#postscreen_reject_footer">$&</a>;g;
+ s;\bpostscreen_reject_footer_maps\b;<a href="postconf.5.html#postscreen_reject_footer_maps">$&</a>;g;
+ s;\bpostscreen_command_filter\b;<a href="postconf.5.html#postscreen_command_filter">$&</a>;g;
+ s;\bpostscreen_whitelist_interfaces\b;<a href="postconf.5.html#postscreen_whitelist_interfaces">$&</a>;g;
+ s;\bpostscreen_upstream_proxy_protocol\b;<a href="postconf.5.html#postscreen_upstream_proxy_protocol">$&</a>;g;
+ s;\bpostscreen_upstream_proxy_timeout\b;<a href="postconf.5.html#postscreen_upstream_proxy_timeout">$&</a>;g;
+
+ s;\btlsproxy_watchdog_timeout\b;<a href="postconf.5.html#tlsproxy_watchdog_timeout">$&</a>;g;
+ s;\btlsproxy_enforce_tls\b;<a href="postconf.5.html#tlsproxy_enforce_tls">$&</a>;g;
+ s;\btlsproxy_tls_CAfile\b;<a href="postconf.5.html#tlsproxy_tls_CAfile">$&</a>;g;
+ s;\btlsproxy_tls_CApath\b;<a href="postconf.5.html#tlsproxy_tls_CApath">$&</a>;g;
+ s;\btlsproxy_tls_always_issue_session_ids\b;<a href="postconf.5.html#tlsproxy_tls_always_issue_session_ids">$&</a>;g;
+ s;\btlsproxy_tls_ask_ccert\b;<a href="postconf.5.html#tlsproxy_tls_ask_ccert">$&</a>;g;
+ s;\btlsproxy_tls_ccert_verifydepth\b;<a href="postconf.5.html#tlsproxy_tls_ccert_verifydepth">$&</a>;g;
+ s;\btlsproxy_tls_chain_files\b;<a href="postconf.5.html#tlsproxy_tls_chain_files">$&</a>;g;
+ s;\btlsproxy_tls_cert_file\b;<a href="postconf.5.html#tlsproxy_tls_cert_file">$&</a>;g;
+ s;\btlsproxy_tls_ciphers\b;<a href="postconf.5.html#tlsproxy_tls_ciphers">$&</a>;g;
+ s;\btlsproxy_tls_dcert_file\b;<a href="postconf.5.html#tlsproxy_tls_dcert_file">$&</a>;g;
+ s;\btlsproxy_tls_dh1024_param_file\b;<a href="postconf.5.html#tlsproxy_tls_dh1024_param_file">$&</a>;g;
+ s;\btlsproxy_tls_dh512_param_file\b;<a href="postconf.5.html#tlsproxy_tls_dh512_param_file">$&</a>;g;
+ s;\btlsproxy_tls_dkey_file\b;<a href="postconf.5.html#tlsproxy_tls_dkey_file">$&</a>;g;
+ s;\btlsproxy_tls_eccert_file\b;<a href="postconf.5.html#tlsproxy_tls_eccert_file">$&</a>;g;
+ s;\btlsproxy_tls_eckey_file\b;<a href="postconf.5.html#tlsproxy_tls_eckey_file">$&</a>;g;
+ s;\btlsproxy_tls_eecdh_grade\b;<a href="postconf.5.html#tlsproxy_tls_eecdh_grade">$&</a>;g;
+ s;\btlsproxy_tls_exclude_ciphers\b;<a href="postconf.5.html#tlsproxy_tls_exclude_ciphers">$&</a>;g;
+ s;\btlsproxy_tls_fingerprint_digest\b;<a href="postconf.5.html#tlsproxy_tls_fingerprint_digest">$&</a>;g;
+ s;\btlsproxy_tls_key_file\b;<a href="postconf.5.html#tlsproxy_tls_key_file">$&</a>;g;
+ s;\btlsproxy_tls_loglevel\b;<a href="postconf.5.html#tlsproxy_tls_loglevel">$&</a>;g;
+ s;\btlsproxy_tls_mandatory_ciphers\b;<a href="postconf.5.html#tlsproxy_tls_mandatory_ciphers">$&</a>;g;
+ s;\btlsproxy_tls_mandatory_exclude_ciphers\b;<a href="postconf.5.html#tlsproxy_tls_mandatory_exclude_ciphers">$&</a>;g;
+ s;\btlsproxy_tls_mandatory_protocols\b;<a href="postconf.5.html#tlsproxy_tls_mandatory_protocols">$&</a>;g;
+ s;\btlsproxy_tls_protocols\b;<a href="postconf.5.html#tlsproxy_tls_protocols">$&</a>;g;
+ s;\btlsproxy_tls_req_ccert\b;<a href="postconf.5.html#tlsproxy_tls_req_ccert">$&</a>;g;
+ s;\btlsproxy_tls_security_level\b;<a href="postconf.5.html#tlsproxy_tls_security_level">$&</a>;g;
+ s;\btlsproxy_use_tls\b;<a href="postconf.5.html#tlsproxy_use_tls">$&</a>;g;
+
+ s;\btlsproxy_client_CAfile\b;<a href="postconf.5.html#tlsproxy_client_CAfile">$&</a>;g;
+ s;\btlsproxy_client_CApath\b;<a href="postconf.5.html#tlsproxy_client_CApath">$&</a>;g;
+ s;\btlsproxy_client_chain_files\b;<a href="postconf.5.html#tlsproxy_client_chain_files">$&</a>;g;
+ s;\btlsproxy_client_cert_file\b;<a href="postconf.5.html#tlsproxy_client_cert_file">$&</a>;g;
+ s;\btlsproxy_client_dcert_file\b;<a href="postconf.5.html#tlsproxy_client_dcert_file">$&</a>;g;
+ s;\btlsproxy_client_dkey_file\b;<a href="postconf.5.html#tlsproxy_client_dkey_file">$&</a>;g;
+ s;\btlsproxy_client_eccert_file\b;<a href="postconf.5.html#tlsproxy_client_eccert_file">$&</a>;g;
+ s;\btlsproxy_client_eckey_file\b;<a href="postconf.5.html#tlsproxy_client_eckey_file">$&</a>;g;
+ s;\btlsproxy_client_fingerprint_digest\b;<a href="postconf.5.html#tlsproxy_client_fingerprint_digest">$&</a>;g;
+ s;\btlsproxy_client_key_file\b;<a href="postconf.5.html#tlsproxy_client_key_file">$&</a>;g;
+ s;\btlsproxy_client_loglevel\b;<a href="postconf.5.html#tlsproxy_client_loglevel">$&</a>;g;
+ s;\btlsproxy_client_loglevel_parameter\b;<a href="postconf.5.html#tlsproxy_client_loglevel_parameter">$&</a>;g;
+ s;\btlsproxy_client_scert_verifydepth\b;<a href="postconf.5.html#tlsproxy_client_scert_verifydepth">$&</a>;g;
+
+ s;\btlsproxy_client_security_level\b;<a href="postconf.5.html#tlsproxy_client_security_level">$&</a>;g;
+ s;\btlsproxy_client_per_site\b;<a href="postconf.5.html#tlsproxy_client_per_site">$&</a>;g;
+ s;\btlsproxy_client_policy_maps\b;<a href="postconf.5.html#tlsproxy_client_policy_maps">$&</a>;g;
+ s;\btlsproxy_client_use_tls\b;<a href="postconf.5.html#tlsproxy_client_use_tls">$&</a>;g;
+ s;\btlsproxy_client_enforce_tls\b;<a href="postconf.5.html#tlsproxy_client_enforce_tls">$&</a>;g;
+
+ # SMTPUTF8
+
+ s;\bsmtputf8_enable\b;<a href="postconf.5.html#smtputf8_enable">$&</a>;g;
+ s;\bstrict_smtputf8\b;<a href="postconf.5.html#strict_smtputf8">$&</a>;g;
+ s;\bsmtputf8_autodetect_classes\b;<a href="postconf.5.html#smtputf8_autodetect_classes">$&</a>;g;
+ s;\benable_idna2003_compatibility\b;<a href="postconf.5.html#enable_idna2003_compatibility">$&</a>;g;
+
+ # Internal logging.
+ s;\bmail[-</bB>]*\n*[ <bB>]*log_file\b;<a href="postconf.5.html#maillog_file">$&</a>;g;
+ s;\bmail[-</bB>]*\n*[ <bB>]*log_file_compressor\b;<a href="postconf.5.html#maillog_file_compressor">$&</a>;g;
+ s;\bmail[-</bB>]*\n*[ <bB>]*log_file_prefixes\b;<a href="postconf.5.html#maillog_file_prefixes">$&</a>;g;
+ s;\bmail[-</bB>]*\n*[ <bB>]*log_file_rotate_suffix\b;<a href="postconf.5.html#maillog_file_rotate_suffix">$&</a>;g;
+ s;\bpostlog_service_name\b;<a href="postconf.5.html#postlog_service_name">$&</a>;g;
+ s;\bpostlogd_watchdog_timeout\b;<a href="postconf.5.html#postlogd_watchdog_timeout">$&</a>;g;
+
+ # Service-defined parameters...
+
+ s;\bpolicy_time_limit\b;<a href="postconf.5.html#transport_time_limit">$&</a>;g;
+ s;\bgreylist_time_limit\b;<a href="postconf.5.html#transport_time_limit">$&</a>;g;
+
+ # Compatibility and migration
+
+ s;\bcompatibility_level\b;<a href="postconf.5.html#compatibility_level">$&</a>;g;
+
+ # Hyperlink URLs and RFC documents
+
+ s/(http:\/\/[^ ,"\(\)]*[^ ,"\(\):;!?.])/<a href="$1">$1<\/a>/;
+ s/(ftp:\/\/[^ ,"\(\)]*[^ ,"\(\):;!?.])/<a href="$1">$1<\/a>/;
+ s/\bRFC\s*([1-9]\d*)/<a href="http:\/\/tools.ietf.org\/html\/rfc$1">$&<\/a>/g;
+
+ # Split README/RFC/parameter/restriction hyperlinks that span line breaks
+
+ s/(<a href="[^"]*">)([-A-Za-z0-9_]*)\b([-<\/bB>]*\n *[<bB>]*)\b([-A-Za-z0-9_]*)(<\/a>)/$1$2$5$3$1$4$5/;
+
+ # Glue manual/parameter/restriction hyperlinks without line breaks.
+
+ s/(<a href="[^"]*">)([<bB>]*[-a-zA-Z0-9._]*[<bB>]*)<\/a>\1/$1$2/g;
+ # One more time:
+ s/(<a href="[^"]*">)([<bB>]*[-a-zA-Z0-9._]*[<bB>]*)<\/a>\1/$1$2/g;
+
+ # Hyperlink phrases not in headers.
+
+ if (/<\/*h\d>/) {
+ print;
+ $printit = 0;
+ next LINE;
+ }
+ s/canonical domains*/<a href="VIRTUAL_README.html#canonical">$&<\/a>/;
+ s/hosted domains*/<a href="VIRTUAL_README.html#canonical">$&<\/a>/;
+ #s/other domains*/<a href="VIRTUAL_README.html#canonical">&<\/a>/
+ s/virtual alias example/<a href="VIRTUAL_README.html#virtual_alias">$&<\/a>/;
+ s/virtual mailbox example/<a href="VIRTUAL_README.html#virtual_mailbox">$&<\/a>/;
+ s/local domains*/<a href="ADDRESS_CLASS_README.html#local_domain_class">$&<\/a>/;
+ s/virtual alias domains*/<a href="ADDRESS_CLASS_README.html#virtual_alias_class">$&<\/a>/;
+ s/virtual ALIAS domains*/<a href="ADDRESS_CLASS_README.html#virtual_alias_class">$&<\/a>/;
+ s/virtual mailbox domains*/<a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">$&<\/a>/;
+ s/virtual MAILBOX domains*/<a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">$&<\/a>/;
+ s/relay domains*/<a href="ADDRESS_CLASS_README.html#relay_domain_class">$&<\/a>/;
+ s/default domains*/<a href="ADDRESS_CLASS_README.html#default_domain_class">$&<\/a>/;
+ s/mydestination domains*/<a href="ADDRESS_CLASS_README.html#local_domain_class">$&<\/a>/;
+ s/\b"*maildrop"* *queues*\b/<a href="QSHAPE_README.html#maildrop_queue">$&<\/a>/;
+ s/\b("*maildrop"*),/<a href="QSHAPE_README.html#maildrop_queue">$1<\/a>,/;
+ s/\b("*incoming"*) and\b/<a href="QSHAPE_README.html#incoming_queue">$1<\/a> and/;
+ s/\b("*incoming"*) or\b/<a href="QSHAPE_README.html#incoming_queue">$1<\/a> or/;
+ s/\b"*incoming"* *queues*\b/<a href="QSHAPE_README.html#incoming_queue">$&<\/a>/;
+ s/<b> *incoming *<\/b> *queues*\b/<a href="QSHAPE_README.html#incoming_queue">$&<\/a>/;
+ s/\b"*active"* *queues*\b/<a href="QSHAPE_README.html#active_queue">$&<\/a>/;
+ s/\b"*deferred"* *queues*\b/<a href="QSHAPE_README.html#deferred_queue">$&<\/a>/;
+ s/\b"*hold"* *queues*\b/<a href="QSHAPE_README.html#hold_queue">$&<\/a>/;
+ s/\b("*hold"*),/<a href="QSHAPE_README.html#hold_queue">$1<\/a>,/;
+ s/\b(postfix *tls)\b/<a href="postfix-tls.1.html">$1<\/a>/;
+
+ # Hyperlink map types.
+
+ s/\b(btree):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(cdb):/<a href="CDB_README.html">$1<\/a>:/g;
+ s/\b(cidr):/<a href="cidr_table.5.html">$1<\/a>:/g;
+ s/\b(dbm):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(environ):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(fail):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(hash):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(internal):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(ldap):/<a href="ldap_table.5.html">$1<\/a>:/g;
+ s/\b(lmdb):/<a href="lmdb_table.5.html">$1<\/a>:/g;
+ s/\b(memcache):/<a href="memcache_table.5.html">$1<\/a>:/g;
+ s/\b(mysql):/<a href="mysql_table.5.html">$1<\/a>:/g;
+ s/\b(nisplus):/<a href="nisplus_table.5.html">$1<\/a>:/g;
+ s/\b(pcre):/<a href="pcre_table.5.html">$1<\/a>:/g;
+ s/\b(pgsql):/<a href="pgsql_table.5.html">$1<\/a>:/g;
+ s;\b(pipe[-</bB>]*\n*[ <bB>]*map):;<a href="DATABASE_README.html#types">$1<\/a>:;g;
+ s/\b(proxy):/<a href="proxymap.8.html">$1<\/a>:/g;
+ s/\b(randmap):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(regexp):/<a href="regexp_table.5.html">$1<\/a>:/g;
+ s/\b(sdbm):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(socketmap):/<a href="socketmap_table.html">$1<\/a>:/g;
+ s/\b(sqlite):/<a href="sqlite_table.5.html">$1<\/a>:/g;
+ s/\b(static):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(tcp):/<a href="tcp_table.5.html">$1<\/a>:/g;
+ s/\b(texthash):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ #s/\b(unix):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(unionmap):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+ s/\b(inline):/<a href="DATABASE_README.html#types">$1<\/a>:/g;
+
+ # Do nice links for smtp:host:port etc.
+
+ s/\b(error):/<a href="error.8.html">$1<\/a>:/g;
+ s/\b(smtp):/<a href="smtp.8.html">$1<\/a>:/g;
+ s/\b(lmtp):/<a href="lmtp.8.html">$1<\/a>:/g;
+ s/\b(local):/<a href="local.8.html">$1<\/a>:/g;
+ s/([^\/])\b(virtual):/$1<a href="virtual.8.html">$2<\/a>:/g;
+
+ # Database library dependencies.
+
+ s/\b(AUXLIBS_)([A-Z]+)\b/<a href="$2_README.html">$1$2<\/a>/g;
+}
+continue {
+ if ($printit)
+ { print; }
+ else
+ { $printit++ unless $nflag; }
+}
diff --git a/mantools/postlink.sed b/mantools/postlink.sed
new file mode 100755
index 0000000..c6bef2e
--- /dev/null
+++ b/mantools/postlink.sed
@@ -0,0 +1,603 @@
+#!/bin/sh
+
+# Crude script to make formatted Postfix man pages clickable.
+
+# If you use a sed(1) command that does not understand POSIX,
+# do s/\[\[:<:\]\]/\\</g; s/\[\[:>:\]\]/\\>/g on this script.
+
+exec sed '
+
+ # Glue together words that were broken across line breaks.
+
+ :again
+ /-[</bB>]*$/{
+ N
+ b again
+ }
+
+ /<[Aa] *[HhNn][RrAa][EeMm][FfEe] *=/{
+ p
+ d
+ }
+ /<\/[Aa]>/{
+ p
+ d
+ }
+ /"[Hh][Tt][Tt][Pp]:/{
+ p
+ d
+ }
+ /<[Tt][Ii][Tt][Ll][Ee]>/{
+ p
+ d
+ }
+
+ # Following block was generated with "makepostconflinks"
+ # but hyphenation was added manually.
+
+ /<\/*[Hh][0-9]*>/{
+ p
+ d
+ }
+ /<[Aa] [Nm][Aa][Mm][Ee]=/{
+ p
+ d
+ }
+ /<[D][T]>/{
+ p
+ d
+ }
+ s;[[:<:]]autho[-</bB>]*\n*[ <bB>]*rized_verp_clients[[:>:]];<a href="postconf.5.html#authorized_verp_clients">&</a>;g
+ s;[[:<:]]debugger_command[[:>:]];<a href="postconf.5.html#debugger_command">&</a>;g
+ s;[[:<:]]2bounce_notice_recipi[-</bB>]*\n*[ <bB>]*ent[[:>:]];<a href="postconf.5.html#2bounce_notice_recipient">&</a>;g
+ s;[[:<:]]access_map_reject_code[[:>:]];<a href="postconf.5.html#access_map_reject_code">&</a>;g
+ s;[[:<:]]address_verify_default_transport[[:>:]];<a href="postconf.5.html#address_verify_default_transport">&</a>;g
+ s;[[:<:]]address_verify_local_transport[[:>:]];<a href="postconf.5.html#address_verify_local_transport">&</a>;g
+ s;[[:<:]]address_verify_map[[:>:]];<a href="postconf.5.html#address_verify_map">&</a>;g
+ s;[[:<:]]address_verify_negative_cache[[:>:]];<a href="postconf.5.html#address_verify_negative_cache">&</a>;g
+ s;[[:<:]]address_verify_negative_expire_time[[:>:]];<a href="postconf.5.html#address_verify_negative_expire_time">&</a>;g
+ s;[[:<:]]address_verify_negative_refresh_time[[:>:]];<a href="postconf.5.html#address_verify_negative_refresh_time">&</a>;g
+ s;[[:<:]]address_verify_poll_count[[:>:]];<a href="postconf.5.html#address_verify_poll_count">&</a>;g
+ s;[[:<:]]address_verify_poll_delay[[:>:]];<a href="postconf.5.html#address_verify_poll_delay">&</a>;g
+ s;[[:<:]]address_verify_positive_expire_time[[:>:]];<a href="postconf.5.html#address_verify_positive_expire_time">&</a>;g
+ s;[[:<:]]address_verify_positive_refresh_time[[:>:]];<a href="postconf.5.html#address_verify_positive_refresh_time">&</a>;g
+ s;[[:<:]]address_verify_relay_transport[[:>:]];<a href="postconf.5.html#address_verify_relay_transport">&</a>;g
+ s;[[:<:]]address_verify_relayhost[[:>:]];<a href="postconf.5.html#address_verify_relayhost">&</a>;g
+ s;[[:<:]]address_verify_sender[[:>:]];<a href="postconf.5.html#address_verify_sender">&</a>;g
+ s;[[:<:]]address_verify_service_name[[:>:]];<a href="postconf.5.html#address_verify_service_name">&</a>;g
+ s;[[:<:]]address_verify_transport_maps[[:>:]];<a href="postconf.5.html#address_verify_transport_maps">&</a>;g
+ s;[[:<:]]address_verify_virtual_transport[[:>:]];<a href="postconf.5.html#address_verify_virtual_transport">&</a>;g
+ s;[[:<:]]alias_database[[:>:]];<a href="postconf.5.html#alias_database">&</a>;g
+ s;[[:<:]]alias_maps[[:>:]];<a href="postconf.5.html#alias_maps">&</a>;g
+ s;[[:<:]]allow_mail_to_commands[[:>:]];<a href="postconf.5.html#allow_mail_to_commands">&</a>;g
+ s;[[:<:]]allow_mail_to_files[[:>:]];<a href="postconf.5.html#allow_mail_to_files">&</a>;g
+ s;[[:<:]]allow_min_user[[:>:]];<a href="postconf.5.html#allow_min_user">&</a>;g
+ s;[[:<:]]allow_percent_hack[[:>:]];<a href="postconf.5.html#allow_percent_hack">&</a>;g
+ s;[[:<:]]allow_untrusted_routing[[:>:]];<a href="postconf.5.html#allow_untrusted_routing">&</a>;g
+ s;[[:<:]]alternate_config_directories[[:>:]];<a href="postconf.5.html#alternate_config_directories">&</a>;g
+ s;[[:<:]]always_bcc[[:>:]];<a href="postconf.5.html#always_bcc">&</a>;g
+ s;[[:<:]]anvil_rate_time_unit[[:>:]];<a href="postconf.5.html#anvil_rate_time_unit">&</a>;g
+ s;[[:<:]]append_at_myorigin[[:>:]];<a href="postconf.5.html#append_at_myorigin">&</a>;g
+ s;[[:<:]]append_dot_mydomain[[:>:]];<a href="postconf.5.html#append_dot_mydomain">&</a>;g
+ s;[[:<:]]application_event_drain_time[[:>:]];<a href="postconf.5.html#application_event_drain_time">&</a>;g
+ s;[[:<:]]backwards_bounce_logfile_compatibility[[:>:]];<a href="postconf.5.html#backwards_bounce_logfile_compatibility">&</a>;g
+ s;[[:<:]]berkeley_db_create_buffer_size[[:>:]];<a href="postconf.5.html#berkeley_db_create_buffer_size">&</a>;g
+ s;[[:<:]]berkeley_db_read_buffer_size[[:>:]];<a href="postconf.5.html#berkeley_db_read_buffer_size">&</a>;g
+ s;[[:<:]]best_mx_transport[[:>:]];<a href="postconf.5.html#best_mx_transport">&</a>;g
+ s;[[:<:]]biff[[:>:]];<a href="postconf.5.html#biff">&</a>;g
+ s;[[:<:]]body_checks[[:>:]];<a href="postconf.5.html#body_checks">&</a>;g
+ s;[[:<:]]body_checks_size_limit[[:>:]];<a href="postconf.5.html#body_checks_size_limit">&</a>;g
+ s;[[:<:]]bounce_notice_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#bounce_notice_recipient">&</a>;g
+ s;[[:<:]]bounce_queue_lifetime[[:>:]];<a href="postconf.5.html#bounce_queue_lifetime">&</a>;g
+ s;[[:<:]]bounce_service_name[[:>:]];<a href="postconf.5.html#bounce_service_name">&</a>;g
+ s;[[:<:]]bounce_size_limit[[:>:]];<a href="postconf.5.html#bounce_size_limit">&</a>;g
+ s;[[:<:]]broken_sasl_auth_clients[[:>:]];<a href="postconf.5.html#broken_sasl_auth_clients">&</a>;g
+ s;[[:<:]]canonical_maps[[:>:]];<a href="postconf.5.html#canonical_maps">&</a>;g
+ s;[[:<:]]cleanup_service_name[[:>:]];<a href="postconf.5.html#cleanup_service_name">&</a>;g
+ s;[[:<:]]anvil_status_update_time[[:>:]];<a href="postconf.5.html#anvil_status_update_time">&</a>;g
+ s;[[:<:]]command_directory[[:>:]];<a href="postconf.5.html#command_directory">&</a>;g
+ s;[[:<:]]command_expan[-</bB>]*\n* *[<bB>]*sion_filter[[:>:]];<a href="postconf.5.html#command_expansion_filter">&</a>;g
+ s;[[:<:]]command_time_limit[[:>:]];<a href="postconf.5.html#command_time_limit">&</a>;g
+ s;[[:<:]]config_direc[-</bB>]*\n*[ <bB>]*tory[[:>:]];<a href="postconf.5.html#config_directory">&</a>;g
+ s;[[:<:]]con[-</bB>]*\n*[ <bB>]*tent_filter[[:>:]];<a href="postconf.5.html#content_filter">&</a>;g
+ s;[[:<:]]daemon_directory[[:>:]];<a href="postconf.5.html#daemon_directory">&</a>;g
+ s;[[:<:]]daemon_timeout[[:>:]];<a href="postconf.5.html#daemon_timeout">&</a>;g
+ s;[[:<:]]debug_peer_level[[:>:]];<a href="postconf.5.html#debug_peer_level">&</a>;g
+ s;[[:<:]]debug_peer_list[[:>:]];<a href="postconf.5.html#debug_peer_list">&</a>;g
+ s;[[:<:]]default_database_type[[:>:]];<a href="postconf.5.html#default_database_type">&</a>;g
+ s;[[:<:]]default_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_cost[[:>:]];<a href="postconf.5.html#default_delivery_slot_cost">&</a>;g
+ s;[[:<:]]default_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_discount[[:>:]];<a href="postconf.5.html#default_delivery_slot_discount">&</a>;g
+ s;[[:<:]]default_deliv[-</Bb>]*\n* *[<Bb>]*ery_slot_loan[[:>:]];<a href="postconf.5.html#default_delivery_slot_loan">&</a>;g
+ s;[[:<:]]default_destina[-</Bb>]*\n* *[<Bb>]*tion_concurrency_limit[[:>:]];<a href="postconf.5.html#default_destination_concurrency_limit">&</a>;g
+ s;[[:<:]]default_destina[-</Bb>]*\n* *[<Bb>]*tion_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#default_destination_recipient_limit">&</a>;g
+ s;[[:<:]]default_extra_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#default_extra_recipient_limit">&</a>;g
+ s;[[:<:]]default_minimum_deliv[-</Bb>]*\n* *[<Bb>]*ery_slots[[:>:]];<a href="postconf.5.html#default_minimum_delivery_slots">&</a>;g
+ s;[[:<:]]default_privs[[:>:]];<a href="postconf.5.html#default_privs">&</a>;g
+ s;[[:<:]]default_process_limit[[:>:]];<a href="postconf.5.html#default_process_limit">&</a>;g
+ s;[[:<:]]default_rbl_reply[[:>:]];<a href="postconf.5.html#default_rbl_reply">&</a>;g
+ s;[[:<:]]default_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#default_recipient_limit">&</a>;g
+ s;[[:<:]]default_transport[[:>:]];<a href="postconf.5.html#default_transport">&</a>;g
+ s;[[:<:]]default_verp_delimiters[[:>:]];<a href="postconf.5.html#default_verp_delimiters">&</a>;g
+ s;[[:<:]]defer_code[[:>:]];<a href="postconf.5.html#defer_code">&</a>;g
+ s;[[:<:]]defer_service_name[[:>:]];<a href="postconf.5.html#defer_service_name">&</a>;g
+ s;[[:<:]]defer_transports[[:>:]];<a href="postconf.5.html#defer_transports">&</a>;g
+ s;[[:<:]]delay_notice_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#delay_notice_recipient">&</a>;g
+ s;[[:<:]]delay_warning_time[[:>:]];<a href="postconf.5.html#delay_warning_time">&</a>;g
+ s;[[:<:]]deliver_lock_attempts[[:>:]];<a href="postconf.5.html#deliver_lock_attempts">&</a>;g
+ s;[[:<:]]deliver_lock_delay[[:>:]];<a href="postconf.5.html#deliver_lock_delay">&</a>;g
+ s;[[:<:]]disable_dns_lookups[[:>:]];<a href="postconf.5.html#disable_dns_lookups">&</a>;g
+ s;[[:<:]]disable_mime_input_processing[[:>:]];<a href="postconf.5.html#disable_mime_input_processing">&</a>;g
+ s;[[:<:]]disable_mime_output_conversion[[:>:]];<a href="postconf.5.html#disable_mime_output_conversion">&</a>;g
+ s;[[:<:]]disable_verp_bounces[[:>:]];<a href="postconf.5.html#disable_verp_bounces">&</a>;g
+ s;[[:<:]]disable_vrfy_command[[:>:]];<a href="postconf.5.html#disable_vrfy_command">&</a>;g
+ s;[[:<:]]dont_remove[[:>:]];<a href="postconf.5.html#dont_remove">&</a>;g
+ s;[[:<:]]double_bounce_sender[[:>:]];<a href="postconf.5.html#double_bounce_sender">&</a>;g
+ s;[[:<:]]dupli[-</bB>]*\n* *[<bB>]*cate_filter_limit[[:>:]];<a href="postconf.5.html#duplicate_filter_limit">&</a>;g
+ s;[[:<:]]empty_address_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#empty_address_recipient">&</a>;g
+ s;[[:<:]]enable_original_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#enable_original_recipient">&</a>;g
+ s;[[:<:]]error_notice_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#error_notice_recipient">&</a>;g
+ s;[[:<:]]error_service_name[[:>:]];<a href="postconf.5.html#error_service_name">&</a>;g
+ s;[[:<:]]expand_owner_alias[[:>:]];<a href="postconf.5.html#expand_owner_alias">&</a>;g
+ s;[[:<:]]export_environment[[:>:]];<a href="postconf.5.html#export_environment">&</a>;g
+ s;[[:<:]]fallback_relay[[:>:]];<a href="postconf.5.html#fallback_relay">&</a>;g
+ s;[[:<:]]fallback_transport[[:>:]];<a href="postconf.5.html#fallback_transport">&</a>;g
+ s;[[:<:]]fast_flush_domains[[:>:]];<a href="postconf.5.html#fast_flush_domains">&</a>;g
+ s;[[:<:]]fast_flush_purge_time[[:>:]];<a href="postconf.5.html#fast_flush_purge_time">&</a>;g
+ s;[[:<:]]fast_flush_refresh_time[[:>:]];<a href="postconf.5.html#fast_flush_refresh_time">&</a>;g
+ s;[[:<:]]fault_injection_code[[:>:]];<a href="postconf.5.html#fault_injection_code">&</a>;g
+ s;[[:<:]]flush_service_name[[:>:]];<a href="postconf.5.html#flush_service_name">&</a>;g
+ s;[[:<:]]fork_attempts[[:>:]];<a href="postconf.5.html#fork_attempts">&</a>;g
+ s;[[:<:]]fork_delay[[:>:]];<a href="postconf.5.html#fork_delay">&</a>;g
+ s;[[:<:]]forward_expan[-</bB>]*\n* *[<bB>]*sion_filter[[:>:]];<a href="postconf.5.html#forward_expansion_filter">&</a>;g
+ s;[[:<:]]for[-</bB>]*\n* *[<bB>]*ward_path[[:>:]];<a href="postconf.5.html#forward_path">&</a>;g
+ s;[[:<:]]hash_queue_depth[[:>:]];<a href="postconf.5.html#hash_queue_depth">&</a>;g
+ s;[[:<:]]hash_queue_names[[:>:]];<a href="postconf.5.html#hash_queue_names">&</a>;g
+ s;[[:<:]]header_address_token_limit[[:>:]];<a href="postconf.5.html#header_address_token_limit">&</a>;g
+ s;[[:<:]]header_checks[[:>:]];<a href="postconf.5.html#header_checks">&</a>;g
+ s;[[:<:]]header_size_limit[[:>:]];<a href="postconf.5.html#header_size_limit">&</a>;g
+ s;[[:<:]]helpful_warnings[[:>:]];<a href="postconf.5.html#helpful_warnings">&</a>;g
+ s;[[:<:]]home_mailbox[[:>:]];<a href="postconf.5.html#home_mailbox">&</a>;g
+ s;[[:<:]]hopcount_limit[[:>:]];<a href="postconf.5.html#hopcount_limit">&</a>;g
+ s;[[:<:]]html_direc[-</bB>]*\n*[ <bB>]*tory[[:>:]];<a href="postconf.5.html#html_directory">&</a>;g
+ s;[[:<:]]ignore_mx_lookup_error[[:>:]];<a href="postconf.5.html#ignore_mx_lookup_error">&</a>;g
+ s;[[:<:]]import_environment[[:>:]];<a href="postconf.5.html#import_environment">&</a>;g
+ s;[[:<:]]in_flow_delay[[:>:]];<a href="postconf.5.html#in_flow_delay">&</a>;g
+ s;[[:<:]]inet_interfaces[[:>:]];<a href="postconf.5.html#inet_interfaces">&</a>;g
+ s;[[:<:]]initial_destination_concurrency[[:>:]];<a href="postconf.5.html#initial_destination_concurrency">&</a>;g
+ s;[[:<:]]invalid_hostname_reject_code[[:>:]];<a href="postconf.5.html#invalid_hostname_reject_code">&</a>;g
+ s;[[:<:]]ipc_idle[[:>:]];<a href="postconf.5.html#ipc_idle">&</a>;g
+ s;[[:<:]]ipc_timeout[[:>:]];<a href="postconf.5.html#ipc_timeout">&</a>;g
+ s;[[:<:]]ipc_ttl[[:>:]];<a href="postconf.5.html#ipc_ttl">&</a>;g
+ s;[[:<:]]line_length_limit[[:>:]];<a href="postconf.5.html#line_length_limit">&</a>;g
+ s;[[:<:]]lmtp_cache_connection[[:>:]];<a href="postconf.5.html#lmtp_cache_connection">&</a>;g
+ s;[[:<:]]lmtp_connect_timeout[[:>:]];<a href="postconf.5.html#lmtp_connect_timeout">&</a>;g
+ s;[[:<:]]lmtp_data_done_timeout[[:>:]];<a href="postconf.5.html#lmtp_data_done_timeout">&</a>;g
+ s;[[:<:]]lmtp_data_init_timeout[[:>:]];<a href="postconf.5.html#lmtp_data_init_timeout">&</a>;g
+ s;[[:<:]]lmtp_data_xfer_timeout[[:>:]];<a href="postconf.5.html#lmtp_data_xfer_timeout">&</a>;g
+ s;[[:<:]]lmtp_lhlo_timeout[[:>:]];<a href="postconf.5.html#lmtp_lhlo_timeout">&</a>;g
+ s;[[:<:]]lmtp_mail_timeout[[:>:]];<a href="postconf.5.html#lmtp_mail_timeout">&</a>;g
+ s;[[:<:]]lmtp_quit_timeout[[:>:]];<a href="postconf.5.html#lmtp_quit_timeout">&</a>;g
+ s;[[:<:]]lmtp_rcpt_timeout[[:>:]];<a href="postconf.5.html#lmtp_rcpt_timeout">&</a>;g
+ s;[[:<:]]lmtp_rset_timeout[[:>:]];<a href="postconf.5.html#lmtp_rset_timeout">&</a>;g
+ s;[[:<:]]lmtp_sasl_auth_enable[[:>:]];<a href="postconf.5.html#lmtp_sasl_auth_enable">&</a>;g
+ s;[[:<:]]lmtp_sasl_password_maps[[:>:]];<a href="postconf.5.html#lmtp_sasl_password_maps">&</a>;g
+ s;[[:<:]]lmtp_sasl_security_options[[:>:]];<a href="postconf.5.html#lmtp_sasl_security_options">&</a>;g
+ s;[[:<:]]lmtp_send_xforward_command[[:>:]];<a href="postconf.5.html#lmtp_send_xforward_command">&</a>;g
+ s;[[:<:]]lmtp_skip_quit_response[[:>:]];<a href="postconf.5.html#lmtp_skip_quit_response">&</a>;g
+ s;[[:<:]]lmtp_tcp_port[[:>:]];<a href="postconf.5.html#lmtp_tcp_port">&</a>;g
+ s;[[:<:]]lmtp_xforward_timeout[[:>:]];<a href="postconf.5.html#lmtp_xforward_timeout">&</a>;g
+ s;[[:<:]]local_command_shell[[:>:]];<a href="postconf.5.html#local_command_shell">&</a>;g
+ s;[[:<:]]local_destination_concurrency_limit[[:>:]];<a href="postconf.5.html#local_destination_concurrency_limit">&</a>;g
+ s;[[:<:]]local_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#local_destination_recipient_limit">&</a>;g
+ s;[[:<:]]local_recip[-</bB>]*\n* *[<bB>]*ient_maps[[:>:]];<a href="postconf.5.html#local_recipient_maps">&</a>;g
+ s;[[:<:]]local_transport[[:>:]];<a href="postconf.5.html#local_transport">&</a>;g
+ s;[[:<:]]luser_relay[[:>:]];<a href="postconf.5.html#luser_relay">&</a>;g
+ s;[[:<:]]mail_name[[:>:]];<a href="postconf.5.html#mail_name">&</a>;g
+ s;[[:<:]]mail_owner[[:>:]];<a href="postconf.5.html#mail_owner">&</a>;g
+ s;[[:<:]]mail_release_date[[:>:]];<a href="postconf.5.html#mail_release_date">&</a>;g
+ s;[[:<:]]mail_spool_direc[-</bB>]*\n* *[<bB>]*tory[[:>:]];<a href="postconf.5.html#mail_spool_directory">&</a>;g
+ s;[[:<:]]mail_version[[:>:]];<a href="postconf.5.html#mail_version">&</a>;g
+ s;[[:<:]]mail[-</bB>]*\n* *[<bB>]*box_command[[:>:]];<a href="postconf.5.html#mailbox_command">&</a>;g
+ s;[[:<:]]mail[-</bB>]*\n* *[<bB>]*box_command_maps[[:>:]];<a href="postconf.5.html#mailbox_command_maps">&</a>;g
+ s;[[:<:]]mail[-</bB>]*\n* *[<bB>]*box_deliv[-</Bb>]*\n* *[<Bb>]*ery_lock[[:>:]];<a href="postconf.5.html#mailbox_delivery_lock">&</a>;g
+ s;[[:<:]]mail[-</bB>]*\n* *[<bB>]*box_size_limit[[:>:]];<a href="postconf.5.html#mailbox_size_limit">&</a>;g
+ s;[[:<:]]mail[-</bB>]*\n* *[<bB>]*box_transport[[:>:]];<a href="postconf.5.html#mailbox_transport">&</a>;g
+ s;[[:<:]]mailq_path[[:>:]];<a href="postconf.5.html#mailq_path">&</a>;g
+ s;[[:<:]]manpage_directory[[:>:]];<a href="postconf.5.html#manpage_directory">&</a>;g
+ s;[[:<:]]maps_rbl_domains[[:>:]];<a href="postconf.5.html#maps_rbl_domains">&</a>;g
+ s;[[:<:]]maps_rbl_reject_code[[:>:]];<a href="postconf.5.html#maps_rbl_reject_code">&</a>;g
+ s;[[:<:]]masquerade_classes[[:>:]];<a href="postconf.5.html#masquerade_classes">&</a>;g
+ s;[[:<:]]masquerade_domains[[:>:]];<a href="postconf.5.html#masquerade_domains">&</a>;g
+ s;[[:<:]]masquerade_exceptions[[:>:]];<a href="postconf.5.html#masquerade_exceptions">&</a>;g
+ s;[[:<:]]max_idle[[:>:]];<a href="postconf.5.html#max_idle">&</a>;g
+ s;[[:<:]]max_use[[:>:]];<a href="postconf.5.html#max_use">&</a>;g
+ s;[[:<:]]maxi[-</bB>]*\n*[ <bB>]*mal_backoff_time[[:>:]];<a href="postconf.5.html#maximal_backoff_time">&</a>;g
+ s;[[:<:]]maxi[-</bB>]*\n*[ <bB>]*mal_queue_lifetime[[:>:]];<a href="postconf.5.html#maximal_queue_lifetime">&</a>;g
+ s;[[:<:]]message_size_limit[[:>:]];<a href="postconf.5.html#message_size_limit">&</a>;g
+ s;[[:<:]]mime_boundary_length_limit[[:>:]];<a href="postconf.5.html#mime_boundary_length_limit">&</a>;g
+ s;[[:<:]]mime_header_checks[[:>:]];<a href="postconf.5.html#mime_header_checks">&</a>;g
+ s;[[:<:]]mime_nesting_limit[[:>:]];<a href="postconf.5.html#mime_nesting_limit">&</a>;g
+ s;[[:<:]]minimal_backoff_time[[:>:]];<a href="postconf.5.html#minimal_backoff_time">&</a>;g
+ s;[[:<:]]multi_recip[-</bB>]*\n* *[<bB>]*ient_bounce_reject_code[[:>:]];<a href="postconf.5.html#multi_recipient_bounce_reject_code">&</a>;g
+ s;[[:<:]]mydes[-</bB>]*\n*[ <bB>]*tina[-</bB>]*\n*[ <bB>]*tion[[:>:]];<a href="postconf.5.html#mydestination">&</a>;g
+ s;[[:<:]]mydomain[[:>:]];<a href="postconf.5.html#mydomain">&</a>;g
+ s;[[:<:]]myhostname[[:>:]];<a href="postconf.5.html#myhostname">&</a>;g
+ s;[[:<:]]mynetworks[[:>:]];<a href="postconf.5.html#mynetworks">&</a>;g
+ s;[[:<:]]mynetworks_style[[:>:]];<a href="postconf.5.html#mynetworks_style">&</a>;g
+ s;[[:<:]]myorigin[[:>:]];<a href="postconf.5.html#myorigin">&</a>;g
+ s;[[:<:]]nested_header_checks[[:>:]];<a href="postconf.5.html#nested_header_checks">&</a>;g
+ s;[[:<:]]newaliases_path[[:>:]];<a href="postconf.5.html#newaliases_path">&</a>;g
+ s;[[:<:]]non_fqdn_reject_code[[:>:]];<a href="postconf.5.html#non_fqdn_reject_code">&</a>;g
+ s;[[:<:]]notify_classes[[:>:]];<a href="postconf.5.html#notify_classes">&</a>;g
+ s;[[:<:]]owner_request_special[[:>:]];<a href="postconf.5.html#owner_request_special">&</a>;g
+ s;[[:<:]]parent_domain_matches_subdomains[[:>:]];<a href="postconf.5.html#parent_domain_matches_subdomains">&</a>;g
+ s;[[:<:]]permit_mx_backup_networks[[:>:]];<a href="postconf.5.html#permit_mx_backup_networks">&</a>;g
+ s;[[:<:]]pickup_service_name[[:>:]];<a href="postconf.5.html#pickup_service_name">&</a>;g
+ s;[[:<:]]prepend_delivered_header[[:>:]];<a href="postconf.5.html#prepend_delivered_header">&</a>;g
+ s;[[:<:]]process_id[[:>:]];<a href="postconf.5.html#process_id">&</a>;g
+ s;[[:<:]]process_id_directory[[:>:]];<a href="postconf.5.html#process_id_directory">&</a>;g
+ s;[[:<:]]process_name[[:>:]];<a href="postconf.5.html#process_name">&</a>;g
+ s;[[:<:]]propagate_unmatched_extensions[[:>:]];<a href="postconf.5.html#propagate_unmatched_extensions">&</a>;g
+ s;[[:<:]]proxy_interfaces[[:>:]];<a href="postconf.5.html#proxy_interfaces">&</a>;g
+ s;[[:<:]]proxy_read_maps[[:>:]];<a href="postconf.5.html#proxy_read_maps">&</a>;g
+ s;[[:<:]]qmgr_clog_warn_time[[:>:]];<a href="postconf.5.html#qmgr_clog_warn_time">&</a>;g
+ s;[[:<:]]qmgr_fudge_factor[[:>:]];<a href="postconf.5.html#qmgr_fudge_factor">&</a>;g
+ s;[[:<:]]qmgr_message_active_limit[[:>:]];<a href="postconf.5.html#qmgr_message_active_limit">&</a>;g
+ s;[[:<:]]qmgr_message_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#qmgr_message_recipient_limit">&</a>;g
+ s;[[:<:]]qmgr_message_recip[-</bB>]*\n* *[<bB>]*ient_minimum[[:>:]];<a href="postconf.5.html#qmgr_message_recipient_minimum">&</a>;g
+ s;[[:<:]]qmqpd_authorized_clients[[:>:]];<a href="postconf.5.html#qmqpd_authorized_clients">&</a>;g
+ s;[[:<:]]qmqpd_error_delay[[:>:]];<a href="postconf.5.html#qmqpd_error_delay">&</a>;g
+ s;[[:<:]]qmqpd_timeout[[:>:]];<a href="postconf.5.html#qmqpd_timeout">&</a>;g
+ s;[[:<:]]queue_directory[[:>:]];<a href="postconf.5.html#queue_directory">&</a>;g
+ s;[[:<:]]queue_file_attribute_count_limit[[:>:]];<a href="postconf.5.html#queue_file_attribute_count_limit">&</a>;g
+ s;[[:<:]]queue_minfree[[:>:]];<a href="postconf.5.html#queue_minfree">&</a>;g
+ s;[[:<:]]queue_run_delay[[:>:]];<a href="postconf.5.html#queue_run_delay">&</a>;g
+ s;[[:<:]]queue_service_name[[:>:]];<a href="postconf.5.html#queue_service_name">&</a>;g
+ s;[[:<:]]rbl_reply_maps[[:>:]];<a href="postconf.5.html#rbl_reply_maps">&</a>;g
+ s;[[:<:]]readme_directory[[:>:]];<a href="postconf.5.html#readme_directory">&</a>;g
+ s;[[:<:]]receive_override_options[[:>:]];<a href="postconf.5.html#receive_override_options">&</a>;g
+ s;[[:<:]]no_unknown_recip[-</bB>]*\n* *[<bB>]*ient_checks[[:>:]];<a href="postconf.5.html#no_unknown_recipient_checks">&</a>;g
+ s;[[:<:]]no_address_mappings[[:>:]];<a href="postconf.5.html#no_address_mappings">&</a>;g
+ s;[[:<:]]no_header_body_checks[[:>:]];<a href="postconf.5.html#no_header_body_checks">&</a>;g
+ s;[[:<:]]recip[-</bB>]*\n* *[<bB>]*ient_bcc_maps[[:>:]];<a href="postconf.5.html#recipient_bcc_maps">&</a>;g
+ s;[[:<:]]recip[-</bB>]*\n* *[<bB>]*ient_canonical_maps[[:>:]];<a href="postconf.5.html#recipient_canonical_maps">&</a>;g
+ s;[[:<:]]recip[-</bB>]*\n* *[<bB>]*ient_delim[-</bB>]*\n* *[<bB>]*iter[[:>:]];<a href="postconf.5.html#recipient_delimiter">&<\/a>;g
+ s;[[:<:]]reject_code[[:>:]];<a href="postconf.5.html#reject_code">&</a>;g
+ s;[[:<:]]relay_domains[[:>:]];<a href="postconf.5.html#relay_domains">&</a>;g
+ s;[[:<:]]relay_domains_reject_code[[:>:]];<a href="postconf.5.html#relay_domains_reject_code">&</a>;g
+ s;[[:<:]]relay_recipi[-</bB>]*\n*[ <bB>]*ent_maps[[:>:]];<a href="postconf.5.html#relay_recipient_maps">&</a>;g
+ s;[[:<:]]relay_transport[[:>:]];<a href="postconf.5.html#relay_transport">&</a>;g
+ s;[[:<:]]relayhost[[:>:]];<a href="postconf.5.html#relayhost">&</a>;g
+ s;[[:<:]]relocated_maps[[:>:]];<a href="postconf.5.html#relocated_maps">&</a>;g
+ s;[[:<:]]require_home_directory[[:>:]];<a href="postconf.5.html#require_home_directory">&</a>;g
+ s;[[:<:]]resolve_dequoted_address[[:>:]];<a href="postconf.5.html#resolve_dequoted_address">&</a>;g
+ s;[[:<:]]rewrite_service_name[[:>:]];<a href="postconf.5.html#rewrite_service_name">&</a>;g
+ s;[[:<:]]sample_directory[[:>:]];<a href="postconf.5.html#sample_directory">&</a>;g
+ s;[[:<:]]sender_based_routing[[:>:]];<a href="postconf.5.html#sender_based_routing">&</a>;g
+ s;[[:<:]]sender_bcc_maps[[:>:]];<a href="postconf.5.html#sender_bcc_maps">&</a>;g
+ s;[[:<:]]sender_canonical_maps[[:>:]];<a href="postconf.5.html#sender_canonical_maps">&</a>;g
+ s;[[:<:]]sendmail_path[[:>:]];<a href="postconf.5.html#sendmail_path">&</a>;g
+ s;[[:<:]]service_throttle_time[[:>:]];<a href="postconf.5.html#service_throttle_time">&</a>;g
+ s;[[:<:]]setgid_group[[:>:]];<a href="postconf.5.html#setgid_group">&</a>;g
+ s;[[:<:]]show_user_unknown_table_name[[:>:]];<a href="postconf.5.html#show_user_unknown_table_name">&</a>;g
+ s;[[:<:]]showq_service_name[[:>:]];<a href="postconf.5.html#showq_service_name">&</a>;g
+ s;[[:<:]]smtp_always_send_ehlo[[:>:]];<a href="postconf.5.html#smtp_always_send_ehlo">&</a>;g
+ s;[[:<:]]smtp_bind_address[[:>:]];<a href="postconf.5.html#smtp_bind_address">&</a>;g
+ s;[[:<:]]smtp_connect_timeout[[:>:]];<a href="postconf.5.html#smtp_connect_timeout">&</a>;g
+ s;[[:<:]]smtp_data_done_timeout[[:>:]];<a href="postconf.5.html#smtp_data_done_timeout">&</a>;g
+ s;[[:<:]]smtp_data_init_timeout[[:>:]];<a href="postconf.5.html#smtp_data_init_timeout">&</a>;g
+ s;[[:<:]]smtp_data_xfer_timeout[[:>:]];<a href="postconf.5.html#smtp_data_xfer_timeout">&</a>;g
+ s;[[:<:]]smtp_defer_if_no_mx_address_found[[:>:]];<a href="postconf.5.html#smtp_defer_if_no_mx_address_found">&</a>;g
+ s;[[:<:]]lmtp_destination_concurrency_limit[[:>:]];<a href="postconf.5.html#lmtp_destination_concurrency_limit">&</a>;g
+ s;[[:<:]]lmtp_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#lmtp_destination_recipient_limit">&</a>;g
+ s;[[:<:]]relay_destination_concurrency_limit[[:>:]];<a href="postconf.5.html#relay_destination_concurrency_limit">&</a>;g
+ s;[[:<:]]relay_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#relay_destination_recipient_limit">&</a>;g
+ s;[[:<:]]resolve_null_domain[[:>:]];<a href="postconf.5.html#resolve_null_domain">&</a>;g
+ s;[[:<:]]smtp_destination_concurrency_limit[[:>:]];<a href="postconf.5.html#smtp_destination_concurrency_limit">&</a>;g
+ s;[[:<:]]smtp_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#smtp_destination_recipient_limit">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_destination_concurrency_limit[[:>:]];<a href="postconf.5.html#virtual_destination_concurrency_limit">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_destination_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#virtual_destination_recipient_limit">&</a>;g
+ s;[[:<:]]smtp_helo_name[[:>:]];<a href="postconf.5.html#smtp_helo_name">&</a>;g
+ s;[[:<:]]smtp_helo_timeout[[:>:]];<a href="postconf.5.html#smtp_helo_timeout">&</a>;g
+ s;[[:<:]]smtp_host_lookup[[:>:]];<a href="postconf.5.html#smtp_host_lookup">&</a>;g
+ s;[[:<:]]smtp_line_length_limit[[:>:]];<a href="postconf.5.html#smtp_line_length_limit">&</a>;g
+ s;[[:<:]]smtp_mail_timeout[[:>:]];<a href="postconf.5.html#smtp_mail_timeout">&</a>;g
+ s;[[:<:]]smtp_mx_address_limit[[:>:]];<a href="postconf.5.html#smtp_mx_address_limit">&</a>;g
+ s;[[:<:]]smtp_mx_session_limit[[:>:]];<a href="postconf.5.html#smtp_mx_session_limit">&</a>;g
+ s;[[:<:]]smtp_never_send_ehlo[[:>:]];<a href="postconf.5.html#smtp_never_send_ehlo">&</a>;g
+ s;[[:<:]]smtp_pix_workaround_delay_time[[:>:]];<a href="postconf.5.html#smtp_pix_workaround_delay_time">&</a>;g
+ s;[[:<:]]smtp_pix_workaround_threshold_time[[:>:]];<a href="postconf.5.html#smtp_pix_workaround_threshold_time">&</a>;g
+ s;[[:<:]]smtp_quit_timeout[[:>:]];<a href="postconf.5.html#smtp_quit_timeout">&</a>;g
+ s;[[:<:]]smtp_quote_rfc821_envelope[[:>:]];<a href="postconf.5.html#smtp_quote_rfc821_envelope">&</a>;g
+ s;[[:<:]]smtp_randomize_addresses[[:>:]];<a href="postconf.5.html#smtp_randomize_addresses">&</a>;g
+ s;[[:<:]]smtp_rcpt_timeout[[:>:]];<a href="postconf.5.html#smtp_rcpt_timeout">&</a>;g
+ s;[[:<:]]smtp_rset_timeout[[:>:]];<a href="postconf.5.html#smtp_rset_timeout">&</a>;g
+ s;[[:<:]]smtp_sasl_auth_enable[[:>:]];<a href="postconf.5.html#smtp_sasl_auth_enable">&</a>;g
+ s;[[:<:]]smtp_sasl_password_maps[[:>:]];<a href="postconf.5.html#smtp_sasl_password_maps">&</a>;g
+ s;[[:<:]]smtp_sasl_security_options[[:>:]];<a href="postconf.5.html#smtp_sasl_security_options">&</a>;g
+ s;[[:<:]]smtp_send_xforward_command[[:>:]];<a href="postconf.5.html#smtp_send_xforward_command">&</a>;g
+ s;[[:<:]]smtp_skip_4xx_greeting[[:>:]];<a href="postconf.5.html#smtp_skip_4xx_greeting">&</a>;g
+ s;[[:<:]]smtp_skip_5xx_greeting[[:>:]];<a href="postconf.5.html#smtp_skip_5xx_greeting">&</a>;g
+ s;[[:<:]]smtp_skip_quit_response[[:>:]];<a href="postconf.5.html#smtp_skip_quit_response">&</a>;g
+ s;[[:<:]]smtp_xforward_timeout[[:>:]];<a href="postconf.5.html#smtp_xforward_timeout">&</a>;g
+ s;[[:<:]]smtpd_autho[-</bB>]*\n*[ <bB>]*rized_verp_clients[[:>:]];<a href="postconf.5.html#smtpd_authorized_verp_clients">&</a>;g
+ s;[[:<:]]smtpd_autho[-</bB>]*\n*[ <bB>]*rized_xclient_hosts[[:>:]];<a href="postconf.5.html#smtpd_authorized_xclient_hosts">&</a>;g
+ s;[[:<:]]smtpd_autho[-</bB>]*\n*[ <bB>]*rized_xforward_hosts[[:>:]];<a href="postconf.5.html#smtpd_authorized_xforward_hosts">&</a>;g
+ s;[[:<:]]smtpd_banner[[:>:]];<a href="postconf.5.html#smtpd_banner">&</a>;g
+ s;[[:<:]]smtpd_client_connection_count_limit[[:>:]];<a href="postconf.5.html#smtpd_client_connection_count_limit">&</a>;g
+ s;[[:<:]]smtpd_client_connection_limit_exceptions[[:>:]];<a href="postconf.5.html#smtpd_client_connection_limit_exceptions">&</a>;g
+ s;[[:<:]]smtpd_client_connection_rate_limit[[:>:]];<a href="postconf.5.html#smtpd_client_connection_rate_limit">&</a>;g
+ s;[[:<:]]smtpd_client_restrictions[[:>:]];<a href="postconf.5.html#smtpd_client_restrictions">&</a>;g
+ s;[[:<:]]smtpd_data_restrictions[[:>:]];<a href="postconf.5.html#smtpd_data_restrictions">&</a>;g
+ s;[[:<:]]smtpd_delay_reject[[:>:]];<a href="postconf.5.html#smtpd_delay_reject">&</a>;g
+ s;[[:<:]]smtpd_error_sleep_time[[:>:]];<a href="postconf.5.html#smtpd_error_sleep_time">&</a>;g
+ s;[[:<:]]smtpd_etrn_restrictions[[:>:]];<a href="postconf.5.html#smtpd_etrn_restrictions">&</a>;g
+ s;[[:<:]]smtpd_expansion_filter[[:>:]];<a href="postconf.5.html#smtpd_expansion_filter">&</a>;g
+ s;[[:<:]]smtpd_hard_error_limit[[:>:]];<a href="postconf.5.html#smtpd_hard_error_limit">&</a>;g
+ s;[[:<:]]smtpd_helo_required[[:>:]];<a href="postconf.5.html#smtpd_helo_required">&</a>;g
+ s;[[:<:]]smtpd_helo_restrictions[[:>:]];<a href="postconf.5.html#smtpd_helo_restrictions">&</a>;g
+ s;[[:<:]]smtpd_history_flush_threshold[[:>:]];<a href="postconf.5.html#smtpd_history_flush_threshold">&</a>;g
+ s;[[:<:]]smtpd_junk_command_limit[[:>:]];<a href="postconf.5.html#smtpd_junk_command_limit">&</a>;g
+ s;[[:<:]]smtpd_noop_commands[[:>:]];<a href="postconf.5.html#smtpd_noop_commands">&</a>;g
+ s;[[:<:]]smtpd_null_access_lookup_key[[:>:]];<a href="postconf.5.html#smtpd_null_access_lookup_key">&</a>;g
+ s;[[:<:]]smtpd_recipient_overshoot_limit[[:>:]];<a href="postconf.5.html#smtpd_recipient_overshoot_limit">&</a>;g
+ s;[[:<:]]smtpd_policy_service_max_idle[[:>:]];<a href="postconf.5.html#smtpd_policy_service_max_idle">&</a>;g
+ s;[[:<:]]smtpd_policy_service_max_ttl[[:>:]];<a href="postconf.5.html#smtpd_policy_service_max_ttl">&</a>;g
+ s;[[:<:]]smtpd_policy_service_timeout[[:>:]];<a href="postconf.5.html#smtpd_policy_service_timeout">&</a>;g
+ s;[[:<:]]smtpd_proxy_ehlo[[:>:]];<a href="postconf.5.html#smtpd_proxy_ehlo">&</a>;g
+ s;[[:<:]]smtpd_proxy_filter[[:>:]];<a href="postconf.5.html#smtpd_proxy_filter">&</a>;g
+ s;[[:<:]]smtpd_proxy_timeout[[:>:]];<a href="postconf.5.html#smtpd_proxy_timeout">&</a>;g
+ s;[[:<:]]smtpd_recip[-</bB>]*\n* *[<bB>]*ient_limit[[:>:]];<a href="postconf.5.html#smtpd_recipient_limit">&</a>;g
+ s;[[:<:]]smtpd_recip[-</bB>]*\n* *[<bB>]*ient_restrictions[[:>:]];<a href="postconf.5.html#smtpd_recipient_restrictions">&</a>;g
+ s;[[:<:]]smtpd_reject_unlisted_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#smtpd_reject_unlisted_recipient">&</a>;g
+ s;[[:<:]]smtpd_reject_unlisted_sender[[:>:]];<a href="postconf.5.html#smtpd_reject_unlisted_sender">&</a>;g
+ s;[[:<:]]smtpd_restriction_classes[[:>:]];<a href="postconf.5.html#smtpd_restriction_classes">&</a>;g
+ s;[[:<:]]smtpd_sasl_application_name[[:>:]];<a href="postconf.5.html#smtpd_sasl_application_name">&</a>;g
+ s;[[:<:]]smtpd_sasl_auth_enable[[:>:]];<a href="postconf.5.html#smtpd_sasl_auth_enable">&</a>;g
+ s;[[:<:]]smtpd_sasl_exceptions_networks[[:>:]];<a href="postconf.5.html#smtpd_sasl_exceptions_networks">&</a>;g
+ s;[[:<:]]smtpd_sasl_local_domain[[:>:]];<a href="postconf.5.html#smtpd_sasl_local_domain">&</a>;g
+ s;[[:<:]]smtpd_sasl_security_options[[:>:]];<a href="postconf.5.html#smtpd_sasl_security_options">&</a>;g
+ s;[[:<:]]smtpd_sender_login_maps[[:>:]];<a href="postconf.5.html#smtpd_sender_login_maps">&</a>;g
+ s;[[:<:]]smtpd_sender_restrictions[[:>:]];<a href="postconf.5.html#smtpd_sender_restrictions">&</a>;g
+ s;[[:<:]]smtpd_soft_error_limit[[:>:]];<a href="postconf.5.html#smtpd_soft_error_limit">&</a>;g
+ s;[[:<:]]smtpd_timeout[[:>:]];<a href="postconf.5.html#smtpd_timeout">&</a>;g
+ s;[[:<:]]soft_bounce[[:>:]];<a href="postconf.5.html#soft_bounce">&</a>;g
+ s;[[:<:]]stale_lock_time[[:>:]];<a href="postconf.5.html#stale_lock_time">&</a>;g
+ s;[[:<:]]strict_7bit_headers[[:>:]];<a href="postconf.5.html#strict_7bit_headers">&</a>;g
+ s;[[:<:]]strict_8bitmime[[:>:]];<a href="postconf.5.html#strict_8bitmime">&</a>;g
+ s;[[:<:]]strict_8bitmime_body[[:>:]];<a href="postconf.5.html#strict_8bitmime_body">&</a>;g
+ s;[[:<:]]strict_mime_encoding_domain[[:>:]];<a href="postconf.5.html#strict_mime_encoding_domain">&</a>;g
+ s;[[:<:]]strict_rfc821_envelopes[[:>:]];<a href="postconf.5.html#strict_rfc821_envelopes">&</a>;g
+ s;[[:<:]]sun_mailtool_compatibility[[:>:]];<a href="postconf.5.html#sun_mailtool_compatibility">&</a>;g
+ s;[[:<:]]swap_bangpath[[:>:]];<a href="postconf.5.html#swap_bangpath">&</a>;g
+ s;[[:<:]]syslog_facility[[:>:]];<a href="postconf.5.html#syslog_facility">&</a>;g
+ s;[[:<:]]syslog_name[[:>:]];<a href="postconf.5.html#syslog_name">&</a>;g
+ s;[[:<:]]trace_service_name[[:>:]];<a href="postconf.5.html#trace_service_name">&</a>;g
+ s;[[:<:]]transport_maps[[:>:]];<a href="postconf.5.html#transport_maps">&</a>;g
+ s;[[:<:]]transport_retry_time[[:>:]];<a href="postconf.5.html#transport_retry_time">&</a>;g
+ s;[[:<:]]trigger_timeout[[:>:]];<a href="postconf.5.html#trigger_timeout">&</a>;g
+ s;[[:<:]]undisclosed_recip[-</bB>]*\n* *[<bB>]*ients_header[[:>:]];<a href="postconf.5.html#undisclosed_recipients_header">&</a>;g
+ s;[[:<:]]unknown_address_reject_code[[:>:]];<a href="postconf.5.html#unknown_address_reject_code">&</a>;g
+ s;[[:<:]]unknown_client_reject_code[[:>:]];<a href="postconf.5.html#unknown_client_reject_code">&</a>;g
+ s;[[:<:]]unknown_hostname_reject_code[[:>:]];<a href="postconf.5.html#unknown_hostname_reject_code">&</a>;g
+ s;[[:<:]]unknown_local_recip[-</bB>]*\n* *[<bB>]*ient_reject_code[[:>:]];<a href="postconf.5.html#unknown_local_recipient_reject_code">&</a>;g
+ s;[[:<:]]unknown_relay_recipi[-</bB>]*\n*[ <bB>]*ent_reject_code[[:>:]];<a href="postconf.5.html#unknown_relay_recipient_reject_code">&</a>;g
+ s;[[:<:]]unknown_virtual_alias_reject_code[[:>:]];<a href="postconf.5.html#unknown_virtual_alias_reject_code">&</a>;g
+ s;[[:<:]]unknown_virtual_mail[-</bB>]*\n* *[<bB>]*box_reject_code[[:>:]];<a href="postconf.5.html#unknown_virtual_mailbox_reject_code">&</a>;g
+ s;[[:<:]]unverified_recip[-</bB>]*\n* *[<bB>]*ient_reject_code[[:>:]];<a href="postconf.5.html#unverified_recipient_reject_code">&</a>;g
+ s;[[:<:]]unverified_sender_reject_code[[:>:]];<a href="postconf.5.html#unverified_sender_reject_code">&</a>;g
+ s;[[:<:]]verp_delimiter_filter[[:>:]];<a href="postconf.5.html#verp_delimiter_filter">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_alias_domains[[:>:]];<a href="postconf.5.html#virtual_alias_domains">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_alias_expansion_limit[[:>:]];<a href="postconf.5.html#virtual_alias_expansion_limit">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_alias_maps[[:>:]];<a href="postconf.5.html#virtual_alias_maps">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_maps[[:>:]];<a href="postconf.5.html#virtual_maps">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_alias_recursion_limit[[:>:]];<a href="postconf.5.html#virtual_alias_recursion_limit">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_gid_maps[[:>:]];<a href="postconf.5.html#virtual_gid_maps">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_base[[:>:]];<a href="postconf.5.html#virtual_mailbox_base">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_domains[[:>:]];<a href="postconf.5.html#virtual_mailbox_domains">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_limit[[:>:]];<a href="postconf.5.html#virtual_mailbox_limit">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_lock[[:>:]];<a href="postconf.5.html#virtual_mailbox_lock">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_mail[-</bB>]*\n* *[<bB>]*box_maps[[:>:]];<a href="postconf.5.html#virtual_mailbox_maps">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_minimum_uid[[:>:]];<a href="postconf.5.html#virtual_minimum_uid">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_transport[[:>:]];<a href="postconf.5.html#virtual_transport">&</a>;g
+ s;[[:<:]]vir[-</bB>]*\n*[ <bB>]*tual_uid_maps[[:>:]];<a href="postconf.5.html#virtual_uid_maps">&</a>;g
+
+ # Undo hyperlinks of manual pages with the same name as parameters.
+
+ s/<a href="[^"]*">\([^<]*\)<\/a>(/\1(/g
+
+ # Undo hyperlinks of pathnames thay collide with parameter names.
+
+ s/\/<a href="[^"]*">\([^<]*\)<\/a>/\/\1/g
+
+ # Hyperlink Postfix manual page references.
+
+ s/[<bB>]*anvil[</bB>]*(8)/<a href="anvil.8.html">&<\/a>/g
+ s/[<bB>]*bounce[</bB>]*(8)/<a href="bounce.8.html">&<\/a>/g
+ s/[<bB>]*cleanup[</bB>]*(8)/<a href="cleanup.8.html">&<\/a>/g
+ s/[<bB>]*defer[</bB>]*(8)/<a href="defer.8.html">&<\/a>/g
+ s/[<bB>]*error[</bB>]*(8)/<a href="error.8.html">&<\/a>/g
+ s/[<bB>]*flush[</bB>]*(8)/<a href="flush.8.html">&<\/a>/g
+ s/[<bB>]*lmtp[</bB>]*(8)/<a href="lmtp.8.html">&<\/a>/g
+ s/[<bB>]*local[</bB>]*(8)/<a href="local.8.html">&<\/a>/g
+ s/[<bB>]*mas[-</bB>]*\n* *[<bB>]*ter[</bB>]*(8)/<a href="master.8.html">&<\/a>/g
+ s/[<bB>]*pickup[</bB>]*(8)/<a href="pickup.8.html">&<\/a>/g
+ s/[<bB>]*pipe[</bB>]*(8)/<a href="pipe.8.html">&<\/a>/g
+ s/[<bB>]*oqmgr[</bB>]*(8)/<a href="qmgr.8.html">&<\/a>/g
+ s/[<bB>]*[[:<:]]qmgr[</bB>]*(8)/<a href="qmgr.8.html">&<\/a>/g
+ s/[<bB>]*qmqpd[</bB>]*(8)/<a href="qmqpd.8.html">&<\/a>/g
+ s/[<bB>]*showq[</bB>]*(8)/<a href="showq.8.html">&<\/a>/g
+ s/[<bB>]*smtp[</bB>]*(8)/<a href="smtp.8.html">&<\/a>/g
+ s/[<bB>]*smtpd[</bB>]*(8)/<a href="smtpd.8.html">&<\/a>/g
+ s/[<bB>]*spawn[</bB>]*(8)/<a href="spawn.8.html">&<\/a>/g
+ s/[<bB>]*trace[</bB>]*(8)/<a href="trace.8.html">&<\/a>/g
+ s/[<bB>]*trivial- *<br> *rewrite[</bB>]*(8)/<a href="trivial-rewrite.8.html">&<\/a>/g
+ s/[<bB>]*triv[-</bB>]*\n* *[<bB>]*ial-[</bB>]*\n* *[<bB>]*rewrite[</bB>]*(8)/<a href="trivial-rewrite.8.html">&<\/a>/g
+ s/[<bB>]*mailq[</bB>]*(1)/<a href="mailq.1.html">&<\/a>/g
+ s/[<bB>]*newaliases[</bB>]*(1)/<a href="newaliases.1.html">&<\/a>/g
+ s/[<bB>]*postalias[</bB>]*(1)/<a href="postalias.1.html">&<\/a>/g
+ s/[<bB>]*postcat[</bB>]*(1)/<a href="postcat.1.html">&<\/a>/g
+ s/[<bB>]*postconf[</bB>]*(1)/<a href="postconf.1.html">&<\/a>/g
+ s/[<bB>]*postdrop[</bB>]*(1)/<a href="postdrop.1.html">&<\/a>/g
+ s/[<bB>]*postfix[</bB>]*(1)/<a href="postfix.1.html">&<\/a>/g
+ s/[<bB>]*postkick[</bB>]*(1)/<a href="postkick.1.html">&<\/a>/g
+ s/[<bB>]*postlock[</bB>]*(1)/<a href="postlock.1.html">&<\/a>/g
+ s/[<bB>]*postlog[</bB>]*(1)/<a href="postlog.1.html">&<\/a>/g
+ s/[<bB>]*postmap[</bB>]*(1)/<a href="postmap.1.html">&<\/a>/g
+ s/[<bB>]*postqueue[</bB>]*(1)/<a href="postqueue.1.html">&<\/a>/g
+ s/[<bB>]*postsuper[</bB>]*(1)/<a href="postsuper.1.html">&<\/a>/g
+ s/[<bB>]*send[-</bB>]*\n*[ <bB>]*mail[</bB>]*(1)/<a href="sendmail.1.html">&<\/a>/g
+ s/[<bB>]*smtp-[</bB>]*\n* *[<bB>]*source[</bB>]*(1)/<a href="smtp-source.1.html">&<\/a>/g
+ s/[<bB>]*smtp-[</bB>]*\n* *[<bB>]*sink[</bB>]*(1)/<a href="smtp-sink.1.html">&<\/a>/g
+ s/[<bB>]*qmqp-[</bB>]*\n* *[<bB>]*source[</bB>]*(1)/<a href="qmqp-source.1.html">&<\/a>/g
+ s/[<bB>]*qmqp-[</bB>]*\n* *[<bB>]*sink[</bB>]*(1)/<a href="qmqp-sink.1.html">&<\/a>/g
+ s/[<bB>]*qshape[</bB>]*(1)/<a href="qshape.1.html">&<\/a>/g
+ s/[<bB>]*access[</bB>]*(5)/<a href="access.5.html">&<\/a>/g
+ s/[<bB>]*aliases[</bB>]*(5)/<a href="aliases.5.html">&<\/a>/g
+ s/[<bB>]*canonical[</bB>]*(5)/<a href="canonical.5.html">&<\/a>/g
+ s/[<bB>]*etrn[</bB>]*(5)/<a href="etrn.5.html">&<\/a>/g
+ s/[<bB>]*ldap[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="ldap_table.5.html">&<\/a>/g
+ s/[<bB>]*mysql[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="mysql_table.5.html">&<\/a>/g
+ s/[<bB>]*pcre[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="pcre_table.5.html">&<\/a>/g
+ s/[<bB>]*pgsql[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="pgsql_table.5.html">&<\/a>/g
+ s/[<bB>]*postconf[</bB>]*(5)/<a href="postconf.5.html">&<\/a>/g
+ s/[<bB>]*proxymap[</bB>]*(8)/<a href="proxymap.8.html">&<\/a>/g
+ s/[<bB>]*reg[-</bB>]*\n*[ <bB>]*exp[</bBiI>]*_[</iIbB>]*table[</bB>]*(5)/<a href="regexp_table.5.html">&<\/a>/g
+ s/[<bB>]*relocated[</bB>]*(5)/<a href="relocated.5.html">&<\/a>/g
+ s/[<bB>]*trans[-</bB>]*\n*[ <bB>]*port[</bB>]*(5)/<a href="transport.5.html">&<\/a>/g
+ s/[<bB>]*verify[</bB>]*(8)/<a href="verify.8.html">&<\/a>/g
+ s/[<bB>]*virtual[</bB>]*(5)/<a href="virtual.5.html">&<\/a>/g
+ s/[<bB>]*virtual[</bB>]*(8)/<a href="virtual.8.html">&<\/a>/g
+ s/[<bB>]*cidr_table[</bB>]*(5)/<a href="cidr_table.5.html">&<\/a>/g
+ s/[<bB>]*tcp_table[</bB>]*(5)/<a href="tcp_table.5.html">&<\/a>/g
+ s/[<bB>]*body_checks[</bB>]*(5)/<a href="header_checks.5.html">&<\/a>/g
+ s/[<bB>]*header_checks[</bB>]*(5)/<a href="header_checks.5.html">&<\/a>/g
+
+ # Hyperlink README document names
+
+ s/[[:<:]][A-Z_]*_README[[:>:]]/<a href="&.html">&<\/a>/g
+ s/[[:<:]]INSTALL[[:>:]]/<a href="&.html">&<\/a>/g
+ s/[[:<:]]OVERVIEW[[:>:]]/<a href="&.html">&<\/a>/g
+ s/"type:table"/"<a href="DATABASE_README.html">type:table<\/a>"/g
+
+ # Split manual page hyperlinks across newlines
+
+ s/\(<a href="[^"]*">\)\([<bB>]*[-a-z0-9_]*[-</bB>]*\)\(\n *\)\([<bB>]*[-a-z0-9_]*[</bB>]*([0-9])\)\(<\/a>\)/\1\2\5\3\1\4\5/
+
+ # Access restrictions - generic
+
+ s;[[:<:]]check_policy_service[[:>:]];<a href="postconf.5.html#check_policy_service">&</a>;g
+ s;[[:<:]]defer_if_permit[[:>:]];<a href="postconf.5.html#defer_if_permit">&</a>;g
+ s;[[:<:]]defer_if_reject[[:>:]];<a href="postconf.5.html#defer_if_reject">&</a>;g
+ s;[[:<:]]reject_multi_recip[-</bB>]*\n* *[<bB>]*ient_bounce[[:>:]];<a href="postconf.5.html#reject_multi_recipient_bounce">&</a>;g
+ s;[[:<:]]reject_unauth_pipelining[[:>:]];<a href="postconf.5.html#reject_unauth_pipelining">&</a>;g
+ s;[[:<:]]warn_if_reject[[:>:]];<a href="postconf.5.html#warn_if_reject">&</a>;g
+
+ # Access restrictions - client
+
+ s;[[:<:]]check_client_access[[:>:]];<a href="postconf.5.html#check_client_access">&</a>;g
+ s;[[:<:]]permit_mynetworks[[:>:]];<a href="postconf.5.html#permit_mynetworks">&</a>;g
+ s;[[:<:]]reject_unknown_client[[:>:]];<a href="postconf.5.html#reject_unknown_client">&</a>;g
+ s;[[:<:]]reject_rbl_client[[:>:]];<a href="postconf.5.html#reject_rbl_client">&</a>;g
+ s;[[:<:]]reject_rhsbl_client[[:>:]];<a href="postconf.5.html#reject_rhsbl_client">&</a>;g
+
+ # Access restrictions - helo
+
+ s;[[:<:]]check_helo_access[[:>:]];<a href="postconf.5.html#check_helo_access">&</a>;g
+ s;[[:<:]]reject_invalid_hostname[[:>:]];<a href="postconf.5.html#reject_invalid_hostname">&</a>;g
+ s;[[:<:]]reject_non_fqdn_hostname[[:>:]];<a href="postconf.5.html#reject_non_fqdn_hostname">&</a>;g
+ s;[[:<:]]reject_unknown_hostname[[:>:]];<a href="postconf.5.html#reject_unknown_hostname">&</a>;g
+
+ # Access restrictions - sender
+
+ s;[[:<:]]check_sender_access[[:>:]];<a href="postconf.5.html#check_sender_access">&</a>;g
+ s;[[:<:]]\(reject_authenti\)\([-</bB>]*\n*[ <bB>]*\)\(cated_sender_login_mismatch\)[[:>:]];<a href="postconf.5.html#reject_authenticated_sender_login_mismatch">\1<\/a>\2<a href="postconf.5.html#reject_authenticated_sender_login_mismatch">\3</a>;g
+ s;[[:<:]]reject_non_fqdn_sender[[:>:]];<a href="postconf.5.html#reject_non_fqdn_sender">&</a>;g
+ s;[[:<:]]reject_rhsbl_sender[[:>:]];<a href="postconf.5.html#reject_rhsbl_sender">&</a>;g
+ s;[[:<:]]reject_sender_login_mis[-</bB>]*\n*[ <bB>]*match[[:>:]];<a href="postconf.5.html#reject_sender_login_mismatch">&</a>;g
+ s;[[:<:]]reject_unauthenticated_sender_login_mismatch[[:>:]];<a href="postconf.5.html#reject_unauthenticated_sender_login_mismatch">&</a>;g
+ s;[[:<:]]reject_unknown_sender_domain[[:>:]];<a href="postconf.5.html#reject_unknown_sender_domain">&</a>;g
+ s;[[:<:]]reject_unlisted_sender[[:>:]];<a href="postconf.5.html#reject_unlisted_sender">&</a>;g
+ s;[[:<:]]reject_unveri[-</bB>]*\n*[ <bB>]*fied_sender[[:>:]];<a href="postconf.5.html#reject_unverified_sender">&</a>;g
+
+ # Access restrictions - recip[-</bB>]*\n* *[<bB>]*ient
+
+ s;[[:<:]]check_recip[-</bB>]*\n* *[<bB>]*ient_access[[:>:]];<a href="postconf.5.html#check_recipient_access">&</a>;g
+ s;[[:<:]]check_recip[-</bB>]*\n* *[<bB>]*ient_mx_access[[:>:]];<a href="postconf.5.html#check_recipient_mx_access">&</a>;g
+ s;[[:<:]]check_recip[-</bB>]*\n* *[<bB>]*ient_ns_access[[:>:]];<a href="postconf.5.html#check_recipient_ns_access">&</a>;g
+ s;[[:<:]]permit_auth_destination[[:>:]];<a href="postconf.5.html#permit_auth_destination">&</a>;g
+ s;[[:<:]]permit_mx_backup[[:>:]];<a href="postconf.5.html#permit_mx_backup">&</a>;g
+ s;[[:<:]]reject_non_fqdn_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#reject_non_fqdn_recipient">&</a>;g
+ s;[[:<:]]reject_rhsbl_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#reject_rhsbl_recipient">&</a>;g
+ s;[[:<:]]reject_unauth_destination[[:>:]];<a href="postconf.5.html#reject_unauth_destination">&</a>;g
+ s;[[:<:]]reject_unknown_recipi[-</bB>]*\n*[ <bB>]*ent_domain[[:>:]];<a href="postconf.5.html#reject_unknown_recipient_domain">&</a>;g
+ s;[[:<:]]reject_unlisted_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#reject_unlisted_recipient">&</a>;g
+ s;[[:<:]]reject_unveri[-</bB>]*\n*[ <bB>]*fied_recip[-</bB>]*\n* *[<bB>]*ient[[:>:]];<a href="postconf.5.html#reject_unverified_recipient">&</a>;g
+
+ # Access restrictions - etrn
+
+ s;[[:<:]]check_etrn_access[[:>:]];<a href="postconf.5.html#check_etrn_access">&</a>;g
+
+ # Split parameter or restriction hyperlinks across line breaks
+
+ s/\(<a href="[^"]*">\)\([-a-z0-9_]*\)[[:>:]]\([-</bB>]*\n *[<bB>]*\)[[:<:]]\([-a-z0-9_]*\)\(<\/a>\)/\1\2\5\3\1\4\5/
+
+ # Glue manual/parameter/restriction hyperlinks without line breaks.
+
+ s/\(<a href="[^"]*">\)\([<bB>]*[-a-zA-Z0-9._]*[<bB>]*\)<\/a>\1/\1\2/g
+ s/\(<a href="[^"]*">\)\([<bB>]*[-a-zA-Z0-9._]*[<bB>]*\)<\/a>\1/\1\2/g
+
+ # Hyperlink URLs and RFC documents
+
+ s/\(http:\/\/[^ ,"()]*[^ ,"():;!?.]\)/<a href="\1">\1<\/a>/
+ s/\(ftp:\/\/[^ ,"()]*[^ ,"():;!?.]\)/<a href="\1">\1<\/a>/
+ s/[[:<:]]RFC *\([1-9][0-9]*\)/<a href="http:\/\/www.faqs.org\/rfcs\/rfc\1.html">&<\/a>/
+
+ # Hyperlink phrases not in headers.
+
+ /<\/*h[0-9]>/{
+ p
+ d
+ }
+ s/canonical domains*/<a href="VIRTUAL_README.html#canonical">&<\/a>/
+ s/hosted domains*/<a href="VIRTUAL_README.html#canonical">&<\/a>/
+ #s/other domains*/<a href="VIRTUAL_README.html#canonical">&<\/a>/
+ s/virtual alias example/<a href="VIRTUAL_README.html#virtual_alias">&<\/a>/
+ s/virtual mailbox example/<a href="VIRTUAL_README.html#virtual_mailbox">&<\/a>/
+ s/local domains*/<a href="ADDRESS_CLASS_README.html#local_domain_class">&<\/a>/
+ s/virtual alias domains*/<a href="ADDRESS_CLASS_README.html#virtual_alias_class">&<\/a>/
+ s/virtual ALIAS domains*/<a href="ADDRESS_CLASS_README.html#virtual_alias_class">&<\/a>/
+ s/virtual mailbox domains*/<a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">&<\/a>/
+ s/virtual MAILBOX domains*/<a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">&<\/a>/
+ s/relay domains*/<a href="ADDRESS_CLASS_README.html#relay_domain_class">&<\/a>/
+ s/default domains*/<a href="ADDRESS_CLASS_README.html#default_domain_class">&<\/a>/
+ s/mydestination domains*/<a href="ADDRESS_CLASS_README.html#local_domain_class">&<\/a>/
+ s/[[:<:]]"*maildrop"* *queues*[[:>:]]/<a href="QSHAPE_README.html#maildrop_queue">&<\/a>/
+ s/[[:<:]]\("*maildrop"*\),/<a href="QSHAPE_README.html#maildrop_queue">\1<\/a>,/
+ s/[[:<:]]\("*incoming"*\) and[[:>:]]/<a href="QSHAPE_README.html#incoming_queue">\1<\/a> and/
+ s/[[:<:]]\("*incoming"*\) or[[:>:]]/<a href="QSHAPE_README.html#incoming_queue">\1<\/a> or/
+ s/[[:<:]]"*incoming"* *queues*[[:>:]]/<a href="QSHAPE_README.html#incoming_queue">&<\/a>/
+ s/<b> *incoming *<\/b> *queues*[[:>:]]/<a href="QSHAPE_README.html#incoming_queue">&<\/a>/
+ s/[[:<:]]"*active"* *queues*[[:>:]]/<a href="QSHAPE_README.html#active_queue">&<\/a>/
+ s/[[:<:]]"*deferred"* *queues*[[:>:]]/<a href="QSHAPE_README.html#deferred_queue">&<\/a>/
+ s/[[:<:]]"*hold"* *queues*[[:>:]]/<a href="QSHAPE_README.html#hold_queue">&<\/a>/
+ s/[[:<:]]\("*hold"*\),/<a href="QSHAPE_README.html#hold_queue">\1<\/a>,/
+
+ # Hyperlink map types.
+
+ s/[[:<:]]\(cidr\):/<a href="cidr_table.5.html">\1<\/a>:/g
+ s/[[:<:]]\(pcre\):/<a href="pcre_table.5.html">\1<\/a>:/g
+ s/[[:<:]]\(proxy\):/<a href="proxymap.8.html">\1<\/a>:/g
+ s/[[:<:]]\(pgsql\):/<a href="pgsql_table.5.html">\1<\/a>:/g
+ s/[[:<:]]\(mysql\):/<a href="mysql_table.5.html">\1<\/a>:/g
+ s/[[:<:]]\(ldap\):/<a href="ldap_table.5.html">\1<\/a>:/g
+ s/[[:<:]]\(regexp\):/<a href="regexp_table.5.html">\1<\/a>:/g
+ s/[[:<:]]\(tcp\):/<a href="tcp_table.5.html">\1<\/a>:/g
+
+ # Do nice links for smtp:host:port etc.
+
+ s/[[:<:]]\(error\):/<a href="error.8.html">\1<\/a>:/g
+ s/[[:<:]]\(smtp\):/<a href="smtp.8.html">\1<\/a>:/g
+ s/[[:<:]]\(lmtp\):/<a href="lmtp.8.html">\1<\/a>:/g
+
+' "$@"
diff --git a/mantools/readme2html b/mantools/readme2html
new file mode 100755
index 0000000..64b5111
--- /dev/null
+++ b/mantools/readme2html
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Crude script to convert plain READMEs to HTML
+
+echo '<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+
+<head>
+
+<title>Title Here</title>
+
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
+
+</head>
+
+<body>
+
+<h1>Title Here</h1>'
+
+sed '
+ s/&/\&amp;/g
+ s/</\&lt;/g
+ s/>/\&gt;/g
+' "$@" | awk '
+/^====+$/ { print "<h2>" line "</h2>"; line = ""; getline; next }
+NF == 0 { print line; print $0; print "<p>"; line = $0; next }
+ { print line; line = $0 }
+END { print line }
+'
+
+echo '
+</body>
+
+</html>'
diff --git a/mantools/specmiss b/mantools/specmiss
new file mode 100755
index 0000000..c2498e8
--- /dev/null
+++ b/mantools/specmiss
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+
+# Get all the postconf parameter names from the postconf.proto file.
+
+die "Usage: $0 protofile [filename...]\n"
+ unless $protofile = shift(@ARGV);
+
+# Read the whole file even if we want to print only one parameter.
+
+open(POSTCONF, $protofile) || die " cannot open $protofile: $!\n";
+
+while(<POSTCONF>) {
+ if (/^%(PARAM)\s+(\S+)/) {
+ $found{$2} = 1;
+ }
+}
+
+while (<>) {
+ if (/^%(PARAM)\s+(\S+)/) {
+ delete $found{$2};
+ }
+}
+
+for $name (sort keys %found) {
+ print $name,"\n";
+}
+
diff --git a/mantools/spell b/mantools/spell
new file mode 100755
index 0000000..f4138ed
--- /dev/null
+++ b/mantools/spell
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+for i in $*
+do
+ echo === $i ===
+ mantools/html2readme $i | col -b | spell | fgrep -vxf proto/stop
+done
diff --git a/mantools/srctoman b/mantools/srctoman
new file mode 100755
index 0000000..9ea45cd
--- /dev/null
+++ b/mantools/srctoman
@@ -0,0 +1,211 @@
+#!/bin/sh
+
+# srctoman - extract manual page from source file comment
+
+# @(#) srctoman.sh 1.2 11/4/89 15:56:22
+
+LANG=
+
+# process arguments
+
+while :
+do
+ case $1 in
+ [0-9]) SECT=$1;;
+ -) LANG=$1; B='[#:]';;
+ -awk) LANG=$1; B='#';;
+ -c) LANG=$1; B='\/\*';;
+ -f) LANG=$1; B='[Cc]';;
+ -mk) LANG=$1; B='#';;
+ -n|-t) LANG=$1; B='\\"';;
+ -p) LANG=$1; B='{';;
+ -r) LANG=$1; B='#';;
+ -C) LANG=$1; B=$2; shift;;
+ -*) ERROR="unknown option: $1"; break;;
+ "") ERROR="missing file argument"; break;;
+ *) break;;
+ esac
+ shift
+done
+
+# check error status
+
+case $ERROR in
+"") ;;
+ *) echo "$0: $ERROR" 1>&2
+ echo "usage: $0 [-|-awk|-c|-f|-mk|-n|-p|-t|-r|-C] [section] file(s)" 1>&2; exit 1;;
+esac
+
+# set up for file suffix processing
+
+case $LANG in
+"") sh='[:#]'; r='#'; rh=$r; awk='#'; mk='#';
+ c='\/\*'; h=$c; y=$c; l=$c;
+ f='[Cc]'; fh=$f; p='{'; ph=$p;
+ ms='\\"'; nr=$ms; mn=$ms; man=$ms;
+esac
+
+# extract comments
+
+for i in $*
+do
+ case $LANG in
+ "") eval B\="\$`expr $i : '.*\.\([^.]*\)$'`"
+ test "$B" || { echo "$0: unknown suffix: $i; assuming c" 1>&2; B=$c; }
+ esac
+ sed '
+ /^'"$B"'++/,/^'"$B"'--/!d
+ /^'"$B"'++/d
+ /^'"$B"'--/d
+ s/[ ]*$//
+ /^'"$B"' \([A-Z]\)/{
+ s//\1/
+ /^NAME[ ]*$/{
+ N
+ s/^.*\n'"$B"'[ ]*//
+ h
+ y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
+ s/^.*$/.TH & '"$SECT"'\
+.ad\
+.fi\
+.SH NAME/
+ p
+ g
+ s/[ ][ ]*[0-9][ ]*$//
+ a\
+\\-
+ p
+ d
+ }
+ /^SUMMARY/d
+ /^DESCRIPTION/s//.SH &\
+.ad\
+.fi/
+ /^BUGS/s//.SH &\
+.ad\
+.fi/
+ /^DIAGNOSTICS/s//.SH &\
+.ad\
+.fi/
+ /^HISTORY/s//.SH &\
+.ad\
+.fi/
+ /^[A-Z][A-Z][A-Z][^a-z]*$/s//.SH "&"\
+.na\
+.nf/
+ p
+ d
+ }
+ s/^'"$B"' *//
+ s/^ //
+ s/^[ ]*$//
+ /^\\"/d
+ /^\./{
+ s/\([^ ]\)-/\1\\-/g
+ }
+ /^[^.]/{
+ s/-/\\-/g
+ }
+' $i
+done | expand
+
+exit
+
+#++
+# NAME
+# srctoman 1
+# SUMMARY
+# extract manual page from source file comment
+# PACKAGE
+# sdetools
+# SYNOPSIS
+# srctoman [-|-awk|-c|-f|-mk|-m|-n|-p|-t|-r|-C] [section] file(s)
+# DESCRIPTION
+# \fIsrctoman\fR converts comments in various programming languages to
+# UNIX-style manual pages.
+# The command processes comments in the style of newsrc(1);
+# its standard output is suitable for formatting with nroff(1) or
+# troff(1) using the "-man" macro package.
+# Typically, srctoman is invoked from make(1) scripts.
+#
+# Source files are processed in the indicated order; if no
+# files are specified the command produces no output.
+#
+# The source file language can be specified through a command-line
+# option, or can be implied by the filename suffix.
+# The expected start-of-comment symbol is shown in the last column.
+#
+# .nf
+# .ft C
+ option language comment
+
+ - shell [:#]
+ -awk awk #
+ -c c /*
+ -f fortran [Cc]
+ -mk make #
+ -n nroff \\"
+ -p pascal {
+ -t troff \\"
+ -r ratfor #
+ -C any language next argument
+#
+ suffix language comment
+
+ .awk awk #
+ .c c /*
+ .f fortran [Cc]
+ .fh fortran [Cc]
+ .h c /*
+ .l lex /*
+ .man nroff,troff \\"
+ .mk make #
+ .me nroff,troff \\"
+ .ms nroff,troff \\"
+ .nr nroff,troff \\"
+ .p pascal {
+ .ph pascal {
+ .r ratfor #
+ .rh ratfor #
+ .sh shell [:#]
+ .y yacc /*
+# .ft
+# .PP
+# .fi
+#
+# The required format of comments is discussed below, where SOC
+# stands for the start-of-comment symbol of the language being used.
+# .IP o
+# Start of manual: SOC, followed by `++'.
+# .IP o
+# Section heading: SOC, blank, section name in upper case.
+# .IP o
+# All other text: SOC and subsequent blanks or tabs are removed.
+# Lines that do not start with SOC are left unchanged (useful for
+# inclusion of program text).
+# .IP o
+# End of manual: SOC, followed by `--'.
+# An end-of-comment may follow if the source file language requires this.
+# .PP
+# The following manual sections receive a special treatment:
+# NAME and SUMMARY should appear at the beginning and in
+# this order; DESCRIPTION, DIAGNOSTICS and BUGS will be
+# right-margin adjusted.
+# Other sections may be added freely without confusing srctoman.
+# COMMANDS
+# sh(1), sed(1), expand(1)
+# SEE ALSO
+# newsrc(1)
+# DIAGNOSTICS
+# The program complains if an unknown language is specified
+# of if the language cannot be deduced from the file suffix.
+# AUTHOR(S)
+# W.Z. Venema
+# Eindhoven University of Technology
+# Department of Mathematics and Computer Science
+# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
+# CREATION DATE
+# Fri Jan 17 22:59:27 MET 1986
+# STATUS
+# srctoman.sh 1.2 11/4/89 15:56:22 (draft)
+#--
diff --git a/mantools/useparam b/mantools/useparam
new file mode 100755
index 0000000..eec1915
--- /dev/null
+++ b/mantools/useparam
@@ -0,0 +1,368 @@
+#!/bin/sh
+
+# useparam - report what configuration parameters a subsystem is using
+
+# Usage: useparam src/mumble/*.c
+
+cat "$@" | tr -cs 'a-z0-9_' '\12' | awk '
+
+BEGIN {
+
+ # Table generated with: var2user mail_params.h
+
+ table["var_mail_name"] = "mail_name"
+ table["var_helpful_warnings"] = "helpful_warnings"
+ table["var_show_unk_rcpt_table"] = "show_user_unknown_table_name"
+ table["var_notify_classes"] = "notify_classes"
+ table["var_empty_addr"] = "empty_address_recipient"
+ table["var_mail_owner"] = "mail_owner"
+ table["var_owner_uid"] = "mail_owner"
+ table["var_owner_gid"] = "mail_owner"
+ table["var_sgid_group"] = "setgid_group"
+ table["var_sgid_gid"] = "setgid_group"
+ table["var_default_privs"] = "default_privs"
+ table["var_default_uid"] = "default_privs"
+ table["var_default_gid"] = "default_privs"
+ table["var_myorigin"] = "myorigin"
+ table["var_mydest"] = "mydestination"
+ table["var_myhostname"] = "myhostname"
+ table["var_mydomain"] = "mydomain"
+ table["var_local_transport"] = "local_transport"
+ table["var_bounce_rcpt"] = "bounce_notice_recipient"
+ table["var_2bounce_rcpt"] = "2bounce_notice_recipient"
+ table["var_delay_rcpt"] = "delay_notice_recipient"
+ table["var_error_rcpt"] = "error_notice_recipient"
+ table["var_inet_interfaces"] = "inet_interfaces"
+ table["var_proxy_interfaces"] = "proxy_interfaces"
+ table["var_masq_domains"] = "masquerade_domains"
+ table["var_masq_exceptions"] = "masquerade_exceptions"
+ table["var_masq_classes"] = "masquerade_classes"
+ table["var_relayhost"] = "relayhost"
+ table["var_fallback_relay"] = "fallback_relay"
+ table["var_disable_dns"] = "disable_dns_lookups"
+ table["var_smtp_dns_lookup"] = "smtp_host_lookup"
+ table["var_smtp_mxaddr_limit"] = "smtp_mx_address_limit"
+ table["var_smtp_mxsess_limit"] = "smtp_mx_session_limit"
+ table["var_queue_dir"] = "queue_directory"
+ table["var_daemon_dir"] = "daemon_directory"
+ table["var_command_dir"] = "command_directory"
+ table["var_pid_dir"] = "process_id_directory"
+ table["var_starttime"] = "process_id_directory"
+ table["var_config_dir"] = "config_directory"
+ table["var_config_dirs"] = "alternate_config_directories"
+ table["var_db_type"] = "default_database_type"
+ table["var_syslog_facility"] = "syslog_facility"
+ table["var_always_bcc"] = "always_bcc"
+ table["var_rcpt_witheld"] = "undisclosed_recipients_header"
+ table["var_strict_rfc821_env"] = "strict_rfc821_envelopes"
+ table["var_broken_auth_clients"] = "broken_sasl_auth_clients"
+ table["var_disable_vrfy_cmd"] = "disable_vrfy_command"
+ table["var_virt_alias_maps"] = "virtual_alias_maps"
+ table["var_virt_alias_doms"] = "virtual_alias_domains"
+ table["var_virt_alias_code"] = "unknown_virtual_alias_reject_code"
+ table["var_canonical_maps"] = "canonical_maps"
+ table["var_send_canon_maps"] = "sender_canonical_maps"
+ table["var_rcpt_canon_maps"] = "recipient_canonical_maps"
+ table["var_send_bcc_maps"] = "sender_bcc_maps"
+ table["var_rcpt_bcc_maps"] = "recipient_bcc_maps"
+ table["var_transport_maps"] = "transport_maps"
+ table["var_def_transport"] = "default_transport"
+ table["var_swap_bangpath"] = "swap_bangpath"
+ table["var_append_at_myorigin"] = "append_at_myorigin"
+ table["var_append_dot_mydomain"] = "append_dot_mydomain"
+ table["var_percent_hack"] = "allow_percent_hack"
+ table["var_alias_maps"] = "alias_maps"
+ table["var_biff"] = "biff"
+ table["var_allow_commands"] = "allow_mail_to_commands"
+ table["var_command_maxtime"] = "command_time_limit"
+ table["var_allow_files"] = "allow_mail_to_files"
+ table["var_local_cmd_shell"] = "local_command_shell"
+ table["var_alias_db_map"] = "alias_database"
+ table["var_luser_relay"] = "luser_relay"
+ table["var_mail_spool_dir"] = "mail_spool_directory"
+ table["var_home_mailbox"] = "home_mailbox"
+ table["var_mailbox_command"] = "mailbox_command"
+ table["var_mailbox_cmd_maps"] = "mailbox_command_maps"
+ table["var_mailbox_transport"] = "mailbox_transport"
+ table["var_fallback_transport"] = "fallback_transport"
+ table["var_forward_path"] = "forward_path"
+ table["var_mailbox_lock"] = "mailbox_delivery_lock"
+ table["var_mailbox_limit"] = "mailbox_size_limit"
+ table["var_prop_extension"] = "propagate_unmatched_extensions"
+ table["var_rcpt_delim"] = "recipient_delimiter"
+ table["var_cmd_exp_filter"] = "command_expansion_filter"
+ table["var_fwd_exp_filter"] = "forward_expansion_filter"
+ table["var_deliver_hdr"] = "prepend_delivered_header"
+ table["var_enable_orcpt"] = "enable_original_recipient"
+ table["var_enable_errors_to"] = "enable_errors_to"
+ table["var_exp_own_alias"] = "expand_owner_alias"
+ table["var_stat_home_dir"] = "require_home_directory"
+ table["var_dup_filter_limit"] = "duplicate_filter_limit"
+ table["var_relocated_maps"] = "relocated_maps"
+ table["var_min_backoff_time"] = "minimal_backoff_time"
+ table["var_max_backoff_time"] = "maximal_backoff_time"
+ table["var_max_queue_time"] = "maximal_queue_lifetime"
+ table["var_dsn_queue_time"] = "bounce_queue_lifetime"
+ table["var_delay_warn_time"] = "delay_warning_time"
+ table["var_qmgr_active_limit"] = "qmgr_message_active_limit"
+ table["var_qmgr_rcpt_limit"] = "qmgr_message_recipient_limit"
+ table["var_qmgr_msg_rcpt_limit"] = "qmgr_message_recipient_minimum"
+ table["var_xport_rcpt_limit"] = "default_recipient_limit"
+ table["var_stack_rcpt_limit"] = "default_extra_recipient_limit"
+ table["var_delivery_slot_cost"] = "default_delivery_slot_cost"
+ table["var_delivery_slot_loan"] = "default_delivery_slot_loan"
+ table["var_delivery_slot_discount"] = "default_delivery_slot_discount"
+ table["var_min_delivery_slots"] = "default_minimum_delivery_slots"
+ table["var_qmgr_fudge"] = "qmgr_fudge_factor"
+ table["var_init_dest_concurrency"] = "initial_destination_concurrency"
+ table["var_dest_con_limit"] = "default_destination_concurrency_limit"
+ table["var_local_con_lim"] = "local"
+ table["var_dest_rcpt_limit"] = "default_destination_recipient_limit"
+ table["var_local_rcpt_lim"] = "local"
+ table["var_transport_retry_time"] = "transport_retry_time"
+ table["var_defer_xports"] = "defer_transports"
+ table["var_qmgr_clog_warn_time"] = "qmgr_clog_warn_time"
+ table["var_proc_limit"] = "default_process_limit"
+ table["var_throttle_time"] = "service_throttle_time"
+ table["var_use_limit"] = "max_use"
+ table["var_idle_limit"] = "max_idle"
+ table["var_event_drain"] = "application_event_drain_time"
+ table["var_ipc_idle_limit"] = "ipc_idle"
+ table["var_ipc_ttl_limit"] = "ipc_ttl"
+ table["var_line_limit"] = "line_length_limit"
+ table["var_debug_peer_list"] = "debug_peer_list"
+ table["var_debug_peer_level"] = "debug_peer_level"
+ table["var_hash_queue_names"] = "hash_queue_names"
+ table["var_hash_queue_depth"] = "hash_queue_depth"
+ table["var_bestmx_transp"] = "best_mx_transport"
+ table["var_smtp_conn_tmout"] = "smtp_connect_timeout"
+ table["var_smtp_helo_tmout"] = "smtp_helo_timeout"
+ table["var_smtp_xfwd_tmout"] = "smtp_xforward_timeout"
+ table["var_smtp_mail_tmout"] = "smtp_mail_timeout"
+ table["var_smtp_rcpt_tmout"] = "smtp_rcpt_timeout"
+ table["var_smtp_data0_tmout"] = "smtp_data_init_timeout"
+ table["var_smtp_data1_tmout"] = "smtp_data_xfer_timeout"
+ table["var_smtp_data2_tmout"] = "smtp_data_done_timeout"
+ table["var_smtp_rset_tmout"] = "smtp_rset_timeout"
+ table["var_smtp_quit_tmout"] = "smtp_quit_timeout"
+ table["var_smtp_quote_821_env"] = "smtp_quote_rfc821_envelope"
+ table["var_smtp_skip_4xx_greeting"] = "smtp_skip_4xx_greeting"
+ table["var_smtp_skip_5xx_greeting"] = "smtp_skip_5xx_greeting"
+ table["var_ign_mx_lookup_err"] = "ignore_mx_lookup_error"
+ table["var_skip_quit_resp"] = "smtp_skip_quit_response"
+ table["var_smtp_always_ehlo"] = "smtp_always_send_ehlo"
+ table["var_smtp_never_ehlo"] = "smtp_never_send_ehlo"
+ table["var_smtp_bind_addr"] = "smtp_bind_address"
+ table["var_smtp_helo_name"] = "smtp_helo_name"
+ table["var_smtp_rand_addr"] = "smtp_randomize_addresses"
+ table["var_smtp_line_limit"] = "smtp_line_length_limit"
+ table["var_smtp_pix_thresh"] = "smtp_pix_workaround_threshold_time"
+ table["var_smtp_pix_delay"] = "smtp_pix_workaround_delay_time"
+ table["var_smtp_defer_mxaddr"] = "smtp_defer_if_no_mx_address_found"
+ table["var_smtp_send_xforward"] = "smtp_send_xforward_command"
+ table["var_smtpd_banner"] = "smtpd_banner"
+ table["var_smtpd_tmout"] = "smtpd_timeout"
+ table["var_smtpd_rcpt_limit"] = "smtpd_recipient_limit"
+ table["var_smtpd_soft_erlim"] = "smtpd_soft_error_limit"
+ table["var_smtpd_hard_erlim"] = "smtpd_hard_error_limit"
+ table["var_smtpd_err_sleep"] = "smtpd_error_sleep_time"
+ table["var_smtpd_junk_cmd_limit"] = "smtpd_junk_command_limit"
+ table["var_smtpd_hist_thrsh"] = "smtpd_history_flush_threshold"
+ table["var_smtpd_noop_cmds"] = "smtpd_noop_commands"
+ table["var_smtpd_sasl_enable"] = "smtpd_sasl_auth_enable"
+ table["var_smtpd_sasl_opts"] = "smtpd_sasl_security_options"
+ table["var_smtpd_sasl_appname"] = "smtpd_sasl_application_name"
+ table["var_smtpd_sasl_realm"] = "smtpd_sasl_local_domain"
+ table["var_smtpd_snd_auth_maps"] = "smtpd_sender_login_maps"
+ table["var_smtp_sasl_enable"] = "smtp_sasl_auth_enable"
+ table["var_smtp_sasl_mechs"] = "smtp_sasl_mechanism_filter"
+ table["var_smtp_sasl_passwd"] = "smtp_sasl_password_maps"
+ table["var_smtp_sasl_opts"] = "smtp_sasl_security_options"
+ table["var_lmtpd_banner"] = "lmtpd_banner"
+ table["var_lmtpd_tmout"] = "lmtpd_timeout"
+ table["var_lmtpd_rcpt_limit"] = "lmtpd_recipient_limit"
+ table["var_lmtpd_soft_erlim"] = "lmtpd_soft_error_limit"
+ table["var_lmtpd_hard_erlim"] = "lmtpd_hard_error_limit"
+ table["var_lmtpd_err_sleep"] = "lmtpd_error_sleep_time"
+ table["var_lmtpd_junk_cmd_limit"] = "lmtpd_junk_command_limit"
+ table["var_smtpd_sasl_exceptions_networks"] = "smtpd_sasl_exceptions_networks"
+ table["var_lmtpd_sasl_enable"] = "lmtpd_sasl_auth_enable"
+ table["var_lmtpd_sasl_opts"] = "lmtpd_sasl_security_options"
+ table["var_lmtpd_sasl_realm"] = "lmtpd_sasl_local_domain"
+ table["var_lmtp_sasl_enable"] = "lmtp_sasl_auth_enable"
+ table["var_lmtp_sasl_passwd"] = "lmtp_sasl_password_maps"
+ table["var_lmtp_sasl_opts"] = "lmtp_sasl_security_options"
+ table["var_lmtp_tcp_port"] = "lmtp_tcp_port"
+ table["var_lmtp_cache_conn"] = "lmtp_cache_connection"
+ table["var_lmtp_skip_quit_resp"] = "lmtp_skip_quit_response"
+ table["var_lmtp_conn_tmout"] = "lmtp_connect_timeout"
+ table["var_lmtp_rset_tmout"] = "lmtp_rset_timeout"
+ table["var_lmtp_lhlo_tmout"] = "lmtp_lhlo_timeout"
+ table["var_lmtp_xfwd_tmout"] = "lmtp_xforward_timeout"
+ table["var_lmtp_mail_tmout"] = "lmtp_mail_timeout"
+ table["var_lmtp_rcpt_tmout"] = "lmtp_rcpt_timeout"
+ table["var_lmtp_data0_tmout"] = "lmtp_data_init_timeout"
+ table["var_lmtp_data1_tmout"] = "lmtp_data_xfer_timeout"
+ table["var_lmtp_data2_tmout"] = "lmtp_data_done_timeout"
+ table["var_lmtp_quit_tmout"] = "lmtp_quit_timeout"
+ table["var_lmtp_send_xforward"] = "lmtp_send_xforward_command"
+ table["var_hopcount_limit"] = "hopcount_limit"
+ table["var_header_limit"] = "header_size_limit"
+ table["var_token_limit"] = "header_address_token_limit"
+ table["var_virt_recur_limit"] = "virtual_alias_recursion_limit"
+ table["var_virt_expan_limit"] = "virtual_alias_expansion_limit"
+ table["var_message_limit"] = "message_size_limit"
+ table["var_queue_minfree"] = "queue_minfree"
+ table["var_header_checks"] = "header_checks"
+ table["var_mimehdr_checks"] = "mime_header_checks"
+ table["var_nesthdr_checks"] = "nested_header_checks"
+ table["var_body_checks"] = "body_checks"
+ table["var_body_check_len"] = "body_checks_size_limit"
+ table["var_bounce_limit"] = "bounce_size_limit"
+ table["var_double_bounce_sender"] = "double_bounce_sender"
+ table["var_fork_tries"] = "fork_attempts"
+ table["var_fork_delay"] = "fork_delay"
+ table["var_flock_tries"] = "deliver_lock_attempts"
+ table["var_flock_delay"] = "deliver_lock_delay"
+ table["var_flock_stale"] = "stale_lock_time"
+ table["var_mailtool_compat"] = "sun_mailtool_compatibility"
+ table["var_daemon_timeout"] = "daemon_timeout"
+ table["var_ipc_timeout"] = "ipc_timeout"
+ table["var_trigger_timeout"] = "trigger_timeout"
+ table["var_mynetworks"] = "mynetworks"
+ table["var_mynetworks_style"] = "mynetworks_style"
+ table["var_relay_domains"] = "relay_domains"
+ table["var_relay_transport"] = "relay_transport"
+ table["var_relay_rcpt_maps"] = "relay_recipient_maps"
+ table["var_relay_rcpt_code"] = "unknown_relay_recipient_reject_code"
+ table["var_client_checks"] = "smtpd_client_restrictions"
+ table["var_helo_required"] = "smtpd_helo_required"
+ table["var_helo_checks"] = "smtpd_helo_restrictions"
+ table["var_mail_checks"] = "smtpd_sender_restrictions"
+ table["var_rcpt_checks"] = "smtpd_recipient_restrictions"
+ table["var_etrn_checks"] = "smtpd_etrn_restrictions"
+ table["var_data_checks"] = "smtpd_data_restrictions"
+ table["var_rest_classes"] = "smtpd_restriction_classes"
+ table["var_allow_untrust_route"] = "allow_untrusted_routing"
+ table["var_reject_code"] = "reject_code"
+ table["var_defer_code"] = "defer_code"
+ table["var_unk_client_code"] = "unknown_client_reject_code"
+ table["var_bad_name_code"] = "invalid_hostname_reject_code"
+ table["var_unk_name_code"] = "unknown_hostname_reject_code"
+ table["var_non_fqdn_code"] = "non_fqdn_reject_code"
+ table["var_unk_addr_code"] = "unknown_address_reject_code"
+ table["var_smtpd_rej_unl_from"] = "smtpd_reject_unlisted_sender"
+ table["var_smtpd_rej_unl_rcpt"] = "smtpd_reject_unlisted_recipient"
+ table["var_unv_rcpt_code"] = "unverified_recipient_reject_code"
+ table["var_unv_from_code"] = "unverified_sender_reject_code"
+ table["var_mul_rcpt_code"] = "multi_recipient_bounce_reject_code"
+ table["var_relay_code"] = "relay_domains_reject_code"
+ table["var_perm_mx_networks"] = "permit_mx_backup_networks"
+ table["var_access_map_code"] = "access_map_reject_code"
+ table["var_rbl_reply_maps"] = "rbl_reply_maps"
+ table["var_def_rbl_reply"] = "default_rbl_reply"
+ table["var_maps_rbl_code"] = "maps_rbl_reject_code"
+ table["var_maps_rbl_domains"] = "maps_rbl_domains"
+ table["var_smtpd_delay_reject"] = "smtpd_delay_reject"
+ table["var_smtpd_null_key"] = "smtpd_null_access_lookup_key"
+ table["var_smtpd_exp_filter"] = "smtpd_expansion_filter"
+ table["var_local_rcpt_maps"] = "local_recipient_maps"
+ table["var_local_rcpt_code"] = "unknown_local_recipient_reject_code"
+ table["var_proxy_read_maps"] = "proxy_read_maps"
+ table["var_procname"] = "process_name"
+ table["var_pid"] = "process_id"
+ table["var_dont_remove"] = "dont_remove"
+ table["var_soft_bounce"] = "soft_bounce"
+ table["var_ownreq_special"] = "owner_request_special"
+ table["var_allow_min_user"] = "allow_min_user"
+ table["var_filter_xport"] = "content_filter"
+ table["var_fflush_domains"] = "fast_flush_domains"
+ table["var_fflush_purge"] = "fast_flush_purge_time"
+ table["var_fflush_refresh"] = "fast_flush_refresh_time"
+ table["var_import_environ"] = "import_environment"
+ table["var_export_environ"] = "export_environment"
+ table["var_virt_transport"] = "virtual_transport"
+ table["var_virt_mailbox_maps"] = "virtual_mailbox_maps"
+ table["var_virt_mailbox_doms"] = "virtual_mailbox_domains"
+ table["var_virt_mailbox_code"] = "unknown_virtual_mailbox_reject_code"
+ table["var_virt_uid_maps"] = "virtual_uid_maps"
+ table["var_virt_gid_maps"] = "virtual_gid_maps"
+ table["var_virt_minimum_uid"] = "virtual_minimum_uid"
+ table["var_virt_mailbox_base"] = "virtual_mailbox_base"
+ table["var_virt_mailbox_limit"] = "virtual_mailbox_limit"
+ table["var_virt_mailbox_lock"] = "virtual_mailbox_lock"
+ table["var_syslog_name"] = "syslog_name"
+ table["var_qmqpd_clients"] = "qmqpd_authorized_clients"
+ table["var_qmqpd_timeout"] = "qmqpd_timeout"
+ table["var_qmqpd_err_sleep"] = "qmqpd_error_delay"
+ table["var_verp_delims"] = "default_verp_delimiters"
+ table["var_verp_filter"] = "verp_delimiter_filter"
+ table["var_verp_bounce_off"] = "disable_verp_bounces"
+ table["var_verp_clients"] = "smtpd_authorized_verp_clients"
+ table["var_xclient_hosts"] = "smtpd_authorized_xclient_hosts"
+ table["var_xforward_hosts"] = "smtpd_authorized_xforward_hosts"
+ table["var_in_flow_delay"] = "in_flow_delay"
+ table["var_par_dom_match"] = "parent_domain_matches_subdomains"
+ table["var_fault_inj_code"] = "fault_injection_code"
+ table["var_resolve_dequoted"] = "resolve_dequoted_address"
+ table["var_bounce_service"] = "bounce_service_name"
+ table["var_cleanup_service"] = "cleanup_service_name"
+ table["var_defer_service"] = "defer_service_name"
+ table["var_pickup_service"] = "pickup_service_name"
+ table["var_queue_service"] = "queue_service_name"
+ table["var_rewrite_service"] = "rewrite_service_name"
+ table["var_showq_service"] = "showq_service_name"
+ table["var_error_service"] = "error_service_name"
+ table["var_flush_service"] = "flush_service_name"
+ table["var_verify_service"] = "address_verify_service_name"
+ table["var_verify_map"] = "address_verify_map"
+ table["var_verify_pos_exp"] = "address_verify_positive_expire_time"
+ table["var_verify_pos_try"] = "address_verify_positive_refresh_time"
+ table["var_verify_neg_exp"] = "address_verify_negative_expire_time"
+ table["var_verify_neg_try"] = "address_verify_negative_refresh_time"
+ table["var_verify_neg_cache"] = "address_verify_negative_cache"
+ table["var_verify_sender"] = "address_verify_sender"
+ table["var_verify_poll_count"] = "address_verify_poll_count"
+ table["var_verify_poll_delay"] = "address_verify_poll_delay"
+ table["var_vrfy_local_xport"] = "address_verify_local_transport"
+ table["var_vrfy_virt_xport"] = "address_verify_virtual_transport"
+ table["var_vrfy_relay_xport"] = "address_verify_relay_transport"
+ table["var_vrfy_def_xport"] = "address_verify_default_transport"
+ table["var_vrfy_relayhost"] = "address_verify_relayhost"
+ table["var_vrfy_xport_maps"] = "address_verify_transport_maps"
+ table["var_trace_service"] = "trace_service_name"
+ table["var_mbx_defer_errs"] = "mailbox_defer_errors"
+ table["var_mdr_defer_errs"] = "maildir_defer_errors"
+ table["var_db_create_buf"] = "berkeley_db_create_buffer_size"
+ table["var_db_read_buf"] = "berkeley_db_read_buffer_size"
+ table["var_qattr_count_limit"] = "queue_file_attribute_count_limit"
+ table["var_mime_maxdepth"] = "mime_nesting_limit"
+ table["var_mime_bound_len"] = "mime_boundary_length_limit"
+ table["var_disable_mime_input"] = "disable_mime_input_processing"
+ table["var_disable_mime_oconv"] = "disable_mime_output_conversion"
+ table["var_strict_8bitmime"] = "strict_8bitmime"
+ table["var_strict_7bit_hdrs"] = "strict_7bit_headers"
+ table["var_strict_8bit_body"] = "strict_8bitmime_body"
+ table["var_strict_encoding"] = "strict_mime_encoding_domain"
+ table["var_sender_routing"] = "sender_based_routing"
+ table["var_xport_null_key"] = "transport_null_address_lookup_key"
+ table["var_oldlog_compat"] = "backwards_bounce_logfile_compatibility"
+ table["var_smtpd_proxy_filt"] = "smtpd_proxy_filter"
+ table["var_smtpd_proxy_ehlo"] = "smtpd_proxy_ehlo"
+ table["var_smtpd_proxy_tmout"] = "smtpd_proxy_timeout"
+ table["var_smtpd_input_transp"] = "receive_override_options"
+ table["var_smtpd_policy_tmout"] = "smtpd_policy_service_timeout"
+ table["var_smtpd_policy_idle"] = "smtpd_policy_service_max_idle"
+ table["var_smtpd_policy_ttl"] = "smtpd_policy_service_max_ttl"
+ table["var_smtpd_crate_limit"] = "smtpd_client_connection_rate_limit"
+ table["var_smtpd_cconn_limit"] = "smtpd_client_connection_count_limit"
+ table["var_smtpd_hoggers"] = "smtpd_client_connection_limit_exceptions"
+ table["var_anvil_time_unit"] = "client_rate_time_unit"
+ table["var_anvil_stat_time"] = "client_event_status_update_time"
+ table["var_anvil_service"] = "client_connection_rate_service"
+
+}
+
+{ if (name = table[$1]) print name }
+
+' | sort -u
diff --git a/mantools/user2var b/mantools/user2var
new file mode 100755
index 0000000..e010704
--- /dev/null
+++ b/mantools/user2var
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# user2var - create (parameter name -> variable name) mapping
+
+# Usage: user2var mail_params.h
+
+awk '
+
+/^#define[ ]+VAR_/ { name=$3 }
+
+/^extern.*var_/ { print "table[" name "] = \"" $3 "\"" }
+
+' "$@" | tr -d ';*'
diff --git a/mantools/var2user b/mantools/var2user
new file mode 100755
index 0000000..78bb57c
--- /dev/null
+++ b/mantools/var2user
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# var2user - create (variable name -> parameter name) mapping
+
+# Usage: var2user mail_params.h
+
+awk '
+
+/^#define[ ]+VAR_/ { name=$3 }
+
+/^extern.*var_/ { print "table[\"" $3 "\"] = " name }
+
+' "$@" | tr -d ';*'
diff --git a/mantools/xpostconf b/mantools/xpostconf
new file mode 100755
index 0000000..6721e0a
--- /dev/null
+++ b/mantools/xpostconf
@@ -0,0 +1,153 @@
+#!/usr/bin/perl
+
+use Getopt::Std;
+
+# xpostconf - extract parameter info from postconf prototype file
+
+# Usage: xpostconf [options] protofile [parameter...]
+#
+# -b: Brief output: print only the first sentence of each definition
+#
+# -c: print the classes named on the command line (default: all).
+#
+# -h: print help message.
+#
+# -p: print the parameters named on the command line (default: all).
+#
+# -s specfile: process the entries listed in the named file: ordinary
+# text is copied as is,
+# %CLASS class-name mode
+# %PARAM param-name mode
+# are replaced by the respective information. Mode is b (brief)
+# f (full) or i (ignore).
+#
+# If no -s is specified, extracts the named parameter text (all
+# parameters by default).
+
+$opt_b = undef;
+$opt_c = undef;
+$opt_p = undef;
+$opt_s = undef;
+$opt_v = undef;
+getopts("bcps:v");
+
+die "Usage: $0 [-bcpv] [-s specfile] protofile [parameter...]\n"
+ unless $protofile = shift(@ARGV);
+
+# Save one definition.
+
+sub save_text {
+ if ($category eq "PARAM") {
+ $param_text{$name} = $text;
+ if ($opt_v) {
+ printf "saving entry %s %.20s..\n", $name, $text;
+ }
+ } elsif ($category eq "CLASS") {
+ $class_text{$name} = $text;
+ if ($opt_v) {
+ printf "saving class %s %.20s..\n", $name, $text;
+ }
+ } else {
+ die "Unknown category: $category. Need PARAM or CLASS.\n";
+ }
+}
+
+# Read the whole file even if we want to print only one parameter.
+
+open(POSTCONF, $protofile) || die " cannot open $protofile: $!\n";
+
+while(<POSTCONF>) {
+
+ next if /^#/ && $text eq "";
+ next unless ($name || /\S/);
+
+ if (/^%(PARAM|CLASS)/) {
+
+ # Save the accumulated text.
+
+ if ($name && $text) {
+ save_text();
+ }
+
+ # Reset the parameter name and accumulated text.
+
+ $name = $text = "";
+ $category = $1;
+
+ # Accumulate the parameter name and default value.
+
+ do {
+ $text .= $_;
+ } while(($_ = <POSTCONF>) && /\S/);
+ ($junk, $name, $junk) = split(/\s+/, $text, 3);
+
+ }
+
+ # Accumulate the text in the class or parameter definition.
+
+ $text .= $_;
+
+}
+
+# Save the last definition.
+
+if ($name && $text) {
+ save_text();
+}
+
+# If working from a spec file, emit output in the specified order.
+
+if ($opt_s) {
+ open(SPEC, "$opt_s") || die "cannot open $opt_s: $!\m";
+ while(<SPEC>) {
+ if (/^%/) {
+ ($category, $name, $mode) = split(/\s+/, substr($_, 1));
+ if ($category eq "CLASS") {
+ die "Unknown class name: $name.\n"
+ unless $text = $class_text{$name};
+ } elsif ($category eq "PARAM") {
+ die "Unknown parameter name: $name.\n"
+ unless $text = $param_text{$name};
+ } else {
+ die "Unknown category: $category. Need CLASS or PARAM\n";
+ }
+ if ($mode eq "i") {
+ next;
+ } elsif ($mode eq "b") {
+ $text =~ s/\.\s.*/.\n\n/s;
+ } elsif ($mode ne "p") {
+ die "Unknown mode: $mode. Need b or p or i,\n";
+ }
+ print $text, "\n";
+ } else {
+ print;
+ }
+ }
+ exit;
+}
+
+# Print all the parameters.
+
+if ($opt_c) {
+ $what = \%class_text;
+} else {
+ $what = \%param_text;
+}
+
+if ($#ARGV < 0) {
+ for $name (sort keys %{$what}) {
+ $text = ${$what}{$name};
+ $text =~ s/\.\s.*/.\n\n/s if ($opt_b);
+ print $text, "\n";
+ }
+}
+
+# Print parameters in the specified order.
+
+else {
+ for $name (@ARGV) {
+ $text = ${$what}{$name};
+ $text =~ s/\.\s.*/.\n\n/s if ($opt_b);
+ print $text;
+ }
+}
diff --git a/mantools/xpostdef b/mantools/xpostdef
new file mode 100755
index 0000000..6c8873f
--- /dev/null
+++ b/mantools/xpostdef
@@ -0,0 +1,121 @@
+#!/usr/bin/perl
+
+# Usage: xpostdef postconf.proto >postconf.proto.new
+
+# Update parameter default values in postconf prototype file.
+
+$POSTCONF="postconf";
+
+# Read all the default parameter values. This also provides us with
+# a list of all the parameters that postconf knows about.
+
+open(POSTCONF, "$POSTCONF -d|") || die "cannot run $POSTCONF -d: !$\n";
+while(<POSTCONF>) {
+ chop;
+ if (($name, $defval) = split(/\s+=\s+/, $_, 2)) {
+ $defval =~ s/&/\&amp;/g;
+ $defval =~ s/</\&lt;/g;
+ $defval =~ s/>/\&gt;/g;
+ $defval =~ s/\s+$//;
+ $defaults{$name} = $defval;
+ } else {
+ die "unexpected $POSTCONF output: $_\n";
+ }
+}
+close(POSTCONF) || die "$POSTCONF failed: $!\n";
+
+# Censor out default values that are system or version dependent, or
+# that don't display well.
+
+$censored = <<EOF;
+alias_database
+alias_maps
+command_directory
+command_expansion_filter
+config_directory
+daemon_directory
+default_database_type
+default_rbl_reply
+execution_directory_expansion_filter
+export_environment
+forward_expansion_filter
+forward_path
+html_directory
+import_environment
+mail_release_date
+mail_spool_directory
+mail_version
+mailbox_delivery_lock
+mailq_path
+manpage_directory
+mydomain
+myhostname
+mynetworks
+newaliases_path
+parent_domain_matches_subdomains
+proxy_read_maps
+queue_directory
+readme_directory
+sendmail_path
+smtpd_expansion_filter
+tls_random_source
+virtual_mailbox_lock
+milter_connect_macros
+milter_helo_macros
+milter_mail_macros
+milter_rcpt_macros
+milter_data_macros
+milter_unknown_command_macros
+milter_end_of_data_macros
+EOF
+
+for $name (split(/\s+/, $censored)) {
+ $defaults{$name} = "see \"postconf -d\" output";
+}
+
+# Process the postconf prototype file, and update default values
+# with output from the postconf command. Leave alone any defaults
+# that postconf didn't know about. This can happen when conditional
+# features have been compile time disabled.
+
+$name = $defval = $text = $line = "";
+
+while(<>) {
+ if (/^%PARAM/) {
+
+ # Print the updated parameter text. Keep the old default if
+ # postconf doesn't have a suitable one.
+
+ if ($name) {
+ $defval = $defaults{$name} if (defined($defaults{$name}));
+ print "%PARAM $name $defval\n";
+ }
+ print $text;
+
+ # Reset the parameter name, default, and accumulated text.
+
+ $name = $defval = $text = $line = "";
+
+ # Accumulate the parameter name and default value.
+
+ do {
+ $_ =~ s/\s+$//;
+ $line .= " " . $_;
+ } while(($_ = <POSTCONF>) && /^../);
+ ($junk, $class, $name, $defval) = split(/\s+/, $line, 4);
+ } else {
+
+ # Accumulate the text in the parameter definition.
+
+ $_ =~ s/\s+$/\n/;
+ $text .= $_;
+
+ }
+}
+
+# Fix the last parameter.
+
+if ($name && $text) {
+ $defval = $defaults{$name} if (defined($defaults{$name}));
+ print "%PARAM $name $defval\n$text";
+}