Name
$:
Synopsis
Ordinarily, the RHS of a rule continues to rewrite the workspace for as long as the workspace continues to match the LHS. This looping behavior can be useful when intended, but can be a disaster if unintended. But consider what could happen, under older versions of sendmail, if you wrote a rule such as the following, which seeks to match a domain address with at least one first dot:
R $+ . $* $1.OK
An address such as wash.dc.gov will match the
LHS and will be rewritten by the RHS into
wash.OK. But because rules continue to match
until they fail, the new address, wash.OK, will
be matched by the LHS again, and again rewritten to be
wash.OK. As you can see, this rule sets up an
infinite loop.[11] To prevent such infinite looping on
this rule, you should prefix the RHS with the $
:
operator:
R $+ . $* $:
$1.OK
The $
: prefix tells sendmail
to rewrite the workspace only once. With the $
:
prefix added to our example, the domain address
wash.dc.gov would be rewritten to
wash.OK exactly once. Progress would then
proceed to the next following rule (if there is one).
The $
: prefix is described in full in Section 18.7.2 of this chapter.
[11] Fortunately modern sendmail detects and breaks such infinite loops for you now.
Get Sendmail, 3rd 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.