conf/mumble_table files removed, new commands added to
conf/postfix-script.
- Cleanups: function declared in but used as void, missing
+ Cleanups: function declared int but used as void, missing
include file, missing const qualifier, unused variable.
Matthias Andree. Files: bounce/bounce_notify_util.c,
bounce/bounce_service.h, postlog/postlog.c, smtpd/smtpd_check.c,
build on a 2.6 kernel. And that two weeks after the workaround
had been posted to the mailing list. File: makedefs.
- Workaround: local(8) nixed the recipient file offset for
- delegated transports. This broke delegation via
- mailbox_transport(_maps) and fallback_transport(_maps) to
- the error(8) transport. Unfortunately it is not possible
- to nix the file offset for local(8) only. Files:
- local/mailbox.c, local/unknown.c.
+ Bugfix: mailbox_transport(_maps) and fallback_transport(_maps)
+ were broken when used with the error(8) or discard(8)
+ transports. Cause: insufficient documentation. Files:
+ error/error.c, discard/discard.c.
Wish list:
requests from the queue manager. Each request specifies a
queue file, a sender address, the reason for non-delivery
(specified as the next-hop destination), and recipient
- information. The reason may be prefixed with an RFC
- 3463-compatible detail code. This program expects to be
+ information. The reason may be prefixed with an <a href="http://www.faqs.org/rfcs/rfc3463.html">RFC</a>
+ <a href="http://www.faqs.org/rfcs/rfc3463.html">3463</a>-compatible detail code. This program expects to be
run from the <a href="master.8.html"><b>master</b>(8)</a> process manager.
Depending on the service name in <a href="master.5.html">master.cf</a>, <b>error</b> or
(void) DSN_SIMPLE(&dsn, DSN_STATUS(dp.dsn), dp.text);
for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) {
rcpt = request->rcpt_list.info + nrcpt;
- if (rcpt->offset >= 0) {
- status = sent(BOUNCE_FLAGS(request), request->queue_id,
- &request->msg_stats, rcpt, "none", &dsn);
- if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS))
- deliver_completed(src, rcpt->offset);
- result |= status;
- }
+ status = sent(BOUNCE_FLAGS(request), request->queue_id,
+ &request->msg_stats, rcpt, "none", &dsn);
+ if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS))
+ deliver_completed(src, rcpt->offset);
+ result |= status;
}
/*
(void) DSN_SIMPLE(&dsn, DSN_STATUS(dp.dsn), dp.text);
for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) {
rcpt = request->rcpt_list.info + nrcpt;
- if (rcpt->offset >= 0) {
- status = append(BOUNCE_FLAGS(request), request->queue_id,
- &request->msg_stats, rcpt, "none", &dsn);
- if (status == 0)
- deliver_completed(src, rcpt->offset);
- result |= status;
- }
+ status = append(BOUNCE_FLAGS(request), request->queue_id,
+ &request->msg_stats, rcpt, "none", &dsn);
+ if (status == 0)
+ deliver_completed(src, rcpt->offset);
+ result |= status;
}
/*
/* .IP BOUNCE_FLAG_CLEAN
/* Delete the bounce log in case of an error (as in: pretend
/* that we never even tried to bounce this message).
+/* .IP BOUNCE_FLAG_DELRCPT
+/* When specified with a flush operation, request that
+/* recipients be deleted from the queue file.
+/*
+/* Note: the bounce daemon ignores this request when the
+/* recipient queue file offset is <= 0.
/* .IP BOUNCE_FLAG_COPY
/* Request that a postmaster copy is sent.
/* .RE
/* .IP BOUNCE_FLAG_CLEAN
/* Delete the bounce log in case of an error (as in: pretend
/* that we never even tried to bounce this message).
+/* .IP BOUNCE_FLAG_DELRCPT
+/* When specified with a flush request, request that
+/* recipients be deleted from the queue file.
+/*
+/* Note: the bounce daemon ignores this request when the
+/* recipient queue file offset is <= 0.
/* .IP DEL_REQ_FLAG_MTA_VRFY
/* The message is an MTA-requested address verification probe.
/* Update the address verification database instead of bouncing
/* .IP BOUNCE_FLAG_CLEAN
/* Delete the defer log in case of an error (as in: pretend
/* that we never even tried to defer this message).
+/* .IP BOUNCE_FLAG_DELRCPT
+/* When specified with a flush request, request that
+/* recipients be deleted from the queue file.
+/*
+/* Note: the bounce daemon ignores this request when the
+/* recipient queue file offset is <= 0.
/* .IP DEL_REQ_FLAG_MTA_VRFY
/* The message is an MTA-requested address verification probe.
/* Update the address verification database instead of deferring
/* of the following:
/* .IP \fBDEL_REQ_FLAG_SUCCESS\fR
/* Delete successful recipients from the queue file.
+/*
+/* Note: currently, this also controls whether bounced recipients
+/* are deleted.
+/*
+/* Note: the deliver_completed() function ignores this request
+/* when the recipient queue file offset is -1.
/* .IP \fBDEL_REQ_FLAG_BOUNCE\fR
/* Delete bounced recipients from the queue file. Currently,
-/* this flag is considered to be "always on".
+/* this flag is non-functional.
/* .PP
/* The \fBDEL_REQ_FLAG_DEFLT\fR constant provides a convenient shorthand
/* for the most common case: delete successful and bounced recipients.
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20070515"
+#define MAIL_RELEASE_DATE "20070516"
#define MAIL_VERSION_NUMBER "2.5"
#ifdef SNAPSHOT
if (*var_mbox_transp_maps && transp_maps == 0)
transp_maps = maps_create(VAR_MBOX_TRANSP_MAPS, var_mbox_transp_maps,
DICT_FLAG_LOCK | DICT_FLAG_NO_REGSUB);
+ /* The -1 is a hint for the down-stream deliver_completed() function. */
if (*var_mbox_transp_maps
&& (map_transport = maps_find(transp_maps, state.msg_attr.user,
DICT_FLAG_NONE)) != 0) {
+ state.msg_attr.rcpt.offset = -1L;
*statusp = deliver_pass(MAIL_CLASS_PRIVATE, map_transport,
state.request, &state.msg_attr.rcpt);
return (YES);
}
if (*var_mailbox_transport) {
+ state.msg_attr.rcpt.offset = -1L;
*statusp = deliver_pass(MAIL_CLASS_PRIVATE, var_mailbox_transport,
state.request, &state.msg_attr.rcpt);
return (YES);
if (*var_fbck_transp_maps && transp_maps == 0)
transp_maps = maps_create(VAR_FBCK_TRANSP_MAPS, var_fbck_transp_maps,
DICT_FLAG_LOCK | DICT_FLAG_NO_REGSUB);
+ /* The -1 is a hint for the down-stream deliver_completed() function. */
if (*var_fbck_transp_maps
&& (map_transport = maps_find(transp_maps, state.msg_attr.user,
DICT_FLAG_NONE)) != 0) {
+ state.msg_attr.rcpt.offset = -1L;
return (deliver_pass(MAIL_CLASS_PRIVATE, map_transport,
state.request, &state.msg_attr.rcpt));
}
if (*var_fallback_transport) {
+ state.msg_attr.rcpt.offset = -1L;
return (deliver_pass(MAIL_CLASS_PRIVATE, var_fallback_transport,
state.request, &state.msg_attr.rcpt));
}