]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.0.16-20031224
authorWietse Venema <wietse@porcupine.org>
Wed, 24 Dec 2003 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:29:24 +0000 (06:29 +0000)
13 files changed:
postfix/HISTORY
postfix/html/postsuper.1.html
postfix/html/smtp.8.html
postfix/man/man1/postsuper.1
postfix/man/man8/smtp.8
postfix/src/anvil/Makefile.in
postfix/src/anvil/anvil.c
postfix/src/global/mail_stream.c
postfix/src/global/mail_version.h
postfix/src/master/master_sig.c
postfix/src/postsuper/postsuper.c
postfix/src/smtp/smtp.c
postfix/src/util/auto_clnt.c

index edaedd25761c4dba05529b3587b22e67ca15a63c..ab1b56f4a5825508bbdf1a7e35858277066c7ccc 100644 (file)
@@ -8911,6 +8911,15 @@ Apologies for any names omitted.
        Fix is to turn off loop detection when a non-default TCP
        port is specified.  File: smtp/smtp_addr.c.
 
+       Bugfix: restore errno after write failure in SIGCHLD handler.
+       Leandro Santi. File: master/master_sig.c.
+
+       Bugfix: the auto_clnt module disconnected too early, causing
+       unnecessary work by the anvil server.
+
+       Cleanup: eliminated binary hashes from anvil server. Anvil
+       client information is now stored on top of its VSTREAM.
+
 Open problems:
 
        Low: in the SMTP client, pass the session, request and
index 2a8ff15ac1f4c105bf7ae59eeabd3272cc0f29a3..1364a46d407ea2d185fc8f108b9396de2ee86289 100644 (file)
@@ -1,12 +1,12 @@
-<html> <head> </head> <body> <pre>
+<html> <body> <pre>
 POSTSUPER(1)                                         POSTSUPER(1)
 
 <b>NAME</b>
        postsuper - Postfix superintendent
 
 <b>SYNOPSIS</b>
-       <b>postsuper</b> [<b>-psv</b>] [<b>-c</b> <i>config_dir</i>] [<b>-d</b> <i>queue_id</i>] [<b>-h</b>
-       <i>queue_id</i>] [<b>-H</b> <i>queue_id</i>] [<b>-r</b> <i>queue_id</i>] [<i>directory</i> <i>...</i>]
+       <b>postsuper</b> [<b>-psv</b>] [<b>-c</b> <i>config</i><b>_</b><i>dir</i>] [<b>-d</b> <i>queue</i><b>_</b><i>id</i>] [<b>-h</b>
+       <i>queue</i><b>_</b><i>id</i>] [<b>-H</b> <i>queue</i><b>_</b><i>id</i>] [<b>-r</b> <i>queue</i><b>_</b><i>id</i>] [<i>directory ...</i>]
 
 <b>DESCRIPTION</b>
        The <b>postsuper</b> command does maintenance jobs on the Postfix
@@ -22,16 +22,16 @@ POSTSUPER(1)                                         POSTSUPER(1)
 
        Options:
 
-       <b>-c</b> <i>config_dir</i>
+       <b>-c</b> <i>config</i><b>_</b><i>dir</i>
               The  <b>main.cf</b>  configuration  file  is  in the named
               directory  instead  of  the  default  configuration
               directory.  See  also  the  MAIL_CONFIG environment
               setting below.
 
-       <b>-d</b> <i>queue_id</i>
+       <b>-d</b> <i>queue</i><b>_</b><i>id</i>
               Delete one message with the named queue ID from the
               named   mail  queue(s)  (default:  <b>hold</b>,  <b>incoming</b>,
-              <b>active</b> and <b>deferred</b>).  If a <i>queue_id</i> of <b>-</b> is speci-
+              <b>active</b> and <b>deferred</b>).  If a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is speci-
               fied,  the  program  reads  queue IDs from standard
               input. For example, to delete all mail from  or  to
               <b>user@example.com</b>:
@@ -40,15 +40,15 @@ POSTSUPER(1)                                         POSTSUPER(1)
                   / user@example\.com$/ { print $1 } \
               ' | tr -d '*!' | postsuper -d -
 
-              Specify <b>-d</b> <b>ALL</b> to remove all messages; for example,
-              specify <b>-d</b> <b>ALL</b>  <b>deferred</b>  to  delete  mail  in  the
+              Specify <b>-d ALL</b> to remove all messages; for example,
+              specify <b>-d ALL  deferred</b>  to  delete  mail  in  the
               <b>deferred</b>  queue.  As a safety measure, the word <b>ALL</b>
               must be specified in upper case.
 
