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
without first checking both for preexisting
definitions and for rule-set uses of
It is perfectly legal for the
$~U expressions to exist
in rule sets without a corresponding
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
$~ 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
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.