Name

$-

Synopsis

The user part of an address is the part to the left of the @ in an address. It is usually a single token (such as george or taka).[14] The easiest way to match the user part of an address is with the $- operator. For example, the following rule looks for any username at our local domain, and dequotes it.

R $- < @ $=w . >         $: $(dequote $1 $) < @ $2 . >

Here, the intention is to take any quoted username (such as “george” or “george+nospam”) and to change the address using the dequote database-map type (dequote). The effect of this rule on a quoted user workspace, then, might look like this:

"george"@wash.dc.gov             becomes    george@wash.dc.gov
"george+nospam"@wash.dc.gov      becomes    george+nospam@wash.dc.gov

Because the quotation character is not a token, "george+nospam" is seen as a single token and is matched with the $- operator.

The -bt rule-testing mode offers an easy way to determine if a character splits the user part of an address into more than one token:

% echo '0 george+nospam' | /usr/sbin/sendmail -bt | head -3
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> parse              input: george + nospam                        3 tokens
% echo '0 "george+nospam"' | /usr/sbin/sendmail -bt | head -3
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> parse              input: "george+nospam"1 token

Note that the $- operator can be used only on the LHS of rules, and that the $- operator can be referenced by a $digit operator on the RHS

[14] At your site ...

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.