When sendmail first
starts to run, it calls gethostname(3) to get
the name of the local machine. If that call fails, it sets that local
name to be localhost. Then
gethostbyname(3) is called to find the official
name for the local host. If that call fails, the official name for
the local host remains unchanged. The official name for the local
host is assigned to $j.
If the V command's version (Section 17.5) is 5 or higher, V8
sendmail discards the domain and assigns the
result to $w (the short name):
here.us.edu
from here to end of name discarded
If the version is 4 or less, $w is assigned the
fully qualified name (and is identical to $j).
$w is then appended to class
$=w ($=w).
$=w is used internally by
sendmail to screen all MX records that are found
in delivering mail over the network. Each such
record is compared in a case-insensitive fashion to
$=w. If there is a match, that MX record and all
additional MX records of lower priority are skipped. This prevents
sendmail from mistakenly connecting to itself.
Any of the following errors (or variations on them) indicate that
$=w, $w, or
$j might contain a faulty value, most likely from
a bad configuration file declaration:
553 host config error: mail loops back to myself
553 Local configuration error, hostname not recognized as local
553 host hostname configuration error
553 5.3.5 host config error: mail loops back to me (MX problem?)
Note that if $w is pulled from the name server and
the host is running BIND, and a cache is being downloaded,
$w could be periodically unresolved. In this
instance, sendmail sleeps and retries the
lookup.
$w is defined when sendmail
starts up. It can be redefined in the configuration file or as part
of the command line. Once it is defined, $w
doesn't change, so there is no need to prefix it
with a $& when using it in rules.