[Postfix espanol] Postfix non-beta release 20010228 patch 06 available

Wietse Venema wietse en porcupine.org
Dom Nov 4 17:07:23 CET 2001


Postfix non-beta release 20010228 patch 06 fixes problems that
were recently reported on the postfix-users mailing list. None
of these are critical. See the HISTORY comments below.

A patch is appended below the signature. A complete source kit,
postfix-20010228-pl06.tar.gz, will be made available from the
primary site:

   ftp://ftp.porcupine.org/mirrors/postfix-release/official/
   http://ftp.porcupine.org/mirrors/postfix-release/index.html

including a PGP signature (postfix-20010228-pl06.tar.gz.sig).

These files are expected to arrive on the Postfix download sites
in a day or so. See http://www.postfix.org/ for a list of download
sites.

        Wietse

Prereq: "Postfix-20010228-pl05"
diff -cr ../postfix-20010228-pl05/src/global/mail_version.h ./src/global/mail_version.h
*** ../postfix-20010228-pl05/src/global/mail_version.h	Mon Sep 17 16:12:24 2001
--- ./src/global/mail_version.h	Sun Nov  4 10:05:58 2001
***************
*** 15,21 ****
    * Version of this program.
    */
  #define VAR_MAIL_VERSION	"mail_version"
! #define DEF_MAIL_VERSION	"Postfix-20010228-pl05"
  extern char *var_mail_version;
  
  /* LICENSE
--- 15,21 ----
    * Version of this program.
    */
  #define VAR_MAIL_VERSION	"mail_version"
