23.6 Pitfalls

  • The result of a subroutine call cannot be looked up directly in a database map. Consider this RHS of a rule:

    $(uucp $>96 $1 $)

    Here, the intention is to pass $1 to rule set 96 and then to look up the result in the uucp database map. Instead, the literal value 96 and the value in $1 are looked up together and fail first. Then $1 is passed to rule set 96, and the result of that subroutine call becomes the result of the RHS.

  • If you are running a Solaris 2.4 or earlier release of Sun's operating system, your database files should not live on tmpfs-mounted filesystems. File locking was not implemented for tmpfs until Solaris 2.5.

  • Avoid assuming that all K command switches mean the same thing for all types. The ad hoc nature of database-type submissions by outsiders makes that assumption perilous.

  • Not all initialization errors or lookup errors are reported. For some of them you will see an indication of an error only if you use the -d38.2 debugging switch (-d38.2).

  • The sendmail program automatically creates certain database maps as it needs them. This is done without the need to declare them with a K configuration command. For example, consider the following mc configuration line:

    define(`ALIAS_FILE', `/etc/mail/aliases')

    When sendmail encounters this AliasFile option (AliasFile), it automatically creates the aliases.files database map so that it can easily look up aliases. sendmail automatically creates the following database maps: aliases.files, aliases.nis, aliases.nisplus, aliases.netinfo, aliases.hesiod, passwd.files, passwd.nis, passwd.nisplus, passwd.hesiod, and users. You should avoid using these database maps in rule sets because they are essentially internal to sendmail and can change without notice.

    Part I: Build and Install
    Part II: Administration
    Part III: The Configuration File
    Chapter 21. The D (Define a Macro) Configuration Command
    Chapter 24. The O (Options) Configuration Command