aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2010-07-15 18:53:51 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2010-07-15 18:53:51 +0300
commitb0c430a8642b102adb61b3df5e685920f963023d (patch)
tree48f09f6332c420f1bfc1ad5c53849acdaf58247a
parent8d4894458790db74d795e874c298b0810aca7746 (diff)
downloadmailfromd-b0c430a8642b102adb61b3df5e685920f963023d.tar.gz
mailfromd-b0c430a8642b102adb61b3df5e685920f963023d.tar.bz2
Write more docs.
* doc/deprecate.texi: Remove. * doc/pragma-database.texi: Remove. * doc/pragma-option.texi: Remove. * doc/Makefile.am (mailfromd_TEXINFOS): Remove the above. (check-pragmas): Remove the rule, but leave a placeholder for a while. (check-sub-config): Fix the rule to allow for dashes in keyword names. * doc/functions.texi: Fix a typo. * doc/macros.texi (histref): New macro. * doc/mailfromd.texi: Remove obsolete sections. Describe callout servers and SMTP timeouts. * mflib/sav.mf: Remove.
-rw-r--r--doc/Makefile.am18
-rw-r--r--doc/deprecate.texi175
-rw-r--r--doc/functions.texi2
-rw-r--r--doc/macros.texi5
-rw-r--r--doc/mailfromd.texi348
-rw-r--r--doc/pragma-database.texi61
-rw-r--r--doc/pragma-option.texi224
-rw-r--r--doc/upgrade.texi15
-rw-r--r--mflib/sav.mf185
9 files changed, 265 insertions, 768 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
index cbc8b48b..8e2419c0 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -16,15 +16,12 @@
info_TEXINFOS=mailfromd.texi
mailfromd_TEXINFOS=\
- deprecate.texi\
fdl.texi\
functions.texi\
gacopyz.texi\
macros.texi\
mtasim.texi\
pmult.texi\
- pragma-database.texi\
- pragma-option.texi\
rendition.texi\
sexp.texi\
strftime.texi\
@@ -47,13 +44,7 @@ check-format:
false; \
fi
-check-pragmas:
- @check-docs.sh pragmas \
- '/} option_cache\[\] = {/,/^}/s/[ \t]*{ *"\(.*\)".*/\1/pg' \
- 's/@deffnx* {pragma option} *\([^@, ]*\) .*/\1/p' \
- $(top_srcdir)/mfd/main.c -- \
- $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -E - \
- $(info_TEXINFOS)
+check-pragmas:;
check-options:
@check-docs.sh options \
@@ -74,8 +65,9 @@ check-config:
check-sub-config:
@list=`sed -n '/mf_cfg_param\[\] *= *{/,/^}/{s/[ \t]*{ *"\([^,"]*\)", *mu_cfg_section *,.*/\1/pg}' $(top_srcdir)/mfd/main.c`; \
for ident in $$list; do \
+ cident=`echo $$ident | tr '-' '_'`; \
check-docs.sh "$$ident configuration statements" \
- "/$${ident}_section_param"'\[\] *= *{/,/^}/s/[ \t]*{ *"\([^,"]*\)".*/\1/pg' \
+ "/$${cident}_section_param"'\[\] *= *{/,/^}/s/[ \t]*{ *"\([^,"]*\)".*/\1/pg' \
"s/@deffn {$${ident}}"' *\([^@,]*\).*/\1/p' \
$(top_srcdir)/mfd/main.c -- \
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -E - \
@@ -100,8 +92,8 @@ check-mflib:
check-exceptions:
@check-docs.sh exceptions \
- '/typedef enum mf_exception_code {/,/^};/s/[ \t]*mfe_\(.*\),.*/e_\1/p;/typedef enum mf_status_code {/,/^};/s/[ \t]*mf_\(.*\),.*/\1/p' \
- 's/@cindex \([^,][^,]*\), exception type/\1/p' \
+ '/typedef enum mf_exception_code {/,/^};/s/[ \t]*mfe_\(.*\),.*/e_\1/p' \
+ 's/@cindex \(e_[^,]*\), exception type/\1/p' \
$(top_srcdir)/mfd/mailfromd.h -- \
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -E - \
$(info_TEXINFOS)
diff --git a/doc/deprecate.texi b/doc/deprecate.texi
deleted file mode 100644
index d674e491..00000000
--- a/doc/deprecate.texi
+++ /dev/null
@@ -1,175 +0,0 @@
-@c Copyright (C) 2005, 2006, 2009, 2010 Sergey Poznyakoff
-@c Permission is granted to copy, distribute and/or modify this document
-@c under the terms of the GNU Free Documentation License, Version 1.2 or
-@c any later version published by the Free Software Foundation; with no
-@c Invariant Sections, with the Front-Cover texts being ``Mailfromd Manual'',
-@c and with the Back-Cover Texts at your option.
-
-@menu
-* pragma-option::
-* pragma-database::
-* implicit concatenation::
-* old-style function declarations::
-* operational notation::
-@end menu
-
-@node pragma-option
-@appendixsec #pragma option
-@include pragma-option.texi
-
-@node pragma-database
-@appendixsec #pragma database
-@include pragma-database.texi
-
-@node implicit concatenation
-@appendixsec Implicit Concatenation and Operational Syntax
- Implicit concatenation and operational syntax are two deprecated
-features still supported by @command{mailfromd} version
-@value{VERSION}. These features will disappear in the next release,
-so you are advised to update your scripts if they still use them.
-@xref{5x0-600, upgrade your scripts}, for a description of the upgrade
-procedure.
-
- @dfn{Implicit concatenation} is performed wherever the compiler
-encounters two adjacent variables or adjacent variable and literal.
-Notice, that it does not affect implicit concatenation of adjacent
-literals, which is supported as before. That is, the following is
-correct:
-
-@smallexample
- echo "GNU's" " not " " UNIX"
-@end smallexample
-
-@noindent
-whereas the following is deprecated:
-
-@smallexample
- echo %y %z
-@end smallexample
-
- When compiler encounters such a construct, it acts as if there were
-a @samp{.} (dot) operator between the variables
-(@pxref{Concatenation}), and issues the following warning:
-
-@smallexample
-@var{file}:@var{line}: implicit concatenation is deprecated
-@var{file}:@var{line}: use `.' operator
-@end smallexample
-
-
- @dfn{Operational syntax} consists in calling a function of one
-argument without parentheses around the actual parameter, e.g.:
-
-@smallexample
- set x primitive_hostname $client_addr
-@end smallexample
-
-@noindent
-instead of:
-
-@smallexample
- set x primitive_hostname($client_addr)
-@end smallexample
-
- If such usage is encountered, the compiler issues the following
-warning:
-
-@smallexample
-@var{file}:@var{line}: use of function name as a prefix operator is
-deprecated
-@end smallexample
-
- Both features brought more trouble than advantage, and therefore
-I decided to remove them. Please, update your scripts, if you are
-still using them. For the sake of completeness, here is what
-the documentation for previous versions of @command{mailfromd}
-said on the subject:
-
-@quotation
- There are some features of @acronym{MFL} which, when used improperly,
-may lead to subtle, hard identifiable errors. These are: concatenation
-operation (@pxref{Concatenation}) and passing arguments to
-one-argument functions without parentheses (@pxref{operational
-notation}).
-
- Since there is no explicit operator for concatenation, it is often
-necessary to ensure that it happens at the right time by using
-parentheses to enclose the items to concatenate. Consider the
-following example:
-
-@smallexample
-echo toupper "some" "thing"
-@end smallexample
-
- Should it print @samp{SOMETHING} or just @samp{SOMEthing}? The
-correct answer is the former, but it is difficult to deduce unless you
-are well acquainted with the @acronym{MFL} precedence rules
-(@pxref{Precedence}). Therefore, the rule of thumb is: whenever in
-doubt, parenthesize:
-
-@smallexample
-echo toupper("some" "thing") @result{} "SOMETHING"
-echo toupper("some") "thing" @result{} "SOMEthing"
-@end smallexample
-@end quotation
-
-@node old-style function declarations
-@appendixsec Old-Style Function Declarations
-
-@anchor{func-old-style}
-@cindex function declaration, old style
- For compatibility with previous versions, @command{mailfromd} also
-supports the @dfn{legacy} format of function declarations:
-
-@smallexample
-func @var{name} (@var{param-types}) returns @var{rettype}
-@end smallexample
-
-@noindent
-Here, @var{param-types} is a comma-separated list of parameter types.
-The following abbreviations can be used: @samp{s} for @code{string}
-and @samp{n} for numeric. The same holds true for @var{rettype} as
-well.
-
-@anchor{positional parameter}
-@cindex positional parameters, in functions
- The parameters declared this way are called @dfn{positional
-parameters}. The function can access its actual arguments using the notation
-@code{$@var{n}}, where @var{n} is the ordinal number of the
-argument@footnote{Well, to tell you the truth, you can access named
-arguments using positional notation as well. But such a mixing of
-styles is not recommended.}. Arguments are counted from left to
-right. The first argument is @code{$1}.
-
- For example, here's the definition of the @samp{sam} function
-(@pxref{sum--example}), using the legacy syntax:
-
-@smallexample
-@group
-func sum(n, n) returns n
-do
- return $1 + $2
-done
-@end group
-@end smallexample
-
-@node operational notation
-@appendixsec Operational Notation
-
-@dfn{Operational notation} is a practice of invoking functions of
-single argument without parentheses around their argument, e.g.:
-
-@smallexample
- hostname %x
-@end smallexample
-
-@noindent
-instead of:
-
-@smallexample
- hostname(%x)
-@end smallexample
-
-This practice was commonly used in early versions of @acronym{MFL}.
-Now it is deprecated. The version 6.0 is the last version that
-supports it.
diff --git a/doc/functions.texi b/doc/functions.texi
index 3c40900f..d05c5080 100644
--- a/doc/functions.texi
+++ b/doc/functions.texi
@@ -773,7 +773,7 @@ to `accept', to suppress this warning
If it is OK to lose all modifications, call @code{mmq_purge}, as
suggested in this message.
-@deftypefn {Built-in Function} void mmq_drop ()
+@deftypefn {Built-in Function} void mmq_purge ()
Remove all modification requests from the queue. This function undoes
the effect of any of the following functions, if they had been called
previously: @code{rcpt_add}, @code{rcpt_delete}, @code{header_add},
diff --git a/doc/macros.texi b/doc/macros.texi
index a26ad0ca..f0aea564 100644
--- a/doc/macros.texi
+++ b/doc/macros.texi
@@ -27,5 +27,8 @@
@mtindex \option\, --\option\, @r{@command{mtasim} option, \text\}
@end macro
-
+@macro histref{version,ref,text}
+@uref{http://mailfromd.man.gnu.org.ua/historic/\version\/html_node/\ref\.html,\text\}
+@end macro
+
diff --git a/doc/mailfromd.texi b/doc/mailfromd.texi
index 92dbfa5b..06835ac4 100644
--- a/doc/mailfromd.texi
+++ b/doc/mailfromd.texi
@@ -122,7 +122,6 @@ Appendices
* Gacopyz::
* Time and Date Formats::
* s-expression::
-* Deprecated Features::
* Upgrading::
* Copying This Manual:: The GNU Free Documentation License.
@@ -345,14 +344,6 @@ Pmult Configuration
* pmult-client:: Pmult Client Configuration.
* pmult-debug:: Debugging Pmult.
-Deprecated Features
-
-* pragma-option::
-* pragma-database::
-* implicit concatenation::
-* old-style function declarations::
-* operational notation::
-
Upgrading
* 5x0-600:: Upgrading from 5.x to 6.0
@@ -1688,78 +1679,65 @@ done
@node SMTP Timeouts
@section @acronym{SMTP} Timeouts
-
+@UNREVISED
When using polling functions, it is important to take into account
-possible delay, which can occur in @acronym{SMTP} transactions. Most often
-such delays are due to low network bandwidth, but sometimes remote
-sites impose them willingly, as a spam-fighting measure@footnote{My
-private opinion is that such practice is completely lame.}
-
-@cindex timeouts, defined
- @command{Mailfromd} polling functions implement three distinct
-@dfn{timeout} values:
-
-@table @dfn
-@cindex connection timeout
-@cindex timeout, connection
-@item Connection timeout
- Maximum time for establishing the initial @acronym{TCP}
-connection to the remote host. If the connection is not established
-within this time interval, the polling returns @code{temp_failure}.
-
-@cindex initial response timeout
-@cindex timeout, initial response
-@item Initial response timeout
- Maximum time before receiving initial @acronym{SMTP} response from
-the remote host.
-
-@cindex I/O timeout
-@cindex timeout, I/O
-@cindex timeout, input/output
-@item I/O timeout
- Maximum amount of time for finishing an input/output
-operation with the remote @acronym{SMTP} server.
-@end table
-
- These three timeouts can be set using the following configuration
-file statements (@pxref{conf-timeout}):
-
-@smallexample
-@group
-connect-timeout @var{interval};
-initial-response-timeout @var{interval};
-io-timeout @var{interval};
-@end group
-@end smallexample
-
- Here, @var{interval} is the time interval, expressed in usual
-time units@footnote{@xref{time interval specification}, for its
-detailed description.}, for example:
-
-@smallexample
-initial-response-timeout 1 minute 30 seconds;
-@end smallexample
-
- The default values are:
-
-@smallexample
-@group
-connect-timeout @value{CONNECT-TIMEOUT};
-initial-response-timeout @value{INITIAL-RESPONSE-TIMEOUT};
-io-timeout @value{IO-TIMEOUT};
-@end group
-@end smallexample
-
-@cindex CommuniGate Pro servers, lameness
- You will most certainly encounter some servers that deliberately
-delay issuing the initial @acronym{SMTP} reply (in particular, I have
-noted that most @samp{CommuniGate Pro} servers are guilty of this lame
-practice). The default @code{initial-response-timeout} value should
-be enough to cope with most of them. If you encounter a server
-that delays more than 30 seconds, you can raise the
-@code{initial-response-timeout} value. However, in this case, I'd
-rather recommend informing its admin that his server settings are not
-tolerable.
+possible delays, which can occur in @acronym{SMTP} transactions. Such
+delays may be due to low network bandwidth or high load on the remote
+server. Some sites impose them willingly, as a spam-fighting measure.
+
+@cindex timeout escalation
+ Ideally the callout verification should use the timeout values
+defined in the RFC 2822, but this is impossible in practice, because
+it would cause a @dfn{timeout escalation}, which consists in
+propagating delays encountered in a callout @acronym{SMTP} session
+back to the remote client whose session was the cause of the callout.
+
+ Consider, for example, the following scenario. An @acronym{MFL}
+script performs a callout on @samp{envfrom} stage. The remote server
+is overloaded and delays heavily in responding, so that the initial response
+arrives 3 minutes after establishing the connection, and processing
+the @samp{EHLO} command takes another 3 minutes. These delays are
+OK according to the RFC, which imposes a 5 minute limit for both,
+but while waiting for the remote reply our @acronym{SMTP} server
+remains in the @samp{envfrom} state with the client waiting
+for a response to its @samp{MAIL} command more than 6 minutes, which is
+intolerable, because the RFC imposes the same 5 minute timeout for
+this stage. Thus, the client will almost certainly break the session.
+
+@cindex callout server
+@cindex server, callout
+@cindex soft SMTP timeout
+@cindex hard STMP timeout
+ To avoid this, @command{mailfromd} uses a special instance, called
+@dfn{callout server}, which is responsible for running callout
+@acronym{SMTP} sessions asynchronously. The usual sender verification
+is performed using so-called @dfn{soft} timeout values, which
+are set to values short enough to not disturb the incoming session
+(e.g. a timeout for @samp{HELO} response is 3 seconds, instead of 5
+minutes). If this verification yields a definite answer, that answer
+is stored in the cache database and returned to the calling procedure
+immediately. If, however, the verification is aborted due to a timeout,
+the caller procedure is returned an @samp{e_temp_failure} exception, and
+the callout is scheduled for processing by a callout server. The
+exception normally causes the milter session to return a temporary
+error to the sender, urging it to retry the connection later.
+
+ In the meantime, the callout server runs the sender verification
+again using another set of timeouts, called @dfn{hard} timeouts, which
+are normally much longer than @samp{soft} ones (they default to the
+values required by RFC 2822). If it gets a definitive result (e.g.
+@samp{email found} or @samp{email not found}, the server stores it
+in the cache database. If the callout ends due to a timeout, a
+@samp{not_found} result is stored in the database.
+
+ Some time later, the remote server retries the delivery, and the
+@command{mailfromd} script is run again. This time, the callout
+function will immediately obtain the already cached result from the
+database and proceed accordingly. If the callout server has not
+finished the request by the time the sender retries the connection,
+the latter is again returned a temporary error, and the process
+continues until the callout is finished.
+
@node Avoiding Verification Loops
@section Avoiding Verification Loops
@@ -3324,6 +3302,7 @@ syslog facility name, i.e. one of: @samp{user}, @samp{daemon},
through @samp{local7}. The argument can be given in upper, lower or
mixed cases, and it can be prefixed with @samp{log_}
+@anchor{syslog tag}
@cindex syslog tag
@xopindex{log-tag, introduced}
Another syslog-related parameter that can be configured is the
@@ -7354,7 +7333,7 @@ they had when it has been entered.
@cindex catch, standalone
@cindex standalone catch
- A @code{catch} block can be used alone, without preceding @code{try}
+ A @code{catch} block can also be used alone, without preceding @code{try}
part. Such a construct is called a @dfn{standalone catch}. It is
mostly useful for setting global exception handlers in a @code{begin}
statement (@pxref{begin/end}). When used within a usual function or
@@ -8597,6 +8576,7 @@ Mailutils Manual}.
@menu
* conf-types:: Special Configuration Data Types
* conf-base:: Base Mailfromd Configuration
+* conf-server:: Server Configuration
* conf-milter:: Milter Connection Configuration
* conf-debug:: Logging and Debugging configuration
* conf-timeout:: Timeout Configuration
@@ -8703,6 +8683,97 @@ writable for the user or group @command{mailfromd} runs as
(@pxref{conf-priv}).
@end deffn
+@node conf-server
+@section Server Configuration
+ A single @command{mailfromd} daemon can run several @dfn{servers}.
+These are configured in the following statement:
+
+@smallexample
+@group
+server @var{type} @{
+ id @var{name};
+ listen @var{url};
+ max-instances @var{num};
+ single-process @var{bool};
+ reuseaddr @var{bool};
+ default @var{bool};
+ acl @{ @dots{} @}
+@}
+@end group
+@end smallexample
+
+@deffn {Mailfromd Conf} server @var{type}
+ Define a server. The @var{type} is either @samp{milter} or
+@samp{callout}. @xref{SMTP Timeouts}, for a description of various
+types of servers.
+
+ The substatements in the @code{server} block provide parameters for
+configuring this server.
+@end deffn
+
+@deffn {server} id name
+ Assign an identifier to this server. This identifier is used as
+a suffix to syslog tag (@pxref{syslog tag}) in messages related to
+this server. For example, if a server block had the following
+statement in it:
+
+@smallexample
+id main;
+@end smallexample
+
+@noindent
+then all messages related to this server will be marked with tag
+@samp{mailfromd#main}.
+
+ The part before the @samp{#} is set using the @code{tag} statement
+in @code{logging} block (@pxref{Logging Statement, Mailutils
+Configuration File,, mailutils, GNU Mailutils Manual}).
+@end deffn
+
+@deffn {server} listen url
+Listen for connections on the given @acronym{URL}.
+@xref{milter port specification}, for a description of allowed
+@var{url} formats.
+
+Example:
+
+@smallexample
+listen inet://10.10.10.1:3331;
+@end smallexample
+@end deffn
+
+@deffn {server} max-instances number
+Sets the maximum number of instances allowed for this server.
+@end deffn
+
+@deffn {server} single-process bool
+When set to @samp{yes}, this server will run in @dfn{single-process}
+mode, i.e. it will not fork sub-processes to serve requests. This
+option is meant exclusively to assist in debugging
+@command{mailfromd}. Don't use it for anything else but for
+debugging!
+@end deffn
+
+@deffn {server} reuseaddr bool
+When set to @samp{yes}, @command{mailfromd} will attempt to reuse
+existing socket addresses. This is the default behavior.
+@end deffn
+
+ If the server @var{type} is @samp{callout}, the following statement
+is also allowed:
+
+@deffn {server} default bool
+When set to @samp{yes}, this server is marked as a default callout server
+for all milter servers declared in the configuration.
+@end deffn
+
+ if the server @var{type} is @samp{milter}, you can use the following
+statement to query a remote callout server:
+
+@deffn {server} callout url
+ Use a callout server at @var{url} (@pxref{milter port specification}).
+@end deffn
+
@node conf-milter
@section Milter Connection Configuration
@@ -8816,30 +8887,106 @@ Enable transcripts of call-out @acronym{SMTP} sessions.
@node conf-timeout
@section Timeout Configuration
+ The @acronym{SMTP} timeouts used in callout sessions are configured via
+@code{smtp-timeout} statement:
- The following statements configure various timeouts. Their
-arguments must be valid time interval specifications, as described in
-@ref{time interval specification}.
+@subheading Syntax
+@kwindex smtp-timeout
+@smallexample
+@group
+smtp-timeout @var{type} @{
+ connection @var{interval};
+ initial-response @var{interval};
+ helo @var{interval};
+ mail @var{interval};
+ rcpt @var{interval};
+ rset @var{interval};
+ quit @var{interval};
+@}
+@end group
+@end smallexample
-@deffn {Mailfromd Conf} connect-timeout time
- Sets initial connection timeout for call-out tests. If the
+@deffn {Mailfromd Conf} smtp-timeout @var{type}
+Declare @acronym{SMTP} timeouts of the given @var{type}, which may be
+@samp{soft} or @samp{hard}.
+
+Callout @acronym{SMTP} sessions initiated by polling functions, are
+controlled by two sets of timeouts: @samp{soft} and @samp{hard}.
+@dfn{Soft timeouts} are used by the mailfromd milter servers. @dfn{Hard
+timeouts} are used by callout servers (@FIXME-pxref{callout servers}).
+When a soft timeout is exceeded, the calling procedure is
+delivered an @samp{e_temp_failure} exception and the session is
+scheduled for processing by a callout server. The latter re-runs the
+session using hard timeouts. If a hard timeout is exceeded, the
+address is marked as @samp{not_found} and is stored in the cache
+database with that status.
+
+Normally, soft timeouts are set to shorter values, suitable for use
+in @acronym{MFL} scripts without causing excessive delays. Hard
+timeouts are set to large values, as requested by RFC 2822 and
+guarantee obtaining a definite answer (see below for the default
+values).
+@end deffn
+
+@subheading Statements
+ The @var{time} argument for all @code{smtp-timeout} sub-statements
+is expressed in time interval units, as described in @ref{time
+interval specification}.
+
+@deffn {smtp-timeout} connection time
+ Sets initial connection timeout for callout tests. If the
connection is not established within this time, the corresponding
-probing function returns temporary failure. The default value is
-@value{CONNECT-TIMEOUT}. @xref{SMTP Timeouts}, for a detailed
-description.
+callout function returns temporary failure.
@end deffn
-@deffn {Mailfromd Conf} initial-response-timeout time
+@deffn {smtp-timeout} initial-response time
Sets the time to wait for the initial @acronym{SMTP} response.
-Default is @value{INITIAL-RESPONSE-TIMEOUT}. @xref{SMTP Timeouts},
-for the detailed description.
@end deffn
+@deffn {smtp-timeout} helo time
+ Timeout for a response to @samp{HELO} (or @samp{EHLO}) command.
+@end deffn
+
+@deffn {smtp-timeout} mail time
+ Timeout for a response to @samp{MAIL} command.
+@end deffn
+
+@deffn {smtp-timeout} rcpt time
+ Timeout for a response to @samp{RCPT} command.
+@end deffn
+
+@deffn {smtp-timeout} rset time
+ Timeout for a response to @samp{RSET} command.
+@end deffn
+
+@deffn {smtp-timeout} quit time
+ Timeout for a response to @samp{QUIT} command.
+@end deffn
+
+@subheading Default Values
+The default timeout settings are:
+
+@float Table, smtp-timeouts
+@caption{Default SMTP timeouts}
+@multitable @columnfractions 0.5 0.25 0.25
+@headitem Timeout @tab Soft @tab Hard
+@item connection @tab 10s @tab 5m
+@item initial-response @tab 30s @tab 5m
+@item helo @tab I/O @tab 5m
+@item mail @tab I/O @tab 10m
+@item rcpt @tab I/O @tab 5m
+@item rset @tab I/O @tab 5m
+@item quit @tab I/O @tab 2m
+@end multitable
+@end float
+
@deffn {Mailfromd Conf} io-timeout time
- Sets @acronym{I/O} operation timeout in seconds. @command{Mailfromd} will
-wait the given amount of time for the success of each @acronym{I/O} operation
-with the remote @acronym{MX}. Default timeout is @value{IO-TIMEOUT}.
-@xref{SMTP Timeouts}, for a detailed description.
+ Sets a general @acronym{SMTP I/O} operation timeout. This timeout
+is used as the default for entries marked with @samp{I/O} in the above
+table. The default is 3 seconds.
+
+ This timeout can also be set from the command line using the
+@option{--timeout} option (@pxref{timeout option}).
@end deffn
@node conf-callout
@@ -9354,11 +9501,12 @@ Set @acronym{MTA} connection timeout. Overrides @code{milter-timeout}
statement in the @command{mailfromd} configuration file, which you are
advised to use instead (@pxref{conf-milter, milter-timeout}).
+@anchor{timeout option}
@opsummary{timeout}
@item --timeout=@var{number}
-Set @acronym{I/O} operation timeout (seconds). Overrides @code{io-timeout}
+Sets the @acronym{I/O} operation timeout (seconds). Overrides @code{io-timeout}
configuration file statement, which you are advised to use instead
-(@pxref{conf-timeout,io-timeout-conf}).
+(@pxref{conf-timeout,io-timeout}).
@end table
@node Logging and Debugging Options
@@ -10099,10 +10247,6 @@ line options used).
@appendix S-Expression
@include sexp.texi
-@node Deprecated Features
-@appendix Deprecated Features
-@include deprecate.texi
-
@node Upgrading
@appendix Upgrading
@include upgrade.texi
diff --git a/doc/pragma-database.texi b/doc/pragma-database.texi
deleted file mode 100644
index 8c39a99c..00000000
--- a/doc/pragma-database.texi
+++ /dev/null
@@ -1,61 +0,0 @@
-@c This is part of the mailfromd manual.
-@c Copyright (C) 2009 Free Software Foundation, Inc.
-@c This file is distributed under GFDL 1.1 or any later version
-@c published by the Free Software Foundation.
-
-@cindex database, pragma
-@cindex #pragma database
-
- This appendix describes an obsolete way of configuring
-@command{mailfromd} databases. For a new way, see
-@ref{conf-database}.
-
- The @code{#pragma database} statement is used to control file names
-and expiration periods used for various @acronym{DBM} databases. Its
-syntax is:
-
-@table @code
-@item #pragma database @var{dbname} file @var{filename}
- Set the database file name for the database @var{dbname}.
-@xref{conf-database, file}.
-
-@item #pragma database @var{dbname} expire-interval @var{interval}
- Set the expiration interval for the database
-@var{dbname}. (@xref{time interval specification}, for more
-information on @var{interval} syntax).
-
-@xref{conf-database, expire-interval}.
-@end table
-
- The parameter @var{dbname} can be one of the following:
-@samp{cache}, @samp{dns}, @samp{rate} and @samp{greylist} for main
-cache, @acronym{DNS} lookup, sending rate and greylisting databases,
-correspondingly.
-
- The first two databases merit special attention. The cache database
-implements two different timeouts, therefore there are two special
-forms of this statement for @samp{cache} database:
-
-@table @code
-@item #pragma database cache positive-expire-interval @var{interval}
- Set expiration interval for positive (@samp{success}) cache entries.
-Use @ref{conf-database, positive-expire-interval}, instead.
-
-@item #pragma database cache negative-expire-interval @var{interval}
- Set expiration interval for negative (@samp{not_found}) cache
-entries.
-
-Use @ref{conf-database, negative-expire-interval}, instead.
-@end table
-
- The @acronym{DNS} lookup cache uses @acronym{DNS} @acronym{TTL} as expiration
-interval for records representing positive lookups. The only value
-that can be altered is negative expiration interval:
-
-@table @code
-@item #pragma database dns negative-expire-interval @var{interval}
- Set expiration interval for negative @acronym{DNS} cache entries.
-Use @ref{conf-database, negative-expire-interval}, instead.
-@end table
-
-
diff --git a/doc/pragma-option.texi b/doc/pragma-option.texi
deleted file mode 100644
index c7201dc9..00000000
--- a/doc/pragma-option.texi
+++ /dev/null
@@ -1,224 +0,0 @@
-@c This is part of the mailfromd manual.
-@c Copyright (C) 2009 Free Software Foundation, Inc.
-@c This file is distributed under GFDL 1.1 or any later version
-@c published by the Free Software Foundation.
-
-@cindex option, pragma
-@cindex #pragma option
- This appendix describes an obsolete mailfromd configuration
-interface: @samp{#pragma option}. For a new interface, see @ref{Mailfromd
-Configuration}.
-
- The syntax of @samp{#pragma option} is:
-
-@smallexample
-#pragma option @var{name} @var{value}
-@end smallexample
-
-@noindent
-where @var{name} is the name of the command line option (without
-leading dashes) to set, and @var{value} is its new value. The effect
-of this statement is the same as that of the command line option
-@samp{--@var{name}=@var{value}}.
-
- The @var{value} is specific for each particular option. The
-supported value types are:
-
-@table @asis
-@item number
- A decimal number.
-
-@item string
- A string of characters. It must be enclosed in a pair of quotes,
-if it contains whitespace characters (use either single or double
-quotes, at your option).
-
-@item boolean
- A boolean value: @code{yes}, @code{true} or @code{t} to indicate
-a true value, and @code{no}, @code{false} or @code{nil} to indicate a
-false value.
-
-@item address
- An @acronym{IP} address in ``dotted-quad'' notation or a fully-qualified host
-name.
-
-@item interval
- The time interval specification, as described in @xref{time interval
-specification}. It needs not be quoted.
-@end table
-
-@noindent
-The following options control various database expiration
-intervals. The use of these options is deprecated, please use the
-corresponding @code{#pragma database} option.
-
-@deffn {pragma option} expire-interval interval
-@xprindex{expire-interval}
- Sets expiration interval for all databases.
-@xref{expire-interval-conf}, for a new method of setting it.
-@end deffn
-
-@deffn {pragma option} positive-expire-interval interval
-@xprindex{positive-expire-interval}
- Sets expiration interval for positive cache entries. Use the
-@samp{database} configuration file statement instead. @xref{conf-database,
-positive-expire-interval}.
-@end deffn
-
-@deffn {pragma option} negative-expire-interval interval
-@xprindex{negative-expire-interval}
- Sets expiration interval for negative cache entries. Use the
-@samp{database} configuration file statement instead. @xref{conf-database,
-negative-expire-interval}.
-@end deffn
-
-@deffn {pragma option} rates-expire-interval interval
-@xprindex{rates-expire-interval}
- Sets expiration interval for entries in the rates database. Use the
-@samp{database} configuration file statement instead (@pxref{conf-database,
-expire-interval}):
-
-@smallexample
-database rate @{
- expire-interval @var{interval};
-@}
-@end smallexample
-@end deffn
-
-@noindent
-The following options control @acronym{I/O} operations over @acronym{TCP}.
-
-@deffn {pragma option} source address
-@xprindex{source}
- Sets source address for @acronym{TCP} connections. Use the
-@samp{source-ip} configuration file statement instead.
-@xref{conf-base, source-ip}.
-@end deffn
-
-@deffn {pragma option} connect-timeout interval
-@xprindex{connect-timeout}
- Sets initial connection timeout. Use the @samp{connect-timeout}
-configuration file statement instead. @xref{conf-timeout,
-connect-timeout}.
-@end deffn
-
-@deffn {pragma option} initial-response-timeout interval
-@xprindex{initial-response-timeout}
- Sets the time to wait for the initial @acronym{SMTP} response.
-Use the @samp{initial-response-timeout} configuration file statement
-instead. @xref{conf-timeout, initial-response-timeout}.
-@end deffn
-
-@deffn {pragma option} io-timeout interval
-@deffnx {pragma option} timeout interval
-@xprindex{io-timeout}
-@xprindex{timeout}
- Sets @acronym{I/O} operation timeout. Use the @samp{io-timeout}
-configuration file statement instead: @xref{conf-timeout, io-timeout}.
-@end deffn
-
-@noindent
-The following options control debugging and logging facilities:
-
-@deffn {pragma option} debug string
-@xprindex{debug}
- Sets debugging level. Use the @code{debug} configuration file
-statement instead: @xref{conf-debug}.
-
- @var{String} is a decimal number in the range 0 -- 100. Level 0
-effectively disables debugging, while level 100 enables the most
-verbose debugging output.
-
- You can also selectively set different debug levels for different
-source code modules. In this case @var{string} is a comma-separated
-list of debug specifications, each of which has the following syntax:
-@code{@var{module}[=@var{level}]}. @xref{Logging and Debugging}, for
-the detailed description of this.
-@end deffn
-
-@deffn {pragma option} source-info boolean
-@xprindex{source-info}
- Includes source information into the debugging output. Use the
-@code{source-info} configuration file statement instead:
-@xref{conf-debug, source-info}.
-@end deffn
-
-@deffn {pragma option} stack-trace boolean
-@xprindex{stack-trace}
- Enables stack trace dumps on runtime errors. Use the
-@code{stack-trace} configuration file statement instead:
-@xref{conf-debug, stack-trace}.
-@end deffn
-
-@noindent
-These options control program privileges after startup:
-
-@deffn {pragma option} user strin