diff -Nur snapshot-20010808/src/cleanup/cleanup_message.c snapshot-20010808-DROP/src/cleanup/cleanup_message.c --- snapshot-20010808/src/cleanup/cleanup_message.c Tue Aug 7 21:55:33 2001 +++ snapshot-20010808-DROP/src/cleanup/cleanup_message.c Fri Aug 10 22:35:13 2001 @@ -276,7 +276,9 @@ state->errs |= CLEANUP_STAT_CONT; } else if (strcasecmp(value, "IGNORE") == 0) { return; - } + } else if (strcasecmp(value, "DROP") == 0) { + state->errs |= CLEANUP_STAT_DROP; + } } } @@ -556,6 +558,8 @@ state->errs |= CLEANUP_STAT_CONT; } else if (strcasecmp(value, "IGNORE") == 0) { return; + } else if (strcasecmp(value, "DROP") == 0) { + state->errs |= CLEANUP_STAT_DROP; } } } diff -Nur snapshot-20010808/src/global/cleanup_user.h snapshot-20010808-DROP/src/global/cleanup_user.h --- snapshot-20010808/src/global/cleanup_user.h Fri Feb 4 22:59:02 2000 +++ snapshot-20010808-DROP/src/global/cleanup_user.h Fri Aug 10 22:31:22 2001 @@ -33,6 +33,7 @@ #define CLEANUP_STAT_RCPT (1<<6) /* No recipients found */ #define CLEANUP_STAT_HOVFL (1<<7) /* Header overflow */ #define CLEANUP_STAT_ROVFL (1<<8) /* Recipient overflow */ +#define CLEANUP_STAT_DROP (1<<9) /* Message content dropped */ #define CLEANUP_STAT_LETHAL ~(CLEANUP_STAT_HOVFL|CLEANUP_STAT_ROVFL) diff -Nur snapshot-20010808/src/qmqpd/qmqpd.c snapshot-20010808-DROP/src/qmqpd/qmqpd.c --- snapshot-20010808/src/qmqpd/qmqpd.c Tue Jul 10 00:29:31 2001 +++ snapshot-20010808-DROP/src/qmqpd/qmqpd.c Fri Aug 10 23:07:20 2001 @@ -410,7 +410,8 @@ * optionally log it. Always insert a delay before reporting a problem. * This slows down software run-away conditions. */ - if (status_code == QMQPD_STAT_HARD && var_soft_bounce) + if ((status_code == QMQPD_STAT_HARD && var_soft_bounce) + && (status_code != QMQPD_STAT_DROP)) status_code = QMQPD_STAT_RETRY; VSTRING_RESET(state->buf); VSTRING_ADDCH(state->buf, status_code); @@ -452,6 +453,9 @@ } else if ((state->err & CLEANUP_STAT_CONT) != 0) { qmqpd_reply(state, DO_LOG, QMQPD_STAT_HARD, "Error: content rejected"); + } else if ((state->err & CLEANUP_STAT_DROP) != 0) { + qmqpd_reply(state, DONT_LOG, QMQPD_STAT_DROP, + "Error: content dropped"); } else if ((state->err & CLEANUP_STAT_WRITE) != 0) { qmqpd_reply(state, DO_LOG, QMQPD_STAT_RETRY, "Error: queue file write error"); diff -Nur snapshot-20010808/src/qmqpd/qmqpd.h snapshot-20010808-DROP/src/qmqpd/qmqpd.h --- snapshot-20010808/src/qmqpd/qmqpd.h Sat Jul 7 03:47:09 2001 +++ snapshot-20010808-DROP/src/qmqpd/qmqpd.h Fri Aug 10 23:05:42 2001 @@ -53,7 +53,7 @@ #define QMQPD_STAT_OK 'K' #define QMQPD_STAT_RETRY 'Z' #define QMQPD_STAT_HARD 'D' - +#define QMQPD_STAT_DROP 'I' /* * qmqpd_state.c */ diff -Nur snapshot-20010808/src/smtpd/smtpd.c snapshot-20010808-DROP/src/smtpd/smtpd.c --- snapshot-20010808/src/smtpd/smtpd.c Thu Aug 2 06:19:52 2001 +++ snapshot-20010808-DROP/src/smtpd/smtpd.c Fri Aug 10 23:04:37 2001 @@ -1036,6 +1036,9 @@ } else if ((state->err & CLEANUP_STAT_CONT) != 0) { state->error_mask |= MAIL_ERROR_POLICY; smtpd_chat_reply(state, "552 Error: content rejected"); + } else if ((state->err & CLEANUP_STAT_DROP) != 0) { + state->error_mask |= MAIL_ERROR_2BOUNCE; + smtpd_chat_reply(state, "552 Error: content dropped"); } else if ((state->err & CLEANUP_STAT_WRITE) != 0) { state->error_mask |= MAIL_ERROR_RESOURCE; smtpd_chat_reply(state, "451 Error: queue file write error"); *** ../postfix-20010228-pl06/src/smtpd/smtpd.c Tue May 1 12:43:22 2001 --- ./src/smtpd/smtpd.c Wed Nov 14 22:25:28 2001 *************** *** 988,993 **** --- 988,1005 ---- state->where = SMTPD_AFTER_DOT; /* + * Notify the postmaster if there were errors. This usually indicates a + * client configuration problem, or that someone is trying nasty things. + * Either is significant enough to bother the postmaster. XXX Can't + * report problems when running in stand-alone mode: postmaster notices + * require availability of the cleanup service. + */ + if (state->history != 0 && state->client != VSTREAM_IN + && (state->error_mask & state->notify_mask)) + smtpd_chat_notify(state); + smtpd_chat_reset(state); + + /* * Cleanup. The client may send another MAIL command. */ mail_reset(state);