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]);