address must be handled sensibly. Files: global/resolve_clnt.c,
trivial-rewrite/resolve.c. It ain't perfect yet, but close.
+20020613
+
+ Bugfix: postsuper -r was broken as of 20020510. The cleanup
+ daemon would discard mail with MIME type information. Moved
+ a bunch of sanity checks from the cleanup daemon to the
+ pickup daemon, so the checks are in one place. Problem
+ experienced by Pavol Luptak. Files: pickup/pickup.c,
+ cleanup/cleanup_extracted.c.
+
Open problems:
Medium: old maildrop files are no longer readable by the
Low: all table lookups should consistently use internalized
(unquoted) or externalized (quoted) forms as lookup keys.
- smtpd, qmgr, local, etc. use internalized forms as keys.
- cleanup uses externalized forms.
+ smtpd, qmgr, local, etc. use unquoted address forms as
+ keys. cleanup uses quoted forms.
Low: sendmail does not store null command-line recipients.
-#
# VIRTUAL(5) VIRTUAL(5)
#
# NAME
# $inet_interfaces.
#
# This functionality overlaps with functionality of
-# the local alias(5) database. The difference is that
-# virtual mapping can be applied to non-local
+# the local aliases(5) database. The difference is
+# that virtual mapping can be applied to non-local
# addresses.
#
# @domain address, address, ...
# P.O. Box 704
# Yorktown Heights, NY 10598, USA
#
-# 1
-#
+# VIRTUAL(5)
<html> <head> </head> <body> <pre>
-
VIRTUAL(5) VIRTUAL(5)
<b>NAME</b>
$<i>inet_interfaces</i>.
This functionality overlaps with functionality of
- the local <i>alias</i>(5) database. The difference is that
- <b>virtual</b> mapping can be applied to non-local
+ the local <i>aliases</i>(5) database. The difference is
+ that <b>virtual</b> mapping can be applied to non-local
addresses.
@<i>domain</i> <i>address,</i> <i>address,</i> <i>...</i>
P.O. Box 704
Yorktown Heights, NY 10598, USA
- 1
-
+ VIRTUAL(5)
</pre> </body> </html>
$\fRmydestination\fR, or when it is listed in $\fIinet_interfaces\fR.
.sp
This functionality overlaps with functionality of the local
-\fIalias\fR(5) database. The difference is that \fBvirtual\fR
+\fIaliases\fR(5) database. The difference is that \fBvirtual\fR
mapping can be applied to non-local addresses.
.IP "@\fIdomain address, address, ...\fR"
Mail for any user in \fIdomain\fR is redirected to \fIaddress\fR.
# $\fRmydestination\fR, or when it is listed in $\fIinet_interfaces\fR.
# .sp
# This functionality overlaps with functionality of the local
-# \fIalias\fR(5) database. The difference is that \fBvirtual\fR
+# \fIaliases\fR(5) database. The difference is that \fBvirtual\fR
# mapping can be applied to non-local addresses.
# .IP "@\fIdomain address, address, ...\fR"
# Mail for any user in \fIdomain\fR is redirected to \fIaddress\fR.
/* cleanup_extracted_process - process extracted segment */
-static void cleanup_extracted_process(CLEANUP_STATE *state, int type, char *buf, int unused_len)
+static void cleanup_extracted_process(CLEANUP_STATE *state, int type, char *buf, int len)
{
char *myname = "cleanup_extracted_process";
VSTRING *clean_addr;
ARGV *rcpt;
char **cpp;
- if (type == REC_TYPE_RRTO) {
- /* XXX Use extracted information instead. */
- return;
- }
- if (type == REC_TYPE_ERTO) {
- /* XXX Use extracted information instead. */
- return;
- }
if (type == REC_TYPE_RCPT) {
clean_addr = vstring_alloc(100);
cleanup_rewrite_internal(clean_addr, *buf ? buf : var_empty_addr);
return;
}
if (type != REC_TYPE_END) {
- msg_warn("%s: unexpected record type %d in extracted segment",
- state->queue_id, type);
- state->errs |= CLEANUP_STAT_BAD;
+ cleanup_out(state, type, buf, len);
return;
}
* 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 "20020610"
+#define MAIL_RELEASE_DATE "20020613"
#define VAR_MAIL_VERSION "mail_version"
#define DEF_MAIL_VERSION "1.1.11-" MAIL_RELEASE_DATE
}
#define STREQ(x,y) (strcmp(x,y) == 0)
- if (info->st.st_uid == var_owner_uid
- || (STREQ(attr_name, MAIL_ATTR_ENCODING)
- && (STREQ(attr_value, MAIL_ATTR_ENC_7BIT)
- || STREQ(attr_value, MAIL_ATTR_ENC_8BIT)
- || STREQ(attr_value, MAIL_ATTR_ENC_NONE)))) {
+ if (STREQ(attr_name, MAIL_ATTR_ENCODING)
+ && (STREQ(attr_value, MAIL_ATTR_ENC_7BIT)
+ || STREQ(attr_value, MAIL_ATTR_ENC_8BIT)
+ || STREQ(attr_value, MAIL_ATTR_ENC_NONE))) {
rec_fprintf(cleanup, REC_TYPE_ATTR, "%s=%s",
attr_name, attr_value);
- continue;
+ } else if (info->st.st_uid != var_owner_uid) {
+ msg_warn("uid=%ld: ignoring attribute record: %.200s=%.200s",
+ (long) info->st.st_uid, attr_name, attr_value);
}
- msg_warn("uid=%ld: ignoring attribute record: %.200s=%.200s",
- (long) info->st.st_uid, attr_name, attr_value);
continue;
}
+ if (type == REC_TYPE_RRTO)
+ /* Use message header extracted information instead. */
+ continue;
+ if (type == REC_TYPE_ERTO)
+ /* Use message header extracted information instead. */
+ continue;
+ if (type == REC_TYPE_INSP && info->st.st_uid != var_owner_uid)
+ continue;
if (type == REC_TYPE_FILT && info->st.st_uid != var_owner_uid)
continue;
else {