Previous Section Next Section

$:

Rewrite once and continue RHS prefix

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:

[11] Fortunately modern sendmail detects and breaks such infinite loops for you now.

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.

    Previous Section Next Section