Bug in deliver (when using virtdomains)
Ken Murchison
ken at oceana.com
Thu Apr 22 13:35:08 EDT 2004
Christoph Moench-Tegeder wrote:
>>To solve this issue, each address must be split into username and
>>domain. I will write a patch as soon as we have migrated our
>>cyrus-1.5-environment to 2.2.
>
>
> Here we go (patching deliver.c is easier than converting thousands
> of filters):
>
> diff -Nru cyrus-imapd-2.2.3.orig/imap/deliver.c cyrus-imapd-2.2.3/imap/deliver.c
> --- cyrus-imapd-2.2.3.orig/imap/deliver.c Wed Oct 22 20:50:07 2003
> +++ cyrus-imapd-2.2.3/imap/deliver.c Wed Apr 21 15:24:11 2004
> @@ -338,6 +338,7 @@
> struct lmtp_txn *txn = LMTP_TXN_ALLOC(numusers ? numusers : 1);
> int j;
> int ml = 0;
> + char *t;
>
> /* must have either some users or a mailbox */
> if (!numusers && !mailbox) {
> @@ -370,7 +371,13 @@
> /* we let it leak ! */
> txn->rcpt[j].addr =
> (char *) xmalloc(strlen(users[j]) + ml + 2);
> - sprintf(txn->rcpt[j].addr, "%s+%s", users[j], mailbox);
> + t=strchr(users[j], '@');
> + if(t!=NULL && strchr(users[j], '+')==NULL) {
> + sprintf(txn->rcpt[j].addr, "%.*s+%s@%s",
> + (int) (t-users[j]), users[j], mailbox, t+1);
> + } else {
> + sprintf(txn->rcpt[j].addr, "%s+%s", users[j], mailbox);
> + }
> } else {
> txn->rcpt[j].addr = users[j];
> }
>
>
> Note: direct plus-addressing overrides -m.
>
> Regards,
> Christoph
>
I just committed a modified version fo your patch to CVS:
https://bugzilla.andrew.cmu.edu/cgi-bin/cvsweb.cgi/src/cyrus/imap/deliver.c.diff?r1=1.172&r2=1.173
Thanks.
--
Kenneth Murchison Oceana Matrix Ltd.
Software Engineer 21 Princeton Place
716-662-8973 x26 Orchard Park, NY 14127
--PGP Public Key-- http://www.oceana.com/~ken/ksm.pgp
---
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html
More information about the Info-cyrus
mailing list