Milter smfi_quarantine()

Quarantine a message V8.13 and later

V8.13 sendmail added a routine called smfi_quarantine() to the Milter library. It is used to quarantine (rather than to simply accept or reject) a message. Quarantining is described in Queue Quarantining on page 438.

This new routine may only be called from the xxfi_eom() (Milter xxfi_eom() on page 1215) end-of-message handling routine. But before you can use this smfi_quarantine() routine, you must declare your intention to do so by first adding the SMFIF_QUARANTINE flag to the flags part of the smfiDesc declaration:

struct smfiDesc smfilter =
    SMFIF_ADDHDRS|SMFIF_QUARANTINE,    /* flags */   ← add here

Note that the flags are bitwise-ORed together (the “|” character). Once this is done, you can use this new smfi_quarantine() routine inside your xxfi_eom() routine, like this:

ret = smfi_quarantine(ctx, reason);

The smfi_quarantine() routine’s first argument is a common context pointer, ctx. The next argument is reason, a string that will be recorded in the queue as the reason this message was quarantined. The string must be non-NULL and not empty.

For example, suppose your Milter screens for viruses and one was found:

ret = smfi_quarantine(ctx, "Possible virus found in message body");

The return value (the ret) will be MI_SUCCESS on success; otherwise it will be MI_FAILURE. This smfi_quarantine() routine can fail if reason is NULL or empty, or if there was a network error, or if SMFIF_QUARANTINE was not set in your smfiDesc

Get sendmail, 4th 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.