! #define DEF_MAIL_VERSION	"Postfix-20010228-pl06"
  extern char *var_mail_version;
  
  /* LICENSE
diff -cr ../postfix-20010228-pl05/HISTORY ./HISTORY
*** ../postfix-20010228-pl05/HISTORY	Mon Sep 17 17:44:21 2001
--- ./HISTORY	Sun Nov  4 10:35:50 2001
***************
*** 5109,5111 ****
--- 5109,5155 ----
  	above bug could cause an address to grow exponentially in
  	size.  Problem reported by Victor Duchovni, Morgan Stanley.
  	File:  global/split_addr.c.
+ 
+ 20010918
+ 
+ 	Bugfix: the mail_addr_map() fix was almost but not quite
+ 	right. It took two clever people and several iterations of
+ 	email to really fix the mail_addr_map() problem.  Thanks
+ 	to Victor Duchovni and Liviu Daia.
+ 
+ 20011016
+ 
+ 	Bugfix: As of 20000625, Errors-To: was broken, because the
+ 	code to extract the address was not moved from recipient
+ 	address rewriting to sender address rewriting. Problem
+ 	reported by Roelof Osinga @ nisser.com. File:
+ 	cleanup/cleanup_message.c.
+ 
+ 20011023
+ 
+ 	Bugfix: the FILTER_README content filtering example had
+ 	not been updated to include the sendmail "-i" command line
+ 	option.
+ 
+ 20011029
+ 
+ 	Bugfix: virtual map expansion terminated early because the
+ 	detection of self-referential entries was flawed.  File:
+ 	cleanup/cleanup_map1n.c.
+ 
+ 20011031
+ 
+ 	Bugfix: mail_date() mis-formatted negative time zone offsets
+ 	with fractional hours (-03-30 instead of -0330). Fix by
+ 	Chad House, greyfirst.ca. File: global/mail_date.c.
+ 
+ 20011103
+ 
+ 	Bugfix: Postfix would log the wrong error text when locally
+ 	submitted mail was deferred due to "soft_bounce = yes".
+ 
+ 	Bugfix: The LDAP client dropped any entries that don't have
+ 	the result_attribute, but errored out when a DN didn't
+ 	exist.  The behavior is now consistent: treat non-existant
+ 	DN's in a special result attribute expansion the same as
+ 	DN's with no attribute.  LaMont Jones, HP.
diff -cr ../postfix-20010228-pl05/FILTER_README ./FILTER_README
*** ../postfix-20010228-pl05/FILTER_README	Thu Mar  1 09:40:21 2001
--- ./FILTER_README	Tue Oct 23 18:51:20 2001
***************
*** 57,63 ****
  
      # Localize these
      INSPECT_DIR=/var/spool/filter
!     SENDMAIL=/usr/sbin/sendmail
  
      # Exit codes from <sysexits.h>
      EX_TEMPFAIL=75
--- 57,63 ----
  
      # Localize these
      INSPECT_DIR=/var/spool/filter
!     SENDMAIL="/usr/sbin/sendmail -i"
  
      # Exit codes from <sysexits.h>
      EX_TEMPFAIL=75
diff -cr ../postfix-20010228-pl05/INSTALL ./INSTALL
*** ../postfix-20010228-pl05/INSTALL	Fri Apr 27 13:45:52 2001
--- ./INSTALL	Sun Nov  4 10:35:01 2001
***************
*** 140,145 ****
--- 140,152 ----
  
  That's seven backslashes :-) But at least this works with sh and csh.
  
+ In order to build Postfix for very large applications, where you
+ expect to run more than 1000 delivery processes, you may need to
+ override the definition of the FD_SETSIZE macro to make select()
+ work correctly:
+ 
+     % make makefiles CCARGS=-DFD_SETSIZE=2048
+ 
  In any case, if the command
  
      % make
diff -cr ../postfix-20010228-pl05/src/cleanup/cleanup_api.c ./src/cleanup/cleanup_api.c
*** ../postfix-20010228-pl05/src/cleanup/cleanup_api.c	Sun Sep 24 14:12:58 2000
--- ./src/cleanup/cleanup_api.c	Sun Nov  4 10:09:57 2001
***************
*** 225,232 ****
  				state->queue_id, state->sender) == 0) {
  		state->errs = 0;
  	    } else {
! 		msg_warn("%s: bounce message failure", state->queue_id);
! 		state->errs = CLEANUP_STAT_WRITE;
  	    }
  	}
  	if (REMOVE(cleanup_path))
--- 225,234 ----
  				state->queue_id, state->sender) == 0) {
  		state->errs = 0;
  	    } else {
! 		if (var_soft_bounce == 0) {
! 		    msg_warn("%s: bounce message failure", state->queue_id);
! 		    state->errs = CLEANUP_STAT_WRITE;
! 		}
  	    }
  	}
  	if (REMOVE(cleanup_path))
diff -cr ../postfix-20010228-pl05/src/cleanup/cleanup_map1n.c ./src/cleanup/cleanup_map1n.c
*** ../postfix-20010228-pl05/src/cleanup/cleanup_map1n.c	Thu Oct 26 12:40:26 2000
--- ./src/cleanup/cleanup_map1n.c	Tue Oct 30 20:08:50 2001
***************
*** 101,107 ****
  	    break;
  	}
  	for (count = 0; /* void */ ; count++) {
! 	    if (been_here_fixed(been_here, argv->argv[arg]) != 0)
  		break;
  	    if (count >= MAX_RECURSION) {
  		msg_warn("%s: unreasonable %s map nesting for %s",
--- 101,111 ----
  	    break;
  	}
  	for (count = 0; /* void */ ; count++) {
! 
! 	    /*
! 	     * Don't expand an address that already expanded into itself.
! 	     */
! 	    if (been_here_check_fixed(been_here, argv->argv[arg]) != 0)
  		break;
  	    if (count >= MAX_RECURSION) {
  		msg_warn("%s: unreasonable %s map nesting for %s",
***************
*** 118,123 ****
--- 122,133 ----
  			argv_add(argv, STR(state->temp1), ARGV_END);
  			argv_terminate(argv);
  		    }
+ 
+ 		    /*
+ 		     * Allow an address to expand into itself once.
+ 		     */
+ 		    if (strcasecmp(saved_lhs, STR(state->temp1)) == 0)
+ 			been_here_fixed(been_here, saved_lhs);
  		}
  		myfree(saved_lhs);
  		argv_free(lookup);
diff -cr ../postfix-20010228-pl05/src/cleanup/cleanup_message.c ./src/cleanup/cleanup_message.c
*** ../postfix-20010228-pl05/src/cleanup/cleanup_message.c	Mon Nov 20 13:05:07 2000
--- ./src/cleanup/cleanup_message.c	Tue Oct 16 21:23:03 2001
***************
*** 185,190 ****
--- 185,196 ----
  	if (hdr_opts->type == HDR_RESENT_FROM && state->resent_from == 0)
  	    state->resent_from =
  		cleanup_extract_internal(state->header_buf, *tpp);
+ 	if (hdr_opts->type == HDR_RETURN_RECEIPT_TO && !state->return_receipt)
+ 	    state->return_receipt =
+ 		cleanup_extract_internal(state->header_buf, *tpp);
+ 	if (hdr_opts->type == HDR_ERRORS_TO && !state->errors_to)
+ 	    state->errors_to =
+ 		cleanup_extract_internal(state->header_buf, *tpp);
      }
      vstring_sprintf(state->header_buf, "%s: ", hdr_opts->name);
      tok822_externalize(state->header_buf, tree, TOK822_STR_HEAD);
***************
*** 232,243 ****
  	}
  	if (cleanup_masq_domains)
  	    cleanup_masquerade_tree(*tpp, cleanup_masq_domains);
- 	if (hdr_opts->type == HDR_RETURN_RECEIPT_TO && !state->return_receipt)
- 	    state->return_receipt =
- 		cleanup_extract_internal(state->header_buf, *tpp);
- 	if (hdr_opts->type == HDR_ERRORS_TO && !state->errors_to)
- 	    state->errors_to =
- 		cleanup_extract_internal(state->header_buf, *tpp);
      }
      vstring_sprintf(state->header_buf, "%s: ", hdr_opts->name);
      tok822_externalize(state->header_buf, tree, TOK822_STR_HEAD);
