The UUCP suite of software gets the
name of the local host from the uname(2) system
call, whereas sendmail gets the name of the
local host from the gethostbyname(3) or
getipnodebyname(3) system call. For
sendmail to easily handle UUCP addresses, V8
sendmail also makes use of the
uname(2) function.
First the host part of the fully qualified name returned by
gethostbyname(3) or
getipnodebyname(3) is saved as the first string
in the class $=w. Then
uname(2) is called. If the call succeeds, the
macro $k and the class $=k are
both given the nodename value returned. If the
call fails, both are given the same hostname value that was given to
the $j. If the system does not have
uname(2) available (if HASUNAME was
not defined when sendmail
was compiled; see HAS...),
sendmail simulates it. The
sendmail program's internal
replacement for uname begins by reading
/etc/whoami. If that file does not exist or
cannot be read, sendmail scans
/usr/include/whoami.h for a line beginning with
the #define sysname. If that fails and if
pre-V8.10 sendmail was compiled with
TRUST_POPEN defined,
sendmail executes the following command and
reads its output as the UUCP node name:
uname -l
If all these fail, $k is set to be the same as
$j.
$k is assigned its value when
sendmail first begins to run. It can be given a
new value either in the configuration file or from the command line.
Because $k does not change once it is defined, you
need not prefix it with $& when using it in
rules.