NAME¶
smtpdcheck - check SMTP servers
SYNOPSIS¶
smtpdcheck [--stop {
ip-addr|
name}] [--timeout
seconds]
[
prio:]
server [[
prio:]
server]
DESCRIPTION¶
smtpdcheck checks to see if SMTP servers are available. The intent is for use on
secondary mail servers, which have no reason to accept mail when the primary
server is available.
The argument consists of a list of server names, each of which may optionally be
prefixed by a numeric MX priority and a colon. (This is exactly the format for
MX records returned by the
avenger dns command.) smtpdcheck will
attempt to connect to each server in succession.
If one of the servers specified on the command line is available, smtpdcheck
will print its name to standard output and exit with status 1. If smtpdcheck
cannot connect to any of the servers, it will exit with status 0. If a system
error occurs, smtpdcheck will exit with status 2.
OPTIONS¶
- --stop {ip-addr|name}
- Tells smtpdcheck to stop before checking a server with IP
address ip-addr or hostname name. If such a host is
encountered in the list of servers and prio is specified, then
smtpdcheck will consider it acceptable for other servers with the same
priority to be available, even if those servers were first in the list. In
other words, given the following arguments:
smtpdcheck --stop s2.domain.com \
10:s1.domain.com 10:s2.domain.com \
20:s3.domain.com
This command will always succeed, regardless of whether
"s1.domain.com" is up, because "s2.domain.com" has the
same priority. On the other hand, the following command will fail and
output "s1.domain.com" if "s1.domain.com" is up:
smtpdcheck --stop s2.domain.com \
10:s1.domain.com 20:s2.domain.com \
30:s3.domain.com
If a gethostbyname lookup for the argument name fails,
smtpdcheck will exit immediately with status 2.
- --timeout {seconds]
- By default, smtpdcheck spends 10 seconds probing each
server. This includes the time to do a DNS lookup, to establish a TCP
connection to port 25 of the server, and to read the "220" SMTP
code from the server's SMTP greeting message. To use a different value,
specify it with the --timeout option. The value 0 disables the
timeout completely, which is dangerous since smtpdcheck might then end up
waiting forever to read the "220" string.
EXAMPLES¶
To refuse to relay mail at a secondary MX server when the primary server is not
down, you might place the following in
/etc/avenger/secondary (assuming
MxLocalRcpt is 1):
dns RECIP_MXES mx "$RECIPIENT_HOST"
setvars
server=`smtpdcheck --stop $MYIP $RECIP_MXES`
test -n "$server" && defer "Please use server $server"
SEE ALSO¶
avenger(1) dbutil(1) asmtpd.conf(5),
The Mail Avenger home page: <
http://www.mailavenger.org/>.
BUGS¶
smtpdcheck could achieve much lower latency by probing all the servers
simultaneously. It should also include some kind of caching, to avoid
repeatedly trying to contact an unavailable server. Finally, hosts with
multiple IP addresses could be handled more cleanly, though what smtpdcheck
does should probably work in most cases.
AUTHOR¶
David Mazieres