To see that what we describe is actually what happens, take a moment
to add rule set 0 to the end of your
client.cf
file:
S0 # select delivery agent
new
R$+ $#hub $@${REMOTE} $:$1 forward to hub
new
Now run
sendmail
in rule-testing mode and give it
the address
boss@acme
:
%
./sendmail -Cclient.cf -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
>
0 boss@acme
rewrite: ruleset 0 input: boss @ acme
rewrite: ruleset 0 returns: $# hub $@ mailhost $: boss @ acme
The change to the workspace caused by rule set 0 is exactly
as predicted:
$# hub $@ mailhost $: boss @ acme
Components from the workspace triple are used by
sendmail
to define
macros used by delivery agents. For example, the text after
$@
is copied into the
h
macro. Similarly, the username appearing after
$:
is copied into the
u
macro:
from
$@
in rule set 0
Mhub, P=[IPC], S=0, R=0, F=mDFMuXa, T=DNS/RFC822/SMTP, A=IPC $h
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=0, R=0, A=mail -d $u
from
$:
in rule set 0
Rule set 0 is different from the other rule sets in several
important ways. We'll begin explaining the other rule sets in the next
chapter. For now, just be aware that there are a few exceptions to
rules in
sendmail
:
-
Rule set 0 is one of the few rule sets that may use
$#
to return the
symbolic name of a delivery agent.
[2]
If any other rule set returns
a
$#
, the
$#
can cause unpredictable errors.
-
$@
and
$:
in rule set 0, when
following
$#
, have different meanings than
they do in all the other rule sets. They are even different from the
way they are
in rule set 0 itself when they don't follow
$#
.
We'll expand on this concept in the next chapter.