Although a class macro name may be any ASCII character (any character in the range 0x0 to 0x7f), avoid using any of the nonletter characters. At the very least they create confusing reading, and at worst they may cause sendmail to completely misinterpret your intentions.
Although strings may traditionally be made to contain whitespace by quoting them, class macros will misinterpret those quotes. For example, " vax ds1 " wrongly parses into two class entries: " vax and ds1 ," with the quotes a part of each.
Duplicate strings are silently ignored. Therefore typos in a list of strings may cause an accidentally duplicated entry to be silently excluded.
Avoid creating a new class macro name without first checking to see whether it has already been used. That is, don't create a list of UUCP hosts within class
U
without first checking
both
for preexisting
CU
and
FU
definitions and for rule-set uses of
$=U
and
$~U
. It is perfectly legal for the
$=U
and
$~U
expressions to exist in rule sets without a corresponding
CU
or
FU
definitions. Beware, however, that such empty references still cause
sendmail
to search the string pool.
Under V8
sendmail
you may watch your class macro definitions being formed by using the
-d37.8
debugging switch (see
Section 37.5.127, -d37.8
). Under other versions of
sendmail
you may only approximate this information by using the
-d36.9
debugging switch (see
Section 37.5.124, -d36.9
).
The class macro expansion prefixes
$=
and
$~
are intended for use only in the LHS of rules. If you use those characters in the RHS of rules, most versions of
sendmail
do not print an error; instead, they silently accept those characters as is. V8
sendmail
, on the other hand, prints one of the following messages as a warning and ignores the entire rule:
Inappropriate use of $= Inappropriate use of $~
The file form's scanf (3) pattern can produce unexpected results. Remember that the pattern is applied to a line, not to a stream.
No error checking is performed during reads for the
F
form of the class configuration command. An error reading from a file silently causes the rest of that file's contents to be ignored. An unreported error from a program (one that silently returns 0 on both success and failure) is also silently ignored by
sendmail
.
Be careful in using defined macros in the
C
form of class macro definitions. Some versions of
sendmail
store the macro itself instead of the expanded value of the macro, leading to unexpected results. V8
sendmail
correctly stores the expanded macro value.