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. 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.