--- 238,243 ----
diff -cr ../postfix-20010228-pl05/src/global/mail_addr_map.c ./src/global/mail_addr_map.c
*** ../postfix-20010228-pl05/src/global/mail_addr_map.c	Mon Sep 17 17:34:47 2001
--- ./src/global/mail_addr_map.c	Sun Oct  7 17:55:23 2001
***************
*** 68,73 ****
--- 68,74 ----
  /* Application-specific. */
  
  #define STR	vstring_str
+ #define LEN	VSTRING_LEN
  
  /* mail_addr_map - map a canonical address */
  
***************
*** 88,94 ****
      if ((string = mail_addr_find(path, address, &extension)) != 0) {
  
  	/*
! 	 * Prepend the original user to @otherdomain.
  	 */
  	if (*string == '@') {
  	    buffer = vstring_alloc(100);
--- 89,96 ----
      if ((string = mail_addr_find(path, address, &extension)) != 0) {
  
  	/*
! 	 * Prepend the original user to @otherdomain, but do not propagate
! 	 * the unmatched address extension.
  	 */
  	if (*string == '@') {
  	    buffer = vstring_alloc(100);
***************
*** 96,121 ****
  		vstring_strncpy(buffer, address, ratsign - address);
  	    else
  		vstring_strcpy(buffer, address);
  	    vstring_strcat(buffer, string);
  	    string = STR(buffer);
- 
- 	    /*
- 	     * The above code copies the address, including address
- 	     * extension, to the result. Discard the address extension at
- 	     * this point, to prevent a second address extension copy by
- 	     * mail_addr_crunch() below.  Fix by Victor Duchovni, Morgan
- 	     * Stanley.
- 	     * 
- 	     * In combination with an obscure bug in the split_addr() routine
- 	     * that mis-parsed an address without information before the
- 	     * extension, this could result in the exponential growth of the
- 	     * size of an address. Problem reported by Victor Duchovni,
- 	     * Morgan Stanley.
- 	     */
- 	    if (extension) {
- 		myfree(extension);
- 		extension = 0;
- 	    }
  	}
  
  	/*
--- 98,107 ----
  		vstring_strncpy(buffer, address, ratsign - address);
  	    else
  		vstring_strcpy(buffer, address);
+ 	    if (extension)
+ 		vstring_truncate(buffer, LEN(buffer) - strlen(extension));
  	    vstring_strcat(buffer, string);
  	    string = STR(buffer);
  	}
  
  	/*
***************
*** 175,187 ****
      /*
       * Initialize.
       */
      mail_conf_read();
      msg_verbose = 1;
-     var_rcpt_delim = "+";
      if (chdir(var_queue_dir) < 0)
  	msg_fatal("chdir %s: %m", var_queue_dir);
      path = maps_create(argv[0], argv[1], DICT_FLAG_LOCK);
      while (vstring_fgets_nonl(buffer, VSTREAM_IN)) {
  	if ((result = mail_addr_map(path, STR(buffer), 1)) != 0)
  	    argv_free(result);
      }
--- 161,183 ----
      /*
       * Initialize.
       */
+ #define UPDATE(dst, src) { myfree(dst); dst = mystrdup(src); }
+ 
      mail_conf_read();
      msg_verbose = 1;
      if (chdir(var_queue_dir) < 0)
  	msg_fatal("chdir %s: %m", var_queue_dir);
      path = maps_create(argv[0], argv[1], DICT_FLAG_LOCK);
      while (vstring_fgets_nonl(buffer, VSTREAM_IN)) {
+ 	msg_info("=== Address extension on, extension propagation on ===");
+ 	UPDATE(var_rcpt_delim, "+");
+ 	if ((result = mail_addr_map(path, STR(buffer), 1)) != 0)
+ 	    argv_free(result);
+ 	msg_info("=== Address extension on, extension propagation off ===");
+ 	if ((result = mail_addr_map(path, STR(buffer), 0)) != 0)
+ 	    argv_free(result);
+ 	msg_info("=== Address extension off ===");
+ 	UPDATE(var_rcpt_delim, "");
  	if ((result = mail_addr_map(path, STR(buffer), 1)) != 0)
  	    argv_free(result);
      }
diff -cr ../postfix-20010228-pl05/src/global/mail_date.c ./src/global/mail_date.c
*** ../postfix-20010228-pl05/src/global/mail_date.c	Tue Mar 16 12:55:41 1999
--- ./src/global/mail_date.c	Wed Oct 31 13:06:46 2001
***************
*** 115,121 ****
      if (gmtoff < -DAY_MIN || gmtoff > DAY_MIN)
  	msg_panic("UTC time offset %d is larger than one day", gmtoff);
      vstring_sprintf_append(vp, "%+03d%02d", (int) (gmtoff / HOUR_MIN),
! 			   (int) (gmtoff % HOUR_MIN));
  
      /*
       * Finally, add the time zone name.
--- 115,121 ----
      if (gmtoff < -DAY_MIN || gmtoff > DAY_MIN)
  	msg_panic("UTC time offset %d is larger than one day", gmtoff);
      vstring_sprintf_append(vp, "%+03d%02d", (int) (gmtoff / HOUR_MIN),
! 			   (int) (abs(gmtoff) % HOUR_MIN));
  
      /*
       * Finally, add the time zone name.
diff -cr ../postfix-20010228-pl05/src/global/split_addr.c ./src/global/split_addr.c
*** ../postfix-20010228-pl05/src/global/split_addr.c	Mon Sep 17 17:27:06 2001
--- ./src/global/split_addr.c	Tue Sep 18 10:19:59 2001
***************
*** 67,73 ****
      /*
       * Backwards compatibility: don't split owner-foo or foo-request.
       */
!     if (var_ownreq_special != 0) {
  	if (strncasecmp(localpart, "owner-", 6) == 0)
  	    return (0);
  	if ((len = strlen(localpart) - 8) > 0
--- 67,73 ----
      /*
       * Backwards compatibility: don't split owner-foo or foo-request.
       */
!     if (delimiter == '-' && var_ownreq_special != 0) {
  	if (strncasecmp(localpart, "owner-", 6) == 0)
  	    return (0);
  	if ((len = strlen(localpart) - 8) > 0
diff -cr ../postfix-20010228-pl05/src/util/dict_ldap.c ./src/util/dict_ldap.c
*** ../postfix-20010228-pl05/src/util/dict_ldap.c	Tue Jul 17 15:56:27 2001
--- ./src/util/dict_ldap.c	Sat Nov  3 20:09:16 2001
***************
*** 373,385 ****
  					 dict_ldap->result_attributes->argv,
  					    0, &tv, &resloop);
  		    }
! 		    if (rc == LDAP_SUCCESS)
! 			dict_ldap_get_values(dict_ldap, resloop, result);
! 		    else {
! 			msg_warn("%s: search error %d: %s ", myname, rc,
  				 ldap_err2string(rc));
! 			dict_errno = DICT_ERR_RETRY;
  		    }
  		    if (resloop != 0)
  			ldap_msgfree(resloop);
  		}
--- 373,396 ----
  					 dict_ldap->result_attributes->argv,
  					    0, &tv, &resloop);
  		    }
! 		    switch (rc) {
! 			case LDAP_SUCCESS:
! 			    dict_ldap_get_values(dict_ldap, resloop, result);
! 			    break;
! 			case LDAP_NO_SUCH_OBJECT:
! 			    /* Go ahead and treat this as though the DN existed
! 			     * and just didn't have any result attributes.
! 			     */
! 			    msg_warn("%s: DN %s not found, skipping ", myname,
! 				vals[i]);
! 			    break;
! 			default:
! 			    msg_warn("%s: search error %d: %s ", myname, rc,
  				 ldap_err2string(rc));
! 			    dict_errno = DICT_ERR_RETRY;
! 			    break;
  		    }
+ 
  		    if (resloop != 0)
  			ldap_msgfree(resloop);
  		}

-
Para quitarte de la lista enviar la linea "unsubscribe postfix-espanol" en
el cuerpo de un mensaje a majordomo en unicorn.ea4els.ampr.org



Más información sobre la lista de distribución Postfix-es