It looks like the Delivered-To problem has returned:
Delivered-To: [EMAIL PROTECTED]
I wasn't seeing this under 5.3.21...
I assume this is with a catchall... Here's a patch to address that problem. I'm also considering going through all of the code that writes a Delivered-To header, and changing it to use this routine. vdelivermail uses multiple methods of building that header, and I'm not sure if all cases work properly.
--- vpopmail-5.3.24/vdelivermail.c Sun Aug 3 08:02:14 2003 +++ vpopmail-5.3.25/vdelivermail.c Fri Aug 8 13:24:31 2003 @@ -567,27 +566,44 @@ /* must be an email address */ } else { char *dtline; - char *tstr; + char *atpos; + int dtlen; - qmail_inject_open(address); - write_fd = fdm; - inject = 1; + qmail_inject_open(address); + write_fd = fdm; + inject = 1; - /* use the DTLINE variable, but skip past the dash in - * [EMAIL PROTECTED] - */ + /* use the DTLINE variable, but skip past the dash in + * [EMAIL PROTECTED] + */ - if ( (dtline = getenv("DTLINE")) != NULL ) { - while (*dtline!=0 && *dtline!=':' ) ++dtline; - while (*dtline!=0 && *dtline!='-' ) ++dtline; - if ( *dtline != 0 ) ++dtline; - for(tstr=dtline;*tstr!=0;++tstr) if (*tstr=='\n') *tstr=0; - } else { - if (*address=='&') ++address; - dtline = address; - } - snprintf(DeliveredTo, sizeof(DeliveredTo), - "%sDelivered-To: %s\n", getenv("RPLINE"), dtline); + if ( (dtline = getenv("DTLINE")) != NULL ) { + dtlen = strlen(dtline); + /* make sure dtline is at least as long as "Delivered-To: " */ + if (dtlen < 15) { + dtline = NULL; + } else { + dtline += 14; /* skip "Delivered-To: " */ + dtlen -= 14; + atpos = strchr (dtline, '@'); + /* ex: dtline = "[EMAIL PROTECTED]" + * dtlen = 25, atpos = dtline+14 + * add 25 - 14 - 1 = 10 bytes to dtline, + * now points to "[EMAIL PROTECTED]". + */ + if (atpos != NULL) { + dtline += (dtlen - (atpos - dtline) - 1); + } + } + } + if (dtline == NULL) { + if (*address=='&') ++address; /* will this case ever happen? */ + snprintf(DeliveredTo, sizeof(DeliveredTo), + "%sDelivered-To: %s\n", getenv("RPLINE"), address); + } else { + snprintf(DeliveredTo, sizeof(DeliveredTo), + "%sDelivered-To: %s", getenv("RPLINE"), dtline); + } } #ifdef MAKE_SEEKABLE
Note that this patch also addresses a problem the old method had with domain names containing "-".
I'll be placing the patch on SourceForge, and adding it to the next vpopmail release. Please provide feedback -- it's done well with limited testing on my development box.
It works by skipping the 14-character "Delivered-To: " part of the header as qmail sets it. It converts the trailing newline to a
-- Tom Collins [EMAIL PROTECTED] http://sniffter.com/ - info on the Sniffter hand-held Network Tester