home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


Previous Section Next Section

$|

Match or return a literal $| LHS and RHS operator

It is sometimes necessary to communicate information between one rule and another. The preferred way of doing this is to use the special $| operator, which can be used in both the LHS or RHS of rules. To illustrate, consider the following two rules:

R $-               $: $1 $| $(badusers $1 $)
R $- $| BAD        $# discard $: discard

Here, the first rule's LHS checks to see if there is a single token in the workspace (as would be the case if it contained a username). If that is the case, the RHS returns the original workspace (with the $1) and a separator (the $|). Lastly, the RHS looks up the username in a hypothetical baduser database, and if the user is found, the result of the lookup (either a literal GOOD or BAD, for example) is appended to the workspace.

The second rule looks for a workspace that now contains the original username (the $-), followed by a literal separator (the $|) and the literal word BAD. If BAD is found, that user's email is discarded with the discard delivery agent.

One actual example of using $| can be found in Section 7.1.1. That section also describes a trick for using $| in rule-testing mode. Note that the $| operator can be used in either the LHS or RHS of a rule.

    Previous Section Next Section