mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-29 13:18:12 +00:00
postfix-2.0.16-20031224
This commit is contained in:
parent
5380c1c731
commit
468e9bae3d
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -122,7 +122,6 @@
|
||||
#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.
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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() */
|
||||
|
@ -81,9 +81,10 @@
|
||||
/* 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
|
||||
|
@ -189,7 +189,7 @@
|
||||
/* \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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user