Prereq: "2.7.6"
diff -cr --new-file /var/tmp/postfix-2.7.6/src/global/mail_version.h ./src/global/mail_version.h
*** /var/tmp/postfix-2.7.6/src/global/mail_version.h	Fri Sep  2 17:53:42 2011
--- ./src/global/mail_version.h	Sun Oct 23 19:46:02 2011
***************
*** 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	"20110902"
! #define MAIL_VERSION_NUMBER	"2.7.6"
  
  #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	"20111924"
! #define MAIL_VERSION_NUMBER	"2.7.7"
  
  #ifdef SNAPSHOT
  # define MAIL_VERSION_DATE	"-" MAIL_RELEASE_DATE
diff -cr --new-file /var/tmp/postfix-2.7.6/HISTORY ./HISTORY
*** /var/tmp/postfix-2.7.6/HISTORY	Wed Aug 31 16:01:52 2011
--- ./HISTORY	Thu Oct 20 17:33:53 2011
***************
*** 15956,15958 ****
--- 15956,15991 ----
  	Bugfix: allow for Milters that send an SMTP server reply
  	without RFC 3463 enhanced status code. Reported by Vladimir
  	Vassiliev.  File: milter/milter8.c.
+ 
+ 20110903
+ 
+ 	Bugfix: master daemon panic with "master_spawn: at process
+ 	limit" error, when "postfix reload" reduced the process
+ 	limit from (a value larger than the current process count
+ 	for some service) to (a value <= the current process count),
+ 	and then a new connection was made to that service.  This
+ 	is the smallest change that eliminates the problem. The
+ 	final solution involves structural change, and goes into
+ 	the development release. File: master/master_avail.c.
+ 
+ 20110921
+ 
+ 	Bugfix (introduced: Postfix 1.1): smtpd(8) did not sanitize
+ 	newline characters in cleanup(8) REJECT messages, causing
+ 	them to be sent out via SMTP as bare newline characters.
+ 	This happened when a REJECT pattern matched multi-line
+ 	header text.  Discovered by Kevin Locke.  File: smtpd/smtpd.c.
+ 
+ 20110922
+ 
+ 	Bugfix (introduced: Postfix 2.1): smtpd(8) sent multi-line
+ 	responses from a before-queue content filter as text with
+ 	bare <LF> instead of <CR><LF>.  Found during code maintenance.
+ 	File: smtpd/smtpd_proxy.c.
+ 
+ 20111020
+ 
+ 	EAI Future-proofing: don't apply strict_mime_encoding_domain
+ 	checks to unknown message subtypes such as message/global*.
+ 	File: global/mime_state.c.
+ 
diff -cr --new-file /var/tmp/postfix-2.7.6/src/global/mime_state.c ./src/global/mime_state.c
*** /var/tmp/postfix-2.7.6/src/global/mime_state.c	Wed Jan  9 08:59:40 2008
--- ./src/global/mime_state.c	Thu Oct 20 17:33:53 2011
***************
*** 925,931 ****
  		    if (state->curr_domain != MIME_ENC_7BIT)
  			REPORT_ERROR(state, MIME_ERR_ENCODING_DOMAIN,
  				 mime_state_enc_name(state->curr_encoding));
! 		} else {
  		    if (state->curr_encoding != state->curr_domain)
  			REPORT_ERROR(state, MIME_ERR_ENCODING_DOMAIN,
  				 mime_state_enc_name(state->curr_encoding));
--- 925,933 ----
  		    if (state->curr_domain != MIME_ENC_7BIT)
  			REPORT_ERROR(state, MIME_ERR_ENCODING_DOMAIN,
  				 mime_state_enc_name(state->curr_encoding));
! 		}
! 		/* EAI: message/global allows non-identity encoding. */
! 		else if (state->curr_stype == MIME_STYPE_RFC822) {
  		    if (state->curr_encoding != state->curr_domain)
  			REPORT_ERROR(state, MIME_ERR_ENCODING_DOMAIN,
  				 mime_state_enc_name(state->curr_encoding));
diff -cr --new-file /var/tmp/postfix-2.7.6/src/master/master_avail.c ./src/master/master_avail.c
*** /var/tmp/postfix-2.7.6/src/master/master_avail.c	Thu Jun 11 16:46:17 2009
--- ./src/master/master_avail.c	Thu Oct 20 17:33:53 2011
***************
*** 85,91 ****
  
      if (event == 0)				/* XXX Can this happen? */
  	return;
!     if (MASTER_THROTTLED(serv)) {		/* XXX interface botch */
  	for (n = 0; n < serv->listen_fd_count; n++)
  	    event_disable_readwrite(serv->listen_fd[n]);
      } else {
--- 85,93 ----
  
      if (event == 0)				/* XXX Can this happen? */
  	return;
!     /* XXX Should check these when the process or service status is changed. */
!     if (!MASTER_LIMIT_OK(serv->max_proc, serv->total_proc)
! 	|| MASTER_THROTTLED(serv)) {		/* XXX interface botch */
  	for (n = 0; n < serv->listen_fd_count; n++)
  	    event_disable_readwrite(serv->listen_fd[n]);
      } else {
diff -cr --new-file /var/tmp/postfix-2.7.6/src/smtpd/smtpd.c ./src/smtpd/smtpd.c
*** /var/tmp/postfix-2.7.6/src/smtpd/smtpd.c	Sat Jan  8 18:43:48 2011
--- ./src/smtpd/smtpd.c	Thu Oct 20 17:33:53 2011
***************
*** 3005,3010 ****
--- 3005,3011 ----
  	if (state->err == 0) {
  	    why = vstring_alloc(10);
  	    state->err = mail_stream_finish(state->dest, why);
+ 	    printable(STR(why), ' ');
  	} else
  	    mail_stream_cleanup(state->dest);
  	state->dest = 0;
diff -cr --new-file /var/tmp/postfix-2.7.6/src/smtpd/smtpd_proxy.c ./src/smtpd/smtpd_proxy.c
*** /var/tmp/postfix-2.7.6/src/smtpd/smtpd_proxy.c	Fri Aug 27 16:40:33 2010
--- ./src/smtpd/smtpd_proxy.c	Thu Oct 20 17:33:53 2011
***************
*** 777,783 ****
  	 */
  	if (LEN(proxy->buffer) < var_line_limit) {
  	    if (VSTRING_LEN(proxy->buffer))
! 		VSTRING_ADDCH(proxy->buffer, '\n');
  	    vstring_strcat(proxy->buffer, STR(buffer));
  	}
  
--- 777,783 ----
  	 */
  	if (LEN(proxy->buffer) < var_line_limit) {
  	    if (VSTRING_LEN(proxy->buffer))
! 		vstring_strcat(proxy->buffer, "\r\n");
  	    vstring_strcat(proxy->buffer, STR(buffer));
  	}