diff options
Diffstat (limited to 'mantools')
51 files changed, 5408 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-double-cc b/mantools/check-double-cc new file mode 100755 index 0000000..61ffc5b --- /dev/null +++ b/mantools/check-double-cc @@ -0,0 +1,8 @@ +#!/bin/sh + +# Finds double words in C comments. See mantools/comment.c for 'comment' +# source code. + +LANG=C; export LANG + +find src -name '*.[hc]' | xargs cat | comment | mantools/deroff | mantools/find-double | fgrep -vxf proto/stop.double-cc diff --git a/mantools/check-double-install-proto-text b/mantools/check-double-install-proto-text new file mode 100755 index 0000000..bab88bc --- /dev/null +++ b/mantools/check-double-install-proto-text @@ -0,0 +1,7 @@ +#!/bin/sh + +# Finds double words in install and proto text files. + +LANG=C; export LANG + +(ls *install* proto/* | egrep -v 'stop|Makefile|html|\.proto' | xargs mantools/deroff; cat RELEASE_NOTES) | mantools/find-double | fgrep -vxf proto/stop.double-install-proto-text diff --git a/mantools/check-double-proto-html b/mantools/check-double-proto-html new file mode 100755 index 0000000..234a774 --- /dev/null +++ b/mantools/check-double-proto-html @@ -0,0 +1,7 @@ +#!/bin/sh + +# Finds double words in proto html files. + +LANG=C; export LANG + +ls proto/*.html proto/*.proto | xargs mantools/dehtml | mantools/find-double | fgrep -vxf proto/stop.double-proto-html diff --git a/mantools/check-postfix-files b/mantools/check-postfix-files new file mode 100755 index 0000000..ea85d40 --- /dev/null +++ b/mantools/check-postfix-files @@ -0,0 +1,32 @@ +#!/bin/sh + +# Reports missing documentation file names in postfix-files. For +# simplicity and maintainability this looks at file basenames only. +# The odds that a file is installed in the wrong place are small. + +trap 'rm -f expected.tmp actual.tmp' 0 1 2 3 15 + +LANG=C; export LANG +LC_ALL=C; export LC_ALL + +# Extract file basenames from postfix-files. + +awk -F: ' + BEGIN { want["f"] = want["h"] = want["l"] = want["p"] = 1 } + want[$2] == 1 { n = split($1, path, "/"); print path[n] } +' conf/postfix-files | sort >actual.tmp + +# Create a list of expected names, excluding files that aren't installed. + +(ls man/man?/* html/*.html |sed 's/.*\///' | egrep -v '^makedefs.1 +^posttls-finger.1 +^qmqp-sink.1 +^qmqp-source.1 +^qshape.1 +^smtp-sink.1 +^smtp-source.1' +ls README_FILES) | sort >expected.tmp + +# Compare the expected names against the names in postfix-files. + +comm -23 expected.tmp actual.tmp diff --git a/mantools/check-postlink b/mantools/check-postlink new file mode 100755 index 0000000..21472d6 --- /dev/null +++ b/mantools/check-postlink @@ -0,0 +1,57 @@ +#!/bin/sh + +# Reports parameter names that have no postlink rules. + +LANG=C; export LANG +LC_ALL=C; export LC_ALL + +trap 'rm -f postlink.tmp postconf.tmp stoplist.tmp 2>/dev/null' 0 1 2 3 15 + +# Extract parameters from postlink script. This also produces names +# of obsolete parameters, and non-parameter names such as SMTPD +# access restrictions and mask names. + +sed -n '/[ ].*href="postconf\.5\.html#/{ + s/^[^#]*#// + s/".*// + p +}' mantools/postlink | sort > postlink.tmp + +# Extract parameters from postconf output, using the stock configurations. + +bin/postconf -dHc conf | sort >postconf.tmp + +# Filter the postconf output through a stoplist. First, parameter +# names prefixed by their service name. + +for xport in error lmtp local relay retry smtp virtual +do + cat <<EOF +${xport}_delivery_slot_cost +${xport}_delivery_slot_discount +${xport}_delivery_slot_loan +${xport}_destination_concurrency_failed_cohort_limit +${xport}_destination_concurrency_limit +${xport}_destination_concurrency_negative_feedback +${xport}_destination_concurrency_positive_feedback +${xport}_destination_rate_delay +${xport}_destination_recipient_limit +${xport}_extra_recipient_limit +${xport}_initial_destination_concurrency +${xport}_minimum_delivery_slots +${xport}_recipient_limit +${xport}_recipient_refill_delay +${xport}_recipient_refill_limit +${xport}_transport_rate_delay +EOF +done >stoplist.tmp + +# Second, pseudo parameters, read-only parameters, etc. + +cat >>stoplist.tmp <<'EOF' +stress +EOF + +# Report names from postconf that have no rule in mantools/postlink. + +comm -23 postconf.tmp postlink.tmp | fgrep -vx -f stoplist.tmp diff --git a/mantools/check-spell-cc b/mantools/check-spell-cc new file mode 100755 index 0000000..ab22470 --- /dev/null +++ b/mantools/check-spell-cc @@ -0,0 +1,8 @@ +#!/bin/sh + +# Spellchecks comments in C source code. See mantools/comment.c for +# 'comment' source code. + +LANG=C; export LANG + +find . -name *.[hc] | xargs cat | comment | mantools/deroff | spell | fgrep -vxf proto/stop | fgrep -vxf proto/stop.spell-cc diff --git a/mantools/check-spell-install-proto-text b/mantools/check-spell-install-proto-text new file mode 100755 index 0000000..19b8140 --- /dev/null +++ b/mantools/check-spell-install-proto-text @@ -0,0 +1,7 @@ +#!/bin/sh + +# Spellchecks the release notes, install scripts, and proto non-html files. + +LANG=C; export LANG + +(ls *install* proto/* | egrep -v 'stop|Makefile|html|\.proto' | mantools/deroff; cat RELEASE_NOTES) | spell | fgrep -vxf proto/stop diff --git a/mantools/check-spell-proto-html b/mantools/check-spell-proto-html new file mode 100755 index 0000000..3d05d66 --- /dev/null +++ b/mantools/check-spell-proto-html @@ -0,0 +1,7 @@ +#!/bin/sh + +# Spellchecks the proto HTML files. + +LANG=C; export LANG + +mantools/dehtml proto/*html proto/*.proto | spell | fgrep -vxf proto/stop | fgrep -vxf proto/stop.spell-proto-html diff --git a/mantools/comment.c b/mantools/comment.c new file mode 100644 index 0000000..4372d44 --- /dev/null +++ b/mantools/comment.c @@ -0,0 +1,66 @@ +#include <stdio.h> + +void copy_comment() +{ + int c; + + while ((c = getchar()) != EOF) { + if (c == '*') { + if ((c = getchar()) == '/') { + putchar('\n'); + return; + } + if (c != EOF) + ungetc(c, stdin); + putchar('*'); + } else { + putchar(c); + } + } +} + +void skip_string(int quote) +{ + int c; + + while ((c = getchar()) != EOF) { + if (c == quote) { + return; + } else if (c == '\\') { + getchar(); + } + } +} + +int main() +{ + int c; + + while ((c = getchar()) != EOF) { + switch (c) { + case '/': + if ((c = getchar()) == '*') { + copy_comment(); + } else if (c == '/') { + while ((c = getchar()) != EOF) { + putchar(c); + if (c == '\n') + break; + } + } else { + if (c != EOF) + ungetc(c, stdin); + } + break; + case '"': + case '\'': + skip_string(c); + break; + case '\\': + (void) getchar(); + break; + default: + break; + } + } +} 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/deroff b/mantools/deroff new file mode 100755 index 0000000..d538e6e --- /dev/null +++ b/mantools/deroff @@ -0,0 +1,7 @@ +#!/bin/sh + +sed ' + s/^\.[^ ]*// + s/\\f.//g + s/\\(..//g +' "$@" 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-double b/mantools/find-double new file mode 100755 index 0000000..371663e --- /dev/null +++ b/mantools/find-double @@ -0,0 +1,13 @@ +#!/bin/sh + +sed 's/[^A-Z0-9a-z_][^A-Z0-9a-z_]*/ /g' "$@" | awk ' + { for (i = 1; i <= NF; i++) { + if (length($i) > 1 && $(i) == last) { + if (i == 1) + printf("%s ", last) + print + } + last = $(i) + } + } +' 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/≤/<=/g; + $block =~ s/≥/>=/g; + $block =~ s/</</g; + $block =~ s/>/>/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/≤/<=/g; + $defval =~ s/≥/>=/g; + $defval =~ s/</</g; + $defval =~ s/>/>/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..fb94c3f --- /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=utf-8"> + +</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..e696fd3 --- /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=utf-8"> + +</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..db17bda --- /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=utf-8\"> +<title> $title </title> +</head> <body> <pre>" + +#ESC=`echo x | tr '[x]' '[\033]'` + +sed ' + s/\([<>&]\)\1/\1/g + s/&/\&/g + s/_</\</g + s/<</\</g + s/</\</g + s/_>/\>/g + s/>>/\>/g + s/>/\>/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..11ddc4f --- /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..cf5e161 --- /dev/null +++ b/mantools/postconf2man @@ -0,0 +1,95 @@ +#!/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; + $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/≤/<=/g; + $block =~ s/</</g; + $block =~ s/≥/>=/g; + $block =~ s/>/>/g; + $block =~ s/&/\&/g; + $block =~ s/–/-/g; + $block =~ s/—/-/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-Za-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..98c4cb7 --- /dev/null +++ b/mantools/postlink @@ -0,0 +1,1274 @@ +#!/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][Ss]?:/) { + 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_table_open_error_is_fatal\b;<a href="postconf.5.html#daemon_table_open_error_is_fatal">$&</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_dis[-</Bb>]*\n* *[<Bb>]*count\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_con[-</Bb>]*\n* *[<Bb>]*cur[-</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_re[-</bB>]*\n* *[<bB>]*fill_limit\b;<a href="postconf.5.html#default_recipient_refill_limit">$&</a>;g; + s;\bdefault_recipi[-</bB>]*\n* *[<bB>]*ent_re[-</bB>]*\n* *[<bB>]*fill_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;\bheader_from_format\b;<a href="postconf.5.html#header_from_format">$&</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_con[-</bB>]*\n*[ <bB>]*cur[-</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_bind_address_enforce\b;<a href="postconf.5.html#lmtp_bind_address_enforce">$&</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_per_request_deadline\b;<a href="postconf.5.html#lmtp_per_request_deadline">$&</a>;g; + s;\blmtp_min_data_rate\b;<a href="postconf.5.html#lmtp_min_data_rate">$&</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_tls_wrappermode\b;<a href="postconf.5.html#lmtp_tls_wrappermode">$&</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_con[-</Bb>]*\n* *[<Bb>]*cur[-</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_con[-</Bb>]*\n* *[<Bb>]*cur[-</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>]*cur[-</Bb>]*\n* *[<Bb>]*rency_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_de[-<\/bB>]*\n*[ <bB>]*lay\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_bind_address_enforce\b;<a href="postconf.5.html#smtp_bind_address_enforce">$&</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_for[-</bB>]*\n*[ <bB>]*bid_bare_new[-</bB>]*\n*[ <bB>]*line\b;<a href="postconf.5.html#smtpd_forbid_bare_newline">$&</a>;g; + s;\bsmtpd_for[-</bB>]*\n*[ <bB>]*bid_bare_new[-</bB>]*\n*[ <bB>]*line_reject_code\b;<a href="postconf.5.html#smtpd_forbid_bare_newline_reject_code">$&</a>;g; + s;\bsmtpd_for[-</bB>]*\n*[ <bB>]*bid_bare_new[-</bB>]*\n*[ <bB>]*line_exclusions\b;<a href="postconf.5.html#smtpd_forbid_bare_newline_exclusions">$&</a>;g; + s;\bcleanup_replace_stray_cr_lf\b;<a href="postconf.5.html#cleanup_replace_stray_cr_lf">$&</a>;g; + s;\bsmtpd_for[-</bB>]*\n*[ <bB>]*bid_unauth_pipelining\b;<a href="postconf.5.html#smtpd_forbid_unauth_pipelining">$&</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>]*i[-</bB>]*\n* *[<bB>]*ent_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_relay_before_recipient_restrictions\b;<a href="postconf.5.html#smtpd_relay_before_recipient_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_per_request_deadline\b;<a href="postconf.5.html#smtp_per_request_deadline">$&</a>;g; + s;\bsmtp_min_data_rate\b;<a href="postconf.5.html#smtp_min_data_rate">$&</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;\binfo_log_address_format\b;<a href="postconf.5.html#info_log_address_format">$&</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_sasl_mechanism_filter\b;<a href="postconf.5.html#smtpd_sasl_mechanism_filter">$&</a>;g; + s;\bsmtpd_sasl_service\b;<a href="postconf.5.html#smtpd_sasl_service">$&</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_per_request_deadline\b;<a href="postconf.5.html#smtpd_per_request_deadline">$&</a>;g; + s;\bsmtpd_min_data_rate\b;<a href="postconf.5.html#smtpd_min_data_rate">$&</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_fingerprints">$&</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_config_name\b;<a href="postconf.5.html#tls_config_name">$&</a>;g; + s;\btls_config_file\b;<a href="postconf.5.html#tls_config_file">$&</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; + s;\benable_threaded_bounces\b;<a href="postconf.5.html#enable_threaded_bounces">$&</a>;g; + s;\bknown_tcp_ports\b;<a href="postconf.5.html#known_tcp_ports">$&</a>;g; + + # Transport-dependent magical parameters. + # Note: Accept non-italic "transport" prefix for content that has been + # converted from troff in C sources. Tooling doesn't support bold+italic. + + 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>]*su[-<\/bB>]*\n*[ <bB>]*per[<\/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_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;\bpostscreen_allowlist_interfaces\b;<a href="postconf.5.html#postscreen_allowlist_interfaces">$&</a>;g; + s;\bpostscreen_denylist_action\b;<a href="postconf.5.html#postscreen_denylist_action">$&</a>;g; + s;\bpostscreen_dnsbl_allowlist_threshold\b;<a href="postconf.5.html#postscreen_dnsbl_allowlist_threshold">$&</a>;g; + s;\brespectful_logging\b;<a href="postconf.5.html#respectful_logging">$&</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_level\b;<a href="postconf.5.html#tlsproxy_client_level">$&</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\b;<a href="postconf.5.html#tlsproxy_client_policy">$&</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; + + s;\blocal_login_sender_maps\b;<a href="postconf.5.html#local_login_sender_maps">$&</a>;g; + s;\bempty_address_local_login_sender_maps_lookup_key\b;<a href="postconf.5.html#empty_address_local_login_sender_maps_lookup_key">$&</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 + + if (!/href=/) { s/(https?:\/\/[^ ,"\(\)]*[^ ,"\(\):;!?.])/<a href="$1">$1<\/a>/; } + s/(ftp:\/\/[^ ,"\(\)]*[^ ,"\(\):;!?.])/<a href="$1">$1<\/a>/; + s/\bRFC\s*([1-9]\d*)/<a href="https:\/\/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>/g; + s/hosted domains*/<a href="VIRTUAL_README.html#canonical">$&<\/a>/g; + #s/other domains*/<a href="VIRTUAL_README.html#canonical">&<\/a>/g; + s/virtual alias example/<a href="VIRTUAL_README.html#virtual_alias">$&<\/a>/g; + s/virtual mailbox example/<a href="VIRTUAL_README.html#virtual_mailbox">$&<\/a>/g; + s/local domains*/<a href="ADDRESS_CLASS_README.html#local_domain_class">$&<\/a>/g; + s/virtual alias domains*/<a href="ADDRESS_CLASS_README.html#virtual_alias_class">$&<\/a>/g; + s/virtual ALIAS domains*/<a href="ADDRESS_CLASS_README.html#virtual_alias_class">$&<\/a>/g; + s/virtual mailbox domains*/<a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">$&<\/a>/g; + s/virtual MAILBOX domains*/<a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">$&<\/a>/g; + s/relay domains*/<a href="ADDRESS_CLASS_README.html#relay_domain_class">$&<\/a>/g; + s/default domains*/<a href="ADDRESS_CLASS_README.html#default_domain_class">$&<\/a>/g; + s/mydestination domains*/<a href="ADDRESS_CLASS_README.html#local_domain_class">$&<\/a>/g; + s/\b"*maildrop"* *queues*\b/<a href="QSHAPE_README.html#maildrop_queue">$&<\/a>/g; + s/\b("*maildrop"*),/<a href="QSHAPE_README.html#maildrop_queue">$1<\/a>,/g; + s/\b(?<!\/)("*incoming"*),/<a href="QSHAPE_README.html#incoming_queue">$1<\/a>,/g; + s/\b("*incoming"*) and\b/<a href="QSHAPE_README.html#incoming_queue">$1<\/a> and/g; + s/\b("*incoming"*) or\b/<a href="QSHAPE_README.html#incoming_queue">$1<\/a> or/g; + s/\b"*incoming"* *queues*\b/<a href="QSHAPE_README.html#incoming_queue">$&<\/a>/g; + s/<b> *incoming *<\/b> *queues*\b/<a href="QSHAPE_README.html#incoming_queue">$&<\/a>/g; + s/\b("*active"*) and\b/<a href="QSHAPE_README.html#active_queue">$1<\/a> and/g; + s/\b"*active"* *queues*\b/<a href="QSHAPE_README.html#active_queue">$&<\/a>/ig; + s/\b"*deferred"* *queues*\b/<a href="QSHAPE_README.html#deferred_queue">$&<\/a>/g; + s/\b"*hold"* *queues*\b/<a href="QSHAPE_README.html#hold_queue">$&<\/a>/g; + s/\b("*hold"*),/<a href="QSHAPE_README.html#hold_queue">$1<\/a>,/g; + s/\b(postfix *tls)\b/<a href="postfix-tls.1.html">$1<\/a>/g; + + # 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[is]?):/<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. + # Note: Exclude AUXLIBS_SDBM because there is no SDBM_README. + + s/\b(AUXLIBS_(?!SDBM))([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..7b4dd44 --- /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=utf-8"> + +</head> + +<body> + +<h1>Title Here</h1>' + +sed ' + s/&/\&/g + s/</\</g + s/>/\>/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/spelldiff b/mantools/spelldiff new file mode 100755 index 0000000..ba059fe --- /dev/null +++ b/mantools/spelldiff @@ -0,0 +1,23 @@ +#!/bin/sh + +# Usage: spelldiff baseline files... + +case $# in +0|1) echo Usage: $0 baseline files... 1>&2; exit 1;; +esac + +baseline="$1"; shift + +for f +do + if [ -f "${baseline}/${f}" ] + then + diff -U0 "${baseline}/${f}" "${f}" | sed -n ' + /^+/{ + s/.// + p + }' + else + cat "${f}" + fi +done diff --git a/mantools/srctoman b/mantools/srctoman new file mode 100755 index 0000000..9102201 --- /dev/null +++ b/mantools/srctoman @@ -0,0 +1,214 @@ +#!/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/^/\\\&/ + } + /^[^.]/{ + 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/&/\&/g; + $defval =~ s/</\</g; + $defval =~ s/>/\>/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"; +} |