When sendmail prepares to deliver mail, it first
checks the size of the mail message and rejects (bounces) it if it is
larger than the limit imposed by the
agent equate (see M=). V8.8 and above
sendmail then call the
check_compat rule set (see Section 7.1.4). After that, all versions of
sendmail call the
checkcompat( ) routine.
The checkcompat( ) routine lies in a unique position within the sendmail code. It is the one place where both the sender and already aliased recipient addresses are available at the same time. Because it is invoked immediately before actual delivery, all the information needed for delivery is available to you for checking.
If checkcompat( ) returns EX_OK, as defined in <sysexits.h>, the mail message is considered OK and delivered. Otherwise the message is bounced. If you wish the message to be requeued instead of bounced, you can return EX_TEMPFAIL.
Again note that the checkcompat( ) routine is called once for each already aliased recipient.
The checkcompat( ) is found in the C-language source file sendmail/conf.c. Inside that file you will find it declared like this:
checkcompat(to, e) register ADDRESS *to; register ENVELOPE *e;
to is a pointer to a structure of
typedef ADDRESS which contains information about
the recipient. And
e is a pointer to a structure
of typedef ENVELOPE which contains information about the current envelope. (Actually, both are linked lists of structures.) ...