Mercurial > hg > mlmmj
changeset 531:427cc8c9fff2
Fix nasty bug with "bla,bla" <bla@bla>
author | mmj |
---|---|
date | Tue, 17 Jan 2006 22:47:06 +1100 |
parents | 5139cbd9f59c |
children | 67d663145da5 |
files | ChangeLog VERSION src/find_email_adr.c src/mlmmj-bounce.c |
diffstat | 4 files changed, 39 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Mon Jan 09 04:20:47 2006 +1100 +++ b/ChangeLog Tue Jan 17 22:47:06 2006 +1100 @@ -1,3 +1,8 @@ +1.2.10 + o Fix nasty bug in the new 1.2.9 find_email_adr() making comma in + quoted text in From: being discarded as invalid + o Simply make all addresses lowercase before doing anything else + wrt. sub/unsub and bounce o Add czech listtexts (Lukas Hluze) o Make non list emails (subconf, moderation etc.) also honor relayhost and smtpport
--- a/VERSION Mon Jan 09 04:20:47 2006 +1100 +++ b/VERSION Tue Jan 17 22:47:06 2006 +1100 @@ -1,1 +1,1 @@ -1.2.10-pre1 +1.2.10
--- a/src/find_email_adr.c Mon Jan 09 04:20:47 2006 +1100 +++ b/src/find_email_adr.c Tue Jan 17 22:47:06 2006 +1100 @@ -184,6 +184,7 @@ struct email_container *find_email_adr(const char *str, struct email_container *retstruct) { + char *c1 = NULL, *c2 = NULL; char *p; char *s; @@ -196,12 +197,30 @@ char *cur; cur = p; +oncemore: p = strchr(p, ','); if (p) { /* If there's a comma, replace it with a NUL, so - * cur will only have one address in it. */ + * cur will only have one address in it. Except + * it's not in ""s */ + c1 = strchr(cur, '"'); + if(c1) { + c2 = strchr(c1+1, '"'); + } + if(c2) { + if(*(c2-1) == '\\') { + *c2 = ' '; + c2 = NULL; + goto oncemore; + } + } + if(c2 && c2 < p) { *p = '\0'; p += 1; + } else { + *p = ' '; + goto oncemore; + } } while(cur && ((' ' == *cur) ||
--- a/src/mlmmj-bounce.c Mon Jan 09 04:20:47 2006 +1100 +++ b/src/mlmmj-bounce.c Tue Jan 17 22:47:06 2006 +1100 @@ -229,10 +229,10 @@ int main(int argc, char **argv) { - int opt, fd, dsnbounce = 0; + int opt, fd, dsnbounce = 0, i = 0; char *listdir = NULL, *address = NULL, *number = NULL; char *bindir, *mlmmjsend, *savename; - char *mailname = NULL, *bfilename, *a, *buf; + char *mailname = NULL, *bfilename, *a, *buf, *lowcaseaddr; size_t len; time_t t; int probe = 0; @@ -317,6 +317,15 @@ *a = '='; } + /* Make the address lowercase */ + lowcaseaddr = mystrdup(address); + i = 0; + while(lowcaseaddr[i]) { + lowcaseaddr[i] = tolower(lowcaseaddr[i]); + i++; + } + address = lowcaseaddr; + if(number != NULL && probe != 0) { fprintf(stderr, "You can only specify one of -n or -p\n"); fprintf(stderr, "%s -h for help\n", argv[0]);