-              <b>Postfix</b> <b>queue</b> <b>IDs</b> <b>are</b>  <b>reused.</b>   <b>There</b>  <b>is</b>  <b>a</b>  <b>very</b>
-              <b>small</b>  <b>possibility</b> <b>that</b> <b>postsuper</b> <b>deletes</b> <b>the</b> <b>wrong</b>
-              <b>message</b> <b>file</b> <b>when</b> <b>it</b> <b>is</b> <b>executed</b> <b>while</b> <b>the</b>  <b>Postfix</b>
-              <b>mail</b> <b>system</b> <b>is</b> <b>running.</b>
+              <b>Postfix queue IDs are  reused.   There  is  a  very</b>
+              <b>small  possibility that postsuper deletes the wrong</b>
+              <b>message file when it is executed while the  Postfix</b>
+              <b>mail system is running.</b>
 
               The scenario is as follows:
 
@@ -69,89 +69,90 @@ POSTSUPER(1)                                         POSTSUPER(1)
                      of  the  old  message  that  it  should have
                      deleted.
 
-       <b>-h</b> <i>queue_id</i>
+       <b>-h</b> <i>queue</i><b>_</b><i>id</i>
               Put mail "on hold" so that no attempt  is  made  to
               deliver  it.  Move one message with the named queue
               ID from the named mail queue(s) (default: <b>incoming</b>,
               <b>active</b>  and  <b>deferred</b>)  to  the  <b>hold</b>  queue.  If a
-              <i>queue_id</i> of <b>-</b> is specified, the program reads queue
+              <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the program reads queue
               IDs from standard input.
 
-              Specify  <b>-h</b>  <b>ALL</b> to hold all messages; for example,
-              specify  <b>-h</b>  <b>ALL</b>  <b>deferred</b>  to  hold  mail  in  the
+              Specify  <b>-h  ALL</b> to hold all messages; for example,
+              specify  <b>-h  ALL  deferred</b>  to  hold  mail  in  the
               <b>deferred</b>  queue.  As a safety measure, the word <b>ALL</b>
               must be specified in upper case.
 
-              Note: mail that is put "on hold"  will  not  expire
+              Note: while mail is "on hold" it  will  not  expire
               when  its  time  in  the  queue  exceeds  the <b>maxi-</b>
-              <b>mal</b><i>_</i><b>queue</b><i>_</i><b>lifetime</b> setting.
+              <b>mal_queue_lifetime</b> setting. It becomes  subject  to
+              expiration after it is released from "hold".
 
-       <b>-H</b> <i>queue_id</i>
+       <b>-H</b> <i>queue</i><b>_</b><i>id</i>
               Release mail that was put "on hold".  Move one mes-
-              sage  with  the  named queue ID from the named mail
+              sage with the named queue ID from  the  named  mail
               queue(s) (default: <b>hold</b>) to the <b>deferred</b> queue.  If
-              a  <i>queue_id</i>  of  <b>-</b>  is specified, the program reads
+              a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is  specified,  the  program  reads
               queue IDs from standard input.
 
-              Specify <b>-H</b> <b>ALL</b> to release  all  mail  that  is  "on
-              hold".   As  a safety measure, the word <b>ALL</b> must be
+              Specify  <b>-H  ALL</b>  to  release  all mail that is "on
+              hold".  As a safety measure, the word <b>ALL</b>  must  be
               specified in upper case.
 
-       <b>-p</b>     Purge old temporary files that are left over  after
+       <b>-p</b>     Purge  old temporary files that are left over after
               system or software crashes.
 
-       <b>-r</b> <i>queue_id</i>
-              Requeue  the  message  with the named queue ID from
-              the named mail queue(s) (default:  <b>hold</b>,  <b>incoming</b>,
-              <b>active</b>  and  <b>deferred</b>).   To  requeue multiple mes-
-              sages, specify multiple  <b>-r</b>  command-line  options.
-              Alternatively, if a <i>queue_id</i> of <b>-</b> is specified, the
+       <b>-r</b> <i>queue</i><b>_</b><i>id</i>
+              Requeue the message with the named  queue  ID  from
+              the  named  mail queue(s) (default: <b>hold</b>, <b>incoming</b>,
+              <b>active</b> and <b>deferred</b>).   To  requeue  multiple  mes-
+              sages,  specify  multiple  <b>-r</b> command-line options.
+              Alternatively, if a <i>queue</i><b>_</b><i>id</i> of <b>-</b> is specified, the
               program reads queue IDs from standard input.
 
