OSEC

Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com
 
Re: "message too large" not logged in syslog

From: Wietse Venema (wietseporcupine.org)
Date: Tue Aug 22 2006 - 08:59:52 CDT


Ralf Hildebrandt:
> A former collegue of mine complained that a message is not being sent
> out. I had a look around.
>

When the "message too large" test was duplicated from the
cleanup server to the SMTP server, the warning message
was not duplicated.

Another place where it isn't logged is the Milter client,
in the cleanup server.

        Wietse

diff -cr /var/tmp/postfix-2.4-20060806/src/cleanup/cleanup_milter.c ./src/cleanup/cleanup_milter.c
*** /var/tmp/postfix-2.4-20060806/src/cleanup/cleanup_milter.c Wed Jul 26 15:16:08 2006
--- ./src/cleanup/cleanup_milter.c Tue Aug 22 09:57:27 2006
***************
*** 213,222 ****
  
  static void cleanup_milter_set_error(CLEANUP_STATE *state, int err)
  {
! if (err == EFBIG)
          state->errs |= CLEANUP_STAT_SIZE;
! else
          state->errs |= CLEANUP_STAT_WRITE;
  }
  
  /* cleanup_milter_error - return dummy error description */
--- 213,225 ----
  
  static void cleanup_milter_set_error(CLEANUP_STATE *state, int err)
  {
! if (err == EFBIG) {
! msg_warn("%s: queue file size limit exceeded", state->queue_id);
          state->errs |= CLEANUP_STAT_SIZE;
! } else {
! msg_warn("%s: write queue file: %m", state->queue_id);
          state->errs |= CLEANUP_STAT_WRITE;
+ }
  }
  
  /* cleanup_milter_error - return dummy error description */
diff -cr /var/tmp/postfix-2.4-20060806/src/smtpd/smtpd.c ./src/smtpd/smtpd.c
*** /var/tmp/postfix-2.4-20060806/src/smtpd/smtpd.c Wed Jul 26 20:47:39 2006
--- ./src/smtpd/smtpd.c Tue Aug 22 09:53:52 2006
***************
*** 2643,2651 ****
              && (state->proxy == 0 ? (++start, --len) == 0 : len == 1))
              break;
          if (state->err == CLEANUP_STAT_OK) {
! if (var_message_limit > 0 && var_message_limit - state->act_size < len + 2)
                  state->err = CLEANUP_STAT_SIZE;
! else {
                  state->act_size += len + 2;
                  if (out_record(out_stream, curr_rec_type, start, len) < 0)
                      state->err = out_error;
--- 2643,2653 ----
              && (state->proxy == 0 ? (++start, --len) == 0 : len == 1))
              break;
          if (state->err == CLEANUP_STAT_OK) {
! if (var_message_limit > 0 && var_message_limit - state->act_size < len + 2) {
                  state->err = CLEANUP_STAT_SIZE;
! msg_warn("%s: queue file size limit exceeded",
! state->queue_id ? state->queue_id : "NOQUEUE");
! } else {
                  state->act_size += len + 2;
                  if (out_record(out_stream, curr_rec_type, start, len) < 0)
                      state->err = out_error;