Use Value As Is with $&
For situations in which a macro should not be
recursively expanded when the configuration file is
read, but rather should be used in rules as is, V8
sendmail offers the $&
prefix. For
example, consider the following RHS of a
rule:
R... $w.$&m
When sendmail encounters this RHS
in the configuration file, it recursively expands
$w
into its
final text value (where that text value is your
hostname, such as lady). But
because the m
macro is prefixed with $&
, it is not expanded until the
rule is later evaluated at runtime.[309]
To illustrate one application of $&
, consider a
client/hub setup. In such a setup, all mail sent
from a client machine is forwarded to the hub for
eventual delivery. If the client were to run a
sendmail daemon to receive
mail for local delivery, a mail loop could (in the
absence of an MX record) develop where a message
would bounce back and fourth between the client and
the hub, eventually failing.
To break such a loop, a rule must be devised that recognizes that a received message is from the hub:
R $+ $: $&r @ $&s <$1> Get protocol and host R smtp @ $H <$+> $#local $: $1 Local delivery breaks a loop R $* <$+> $#smtp $@ $H $: $2 Punt to hub
These rules appear in the parse
rule set 0. By the time they are
reached, other rules have forwarded any nonlocal
mail to the hub. What is left in the workspace is a
lone username. The first rule in the preceding
example matches the workspace and rewrites it to be
the sending protocol ($&r
; see $r on page 842), ...
Get sendmail, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.