-              Specify <b>-r</b> <b>ALL</b> to requeue all messages. As a safety
-              measure,  the  word  <b>ALL</b> must be specified in upper
+              Specify <b>-r ALL</b> to requeue all messages. As a safety
+              measure, the word <b>ALL</b> must be  specified  in  upper
               case.
 
-              A requeued message is moved to the <b>maildrop</b>  queue,
-              from  where  it is copied by the pickup daemon to a
-              new file whose name is guaranteed to match the  new
+              A  requeued message is moved to the <b>maildrop</b> queue,
+              from where it is copied by the pickup daemon  to  a
+              new  file whose name is guaranteed to match the new
               queue file inode number. The new queue file is sub-
-              jected again to mail address rewriting and  substi-
+              jected  again to mail address rewriting and substi-
               tution. This is useful when rewriting rules or vir-
               tual mappings have changed.
 
-              Postfix queue IDs are  reused.   There  is  a  very
+              Postfix  queue  IDs  are  reused.   There is a very
               small possibility that <b>postsuper</b> requeues the wrong
-              message file when it is executed while the  Postfix
+              message  file when it is executed while the Postfix
               mail system is running, but no harm should be done.
 
        <b>-s</b>     Structure check and structure repair.  It is highly
-              recommended  to  perform this operation once before
+              recommended to perform this operation  once  before
               Postfix startup.
 
-              <b>o</b>      Rename files whose name does not  match  the
+              <b>o</b>      Rename  files  whose name does not match the
                      message file inode number. This operation is
-                     necessary after restoring a mail queue  from
+                     necessary  after restoring a mail queue from
                      a different machine, or from backup media.
 
               <b>o</b>      Move queue files that are in the wrong place
                      in the file system hierarchy and remove sub-
                      directories that are no longer needed.  File
-                     position rearrangements are necessary  after
-                     a  change  in  the  <b>hash</b><i>_</i><b>queue</b><i>_</i><b>names</b>  and/or
-                     <b>hash</b><i>_</i><b>queue</b><i>_</i><b>depth</b> configuration parameters.
+                     position  rearrangements are necessary after
+                     a  change  in  the  <b>hash_queue_names</b>  and/or
+                     <b>hash_queue_depth</b> configuration parameters.
 
        <b>-v</b>     Enable verbose logging for debugging purposes. Mul-
-              tiple  <b>-v</b>  options  make  the software increasingly
+              tiple <b>-v</b> options  make  the  software  increasingly
               verbose.
 
 <b>DIAGNOSTICS</b>
-       Problems are reported to the standard error stream and  to
+       Problems  are reported to the standard error stream and to
        <b>syslogd</b>.
 
-       <b>postsuper</b>  reports the number of messages deleted with <b>-d</b>,
+       <b>postsuper</b> reports the number of messages deleted with  <b>-d</b>,
        the number of messages requeued with <b>-r</b>, and the number of
-       messages  whose  queue  file  name  was fixed with <b>-s</b>. The
+       messages whose queue file name  was  fixed  with  <b>-s</b>.  The
        report is written to the standard error stream and to <b>sys-</b>
        <b>logd</b>.
 
@@ -160,31 +161,31 @@ POSTSUPER(1)                                         POSTSUPER(1)
               Directory with the <b>main.cf</b> file.
 
 <b>BUGS</b>
