Prereq: "2.6.0" diff -cr --new-file /var/tmp/postfix-2.6.0/src/global/mail_version.h ./src/global/mail_version.h *** /var/tmp/postfix-2.6.0/src/global/mail_version.h Mon May 11 17:28:13 2009 --- ./src/global/mail_version.h Tue May 19 19:56:41 2009 *************** *** 20,27 **** * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ ! #define MAIL_RELEASE_DATE "20090511" ! #define MAIL_VERSION_NUMBER "2.6.0" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE --- 20,27 ---- * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ ! #define MAIL_RELEASE_DATE "20090519" ! #define MAIL_VERSION_NUMBER "2.6.1" #ifdef SNAPSHOT # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE diff -cr --new-file /var/tmp/postfix-2.6.0/HISTORY ./HISTORY *** /var/tmp/postfix-2.6.0/HISTORY Mon May 11 19:31:02 2009 --- ./HISTORY Tue May 19 19:41:46 2009 *************** *** 15220,15222 **** --- 15220,15233 ---- Code cleanups: don't clobber -o command-line arguments so that Linux people can debug daemon command lines more easily. Files: master/*server.c. + + 20090519 + + Bugfix (introduced: Postfix 2.3, but did not cause trouble + until 20090427). Queue file corruption, with (smtpd_milters + or non_smtpd_milters) enabled, AND with delay_warning_time + enabled, AND with short envelope sender addresses e.g., + local submissions with bare usernames, but not bounces). + The queue file would be corrupted when the delay_warning_time + record was marked as "done" after sending the "your mail + is delayed" notice. File: qmgr/qmgr_message.c. diff -cr --new-file /var/tmp/postfix-2.6.0/RELEASE_NOTES ./RELEASE_NOTES *** /var/tmp/postfix-2.6.0/RELEASE_NOTES Mon May 11 19:46:24 2009 --- ./RELEASE_NOTES Mon May 11 20:36:24 2009 *************** *** 42,55 **** Best of all, nothing changes when you use only one Postfix instance. ! The postfix-wrapper script (in the daemon directory) implements a ! simple but useful multi-instance manager, with instructions. The ! plug-in API itself is described in the postfix-wrapper(5) manpage. ! ! A more sophisticated multi-instance manager called postmulti(1) is ! approaching completion. A prototype version has been used internally ! at Morgan Stanley. This version will be adapted to the new plug-in ! API which makes some simplification possible. Major changes - milter support ------------------------------ --- 42,50 ---- Best of all, nothing changes when you use only one Postfix instance. ! The MULTI_INSTANCE_README file presents an introduction to ! multi-instance management. Multi-instance support is based on an ! API that is described in the postfix-wrapper(5) manual page. Major changes - milter support ------------------------------ diff -cr --new-file /var/tmp/postfix-2.6.0/src/cleanup/cleanup_envelope.c ./src/cleanup/cleanup_envelope.c *** /var/tmp/postfix-2.6.0/src/cleanup/cleanup_envelope.c Sun May 10 14:39:28 2009 --- ./src/cleanup/cleanup_envelope.c Tue May 19 14:37:14 2009 *************** *** 385,392 **** cleanup_addr_sender(state, buf); if (state->milters || cleanup_milters) { /* Make room to replace sender. */ ! if (len < REC_TYPE_PTR_PAYL_SIZE) ! rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE - len); /* Remember the after-sender record offset. */ if ((state->sender_pt_target = vstream_ftell(state->dst)) < 0) msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path); --- 385,391 ---- cleanup_addr_sender(state, buf); if (state->milters || cleanup_milters) { /* Make room to replace sender. */ ! rec_pad(state->dst, REC_TYPE_PTR, REC_TYPE_PTR_PAYL_SIZE); /* Remember the after-sender record offset. */ if ((state->sender_pt_target = vstream_ftell(state->dst)) < 0) msg_fatal("%s: vstream_ftell %s: %m:", myname, cleanup_path); diff -cr --new-file /var/tmp/postfix-2.6.0/src/oqmgr/qmgr_message.c ./src/oqmgr/qmgr_message.c *** /var/tmp/postfix-2.6.0/src/oqmgr/qmgr_message.c Sat Oct 11 19:48:02 2008 --- ./src/oqmgr/qmgr_message.c Tue May 19 15:19:17 2009 *************** *** 366,375 **** msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp)); curr_offset += message->data_size; } ! rec_type = rec_get(message->fp, buf, 0); start = vstring_str(buf); if (msg_verbose > 1) msg_info("record %c %s", rec_type, start); if (rec_type <= 0) { msg_warn("%s: message rejected: missing end record", message->queue_id); --- 366,381 ---- msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp)); curr_offset += message->data_size; } ! rec_type = rec_get_raw(message->fp, buf, 0, REC_FLAG_NONE); start = vstring_str(buf); if (msg_verbose > 1) msg_info("record %c %s", rec_type, start); + if (rec_type == REC_TYPE_PTR) { + if ((rec_type = rec_goto(message->fp, start)) == REC_TYPE_ERROR) + break; + /* Need to update curr_offset after pointer jump. */ + continue; + } if (rec_type <= 0) { msg_warn("%s: message rejected: missing end record", message->queue_id); diff -cr --new-file /var/tmp/postfix-2.6.0/src/qmgr/qmgr_message.c ./src/qmgr/qmgr_message.c *** /var/tmp/postfix-2.6.0/src/qmgr/qmgr_message.c Sat Oct 11 19:47:47 2008 --- ./src/qmgr/qmgr_message.c Tue May 19 15:08:04 2009 *************** *** 406,415 **** msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp)); curr_offset += message->data_size; } ! rec_type = rec_get(message->fp, buf, 0); start = vstring_str(buf); if (msg_verbose > 1) msg_info("record %c %s", rec_type, start); if (rec_type <= 0) { msg_warn("%s: message rejected: missing end record", message->queue_id); --- 406,421 ---- msg_fatal("seek file %s: %m", VSTREAM_PATH(message->fp)); curr_offset += message->data_size; } ! rec_type = rec_get_raw(message->fp, buf, 0, REC_FLAG_NONE); start = vstring_str(buf); if (msg_verbose > 1) msg_info("record %c %s", rec_type, start); + if (rec_type == REC_TYPE_PTR) { + if ((rec_type = rec_goto(message->fp, start)) == REC_TYPE_ERROR) + break; + /* Need to update curr_offset after pointer jump. */ + continue; + } if (rec_type <= 0) { msg_warn("%s: message rejected: missing end record", message->queue_id);