-       Mail  that  is  not sanitized by Postfix (i.e. mail in the
+       Mail that is not sanitized by Postfix (i.e.  mail  in  the
        <b>maildrop</b> queue) cannot be placed "on hold".
 
-<b>CONFIGURATION</b> <b>PARAMETERS</b>
-       See the Postfix <b>main.cf</b> file for syntax  details  and  for
+<b>CONFIGURATION PARAMETERS</b>
+       See  the  Postfix  <b>main.cf</b> file for syntax details and for
        default values.
 
-       <b>hash</b><i>_</i><b>queue</b><i>_</i><b>depth</b>
+       <b>hash_queue_depth</b>
               Number of subdirectory levels for hashed queues.
 
-       <b>hash</b><i>_</i><b>queue</b><i>_</i><b>names</b>
-              The  names of queues that are organized into multi-
+       <b>hash_queue_names</b>
+              The names of queues that are organized into  multi-
               ple levels of subdirectories.
 
-       <b>queue</b><i>_</i><b>directory</b>
-              Top-level directory of the Postfix queue.  This  is
+       <b>queue_directory</b>
+              Top-level  directory  of the Postfix queue. This is
               also the root directory of Postfix daemons that run
               chrooted.
 
-<b>SEE</b> <b>ALSO</b>
+<b>SEE ALSO</b>
        <a href="sendmail.1.html">sendmail(1)</a> sendmail-compatible user interface
        <a href="postqueue.1.html">postqueue(1)</a> unprivileged queue operations
 
 <b>LICENSE</b>
-       The Secure Mailer license must be  distributed  with  this
+       The  Secure  Mailer  license must be distributed with this
        software.
 
 <b>AUTHOR(S)</b>
index 442e63eecf817a34b5e8db9a0f3a5e0df9b3de33..dcc88a50cac807026bc871a70e2e8a048c71b18f 100644 (file)
@@ -244,8 +244,8 @@ SMTP(8)                                                   SMTP(8)
 
        <b>smtp_mx_address_limit</b>
               An upper bound on the  total  number  of  MX  (mail
-              exchanger)  IP  addresses that that can result from
-              mail exchanger lookups.
+              exchanger)  IP  addresses that can result from mail
+              exchanger lookups.
 
               Specify zero to disable the limit.
 
index 5cbbbc0273dceef197678027fbe6fc33f61d4507..e716f733c58c08dfdb5630d0a665916d4abd9d56 100644 (file)
@@ -87,9 +87,10 @@ Specify \fB-h ALL\fR to hold all messages; for example, specify
 As a safety measure, the word \fBALL\fR must be specified in upper
 case.
 .sp
-Note: mail that is put "on hold" will not expire when its
+Note: while mail is "on hold" it will not expire when its
 time in the queue exceeds the \fBmaximal_queue_lifetime\fR
-setting.
+setting. It becomes subject to expiration after it is
+released from "hold".
 .IP "\fB-H \fIqueue_id\fR"
 Release mail that was put "on hold".
 Move one message with the named queue ID from the named
index 80df1a34ae9f8916c21c480646e38df109c76469..ba57449aae67cf2156d55ff5eb104f81ed3f80be 100644 (file)
@@ -205,7 +205,7 @@ The default limit is taken from the
 \fBdefault_destination_recipient_limit\fR parameter.
 .IP \fBsmtp_mx_address_limit\fR
 An upper bound on the total number of MX (mail exchanger) IP
-addresses that that can result from mail exchanger lookups.
+addresses that can result from mail exchanger lookups.
 .sp
 Specify zero to disable the limit.
 .sp
index 189f14ec000b81b2d3a86299fb4138d8e7518bc8..b88d2b255d75ff4b0ab393484b1cc76d2715f38b 100644 (file)
@@ -57,7 +57,6 @@ anvil.o: ../../include/sys_defs.h
 anvil.o: ../../include/msg.h
 anvil.o: ../../include/mymalloc.h
 anvil.o: ../../include/htable.h
-anvil.o: ../../include/binhash.h
 anvil.o: ../../include/stringops.h
 anvil.o: ../../include/vstring.h
 anvil.o: ../../include/vbuf.h
index 80cd3a0e227620f0133dfecb6c0a27459ff4b9e7..46c7977dc48fd3ecff08ad9cd615087a3b40729e 100644 (file)
 #include <msg.h>
 #include <mymalloc.h>
 #include <htable.h>
-#include <binhash.h>
 #include <stringops.h>
 #include <events.h>
 
@@ -146,7 +145,6 @@ int     var_anvil_stat_time;
   * State.
   */
 static HTABLE *anvil_remote_map;       /* indexed by service+ remote client */
-static BINHASH *anvil_local_map;       /* indexed by local client handle */
 
  /*
   * Absent a real-time query interface, these are logged at process exit time
@@ -291,8 +289,8 @@ static void anvil_remote_expire(int unused_event, char *context)
     ANVIL_REMOTE_FREE(anvil_remote);
 
     if (msg_verbose)
-       msg_info("%s: anvil_remote_map used=%d", 
-               myname, anvil_remote_map->used);
+       msg_info("%s: anvil_remote_map used=%d",
+                myname, anvil_remote_map->used);
 }
 
 /* anvil_remote_lookup - dump address status */
@@ -375,14 +373,12 @@ static void anvil_remote_connect(VSTREAM *client_stream, const char *ident)
      * Record this connection under the local client information, so that we
      * can clean up all its connection state when the local client goes away.
      */
-    if ((anvil_local =
-        (ANVIL_LOCAL *) binhash_find(anvil_local_map,
-                                     (char *) &client_stream,
-                                     sizeof(client_stream))) == 0) {
+    if ((anvil_local = (ANVIL_LOCAL *) vstream_context(client_stream)) == 0) {
        anvil_local = (ANVIL_LOCAL *) mymalloc(sizeof(*anvil_local));
        ANVIL_LOCAL_INIT(anvil_local);
-       binhash_enter(anvil_local_map, (char *) &client_stream,
-                     sizeof(client_stream), (char *) anvil_local);
+       vstream_control(client_stream,
+                       VSTREAM_CTL_CONTEXT, (void *) anvil_local,
+                       VSTREAM_CTL_END);
     }
     ANVIL_LOCAL_ADD_ONE(anvil_local, anvil_remote);
     if (msg_verbose)
@@ -446,10 +442,7 @@ static void anvil_remote_disconnect(VSTREAM *client_stream, const char *ident)
     /*
      * Update the local client information.
      */
-    if ((anvil_local =
-        (ANVIL_LOCAL *) binhash_find(anvil_local_map,
-                                     (char *) &client_stream,
-                                     sizeof(client_stream))) != 0)
+    if ((anvil_local = (ANVIL_LOCAL *) vstream_context(client_stream)) != 0)
        ANVIL_LOCAL_DROP_ONE(anvil_local, anvil_remote);
     if (msg_verbose)
        msg_info("%s: anvil_local 0x%lx",
@@ -481,24 +474,15 @@ static void anvil_service_done(VSTREAM *client_stream, char *unused_service,
      * that we still have for this local client. Do not destroy remote client
      * status information before it expires.
      */
-    if ((anvil_local =
-        (ANVIL_LOCAL *) binhash_find(anvil_local_map,
-                                     (char *) &client_stream,
-                                     sizeof(client_stream))) != 0) {
+    if ((anvil_local = (ANVIL_LOCAL *) vstream_context(client_stream)) != 0) {
        if (msg_verbose)
            msg_info("%s: anvil_local 0x%lx",
                     myname, (unsigned long) anvil_local);
        ANVIL_LOCAL_DROP_ALL(client_stream, anvil_local);
-       binhash_delete(anvil_local_map,
-                      (char *) &client_stream,
-                      sizeof(client_stream), myfree);
+       myfree((char *) anvil_local);
     } else if (msg_verbose)
        msg_info("client socket not found for fd=%d",
                 vstream_fileno(client_stream));
-
-    if (msg_verbose)
-       msg_info("%s: anvil_local_map used=%d", 
-               myname, anvil_local_map->used);
 }
 
 /* anvil_service - perform service for client */
@@ -520,6 +504,8 @@ static void anvil_service(VSTREAM *client_stream, char *unused_service, char **a
      * connection-management stuff is handled by the common code in
      * multi_server.c.
      */
+    if (msg_verbose)
+       msg_info("--- start request ---");
     if (attr_scan_plain(client_stream,
                        ATTR_FLAG_MISSING | ATTR_FLAG_STRICT,
                        ATTR_TYPE_STR, ANVIL_ATTR_REQ, request,
@@ -542,6 +528,8 @@ static void anvil_service(VSTREAM *client_stream, char *unused_service, char **a
        /* Note: invokes anvil_service_done() */
        multi_server_disconnect(client_stream);
     }
+    if (msg_verbose)
+       msg_info("--- end request ---");
     vstring_free(ident);
     vstring_free(request);
 }
@@ -561,7 +549,6 @@ static void post_jail_init(char *unused_name, char **unused_argv)
      * Initial client state tables.
      */
     anvil_remote_map = htable_create(1000);
-    anvil_local_map = binhash_create(100);
 
     /*
      * Do not limit the number of client requests.
index 19c82291148c9979e03d4befc1823c2f31b5584b..62a06b4cb6ce737650b7e078f0d11859e4ffa2d8 100644 (file)
@@ -114,7 +114,13 @@ static VSTRING *id_buf;
 
 void    mail_stream_cleanup(MAIL_STREAM *info)
 {
-    FREE_AND_WIPE(info->close, info->stream);
+    int     status;
+
+    if (info->stream) {
+       if ((status = info->close(info->stream)) != 0)
+           msg_warn("bad mail stream close status %d", status);
+       info->stream = 0;
+    }
     FREE_AND_WIPE(myfree, info->queue);
     FREE_AND_WIPE(myfree, info->id);
     FREE_AND_WIPE(myfree, info->class);
@@ -318,6 +324,7 @@ MAIL_STREAM *mail_stream_command(const char *command)
     VSTREAM *stream;
     MAIL_STREAM *info;
     ARGV   *export_env;
+    int     status;
 
     if (id_buf == 0)
        id_buf = vstring_alloc(10);
@@ -347,7 +354,8 @@ MAIL_STREAM *mail_stream_command(const char *command)
 
     if (attr_scan(stream, ATTR_FLAG_MISSING,
                  ATTR_TYPE_STR, MAIL_ATTR_QUEUEID, id_buf, 0) != 1) {
-       vstream_pclose(stream);
+       if ((status = vstream_pclose(stream)) != 0)
+           msg_warn("command \"%s\" exited with status %d", command, status);
        return (0);
     } else {
        info = (MAIL_STREAM *) mymalloc(sizeof(*info));
index b56b2e5404a8477217fbd436d34ce64c5c9958fb..635522778c038c74d11b236189bfb43425a419e0 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change the patchlevel and the release date. Snapshots change the
   * release date only, unless they include the same bugfix as a patch release.
   */
-#define MAIL_RELEASE_DATE      "20031223"
+#define MAIL_RELEASE_DATE      "20031224"
 
 #define VAR_MAIL_VERSION       "mail_version"
 #define DEF_MAIL_VERSION       "2.0.16-" MAIL_RELEASE_DATE
index 4475e43b17b865dc3aeb91aa67d29fb211be58b1..bef31e0f6d7544015c7a3a6977fa28031641f300 100644 (file)
@@ -121,8 +121,19 @@ static void master_sigchld(int sig, int code, struct sigcontext * scp)
 
 static void master_sigchld(int unused_sig)
 {
+    int     saved_errno = errno;
+
+    /*
+     * WARNING WARNING WARNING.
+     * 
+     * This code runs at unpredictable moments, as a signal handler. Don't put
+     * any code here other than for setting a global flag, or code that is
+     * intended to be run within a signal handler. Restore errno in case we
+     * are interrupting the epilog of a failed system call.
+     */
     if (write(SIG_PIPE_WRITE_FD, "", 1) != 1)
        msg_warn("write to SIG_PIPE_WRITE_FD failed: %m");
+    errno = saved_errno;
 }
 
 /* master_sig_event - called upon return from select() */
index 6e986ce490029af1ec5e031b25e4af8a92ce35c9..3b01c960ec9195ff8a533ee5225209ea16b7fb91 100644 (file)
 /*     As a safety measure, the word \fBALL\fR must be specified in upper
 /*     case.
 /* .sp
-/*     Note: mail that is put "on hold" will not expire when its
+/*     Note: while mail is "on hold" it will not expire when its
 /*     time in the queue exceeds the \fBmaximal_queue_lifetime\fR
-/*     setting.
+/*     setting. It becomes subject to expiration after it is
+/*     released from "hold".
 /* .IP "\fB-H \fIqueue_id\fR"
 /*     Release mail that was put "on hold".
 /*     Move one message with the named queue ID from the named
index d52471c6af7cbec63346568a3ba02dd295ca9d16..0190e3472876f7a09e6337383d251343663585e8 100644 (file)
 /*     \fBdefault_destination_recipient_limit\fR parameter.
 /* .IP \fBsmtp_mx_address_limit\fR
 /*     An upper bound on the total number of MX (mail exchanger) IP
-/*     addresses that that can result from mail exchanger lookups.
+/*     addresses that can result from mail exchanger lookups.
 /* .sp
 /*     Specify zero to disable the limit.
 /* .sp
index e78ec1946d937318bb698d9be471311bf5c5cf34..6bd6e2eb8e63fda6d7e2c1339a1c7446069d6f66 100644 (file)
@@ -212,8 +212,9 @@ VSTREAM *auto_clnt_access(AUTO_CLNT *auto_clnt)
     if (auto_clnt->vstream == 0) {
        auto_clnt_open(auto_clnt);
     } else {
-       event_request_timer(auto_clnt_event, (char *) auto_clnt,
-                           auto_clnt->max_idle);
+       if (auto_clnt->max_idle > 0)
+           event_request_timer(auto_clnt_event, (char *) auto_clnt,
+                               auto_clnt->max_idle);
     }
     return (auto_clnt->vstream);
 }