Mercurial > hg > mlmmj
diff src/prepstdreply.c @ 745:5edfa9eef6c7
Add $random0$ through $random5$ substitutions
author | Ben Schmidt |
---|---|
date | Mon, 20 Sep 2010 02:31:03 +1000 |
parents | b00eb39643c1 |
children | ecb991e41a4c |
line wrap: on
line diff
--- a/src/prepstdreply.c Mon Sep 20 02:25:54 2010 +1000 +++ b/src/prepstdreply.c Mon Sep 20 02:31:03 2010 +1000 @@ -194,6 +194,7 @@ char *listaddr, *listdelim, *tmp, *retstr = NULL; char *listfqdn, *line, *utfline, *utfsub, *utfsub2; char *str = NULL; + char **moredata; char *headers[10] = { NULL }; /* relies on NULL to flag end */ if ((infd = open_listtext(listdir, filename)) < 0) { @@ -206,6 +207,7 @@ do { tmp = random_str(); + if (retstr) myfree(retstr); retstr = concatstr(3, listdir, "/queue/", tmp); myfree(tmp); @@ -219,15 +221,27 @@ myfree(listaddr); myfree(listdelim); myfree(listfqdn); + myfree(retstr); return NULL; } + moredata = mymalloc(2*(tokencount+6) * sizeof(char *)); + for (i=0; i<2*tokencount; i++) { + moredata[i] = data[i]; + } + for (i=0; i<6; i++) { + moredata[2*(tokencount+i)] = mystrdup("randomN"); + moredata[2*(tokencount+i)][6] = '0' + i; + moredata[2*(tokencount+i)+1] = random_str(); + } + tokencount += 6; + tmp = substitute(from, listaddr, listdelim, - tokencount, data); + tokencount, moredata); headers[0] = concatstr(2, "From: ", tmp); myfree(tmp); tmp = substitute(to, listaddr, listdelim, - tokencount, data); + tokencount, moredata); headers[1] = concatstr(2, "To: ", tmp); myfree(tmp); headers[2] = genmsgid(listfqdn); @@ -241,7 +255,7 @@ if(replyto) { tmp = substitute(replyto, listaddr, listdelim, - tokencount, data); + tokencount, moredata); headers[8] = concatstr(2, "Reply-To: ", tmp); myfree(tmp); } @@ -265,7 +279,7 @@ continuation of previous header line */ utfsub = unistr_escaped_to_utf8(line); str = substitute(utfsub, listaddr, listdelim, - tokencount, data); + tokencount, moredata); myfree(utfsub); len = strlen(str); str[len] = '\n'; @@ -273,10 +287,9 @@ log_error(LOG_ARGS, "Could not write std mail"); myfree(str); myfree(line); - myfree(listaddr); - myfree(listdelim); - myfree(listfqdn); - return NULL; + myfree(retstr); + retstr = NULL; + goto freeandreturn; } myfree(str); } else { @@ -308,7 +321,7 @@ utfsub = unistr_escaped_to_utf8(tmp); *tmp = '\0'; utfsub2 = substitute(utfsub, listaddr, listdelim, - tokencount, data); + tokencount, moredata); myfree(utfsub); if (strncasecmp(line, "Subject:", len) == 0) { tmp = unistr_utf8_to_header(utfsub2); @@ -325,10 +338,9 @@ log_error(LOG_ARGS, "Could not write std mail"); myfree(str); myfree(line); - myfree(listaddr); - myfree(listdelim); - myfree(listfqdn); - return NULL; + myfree(retstr); + retstr = NULL; + goto freeandreturn; } myfree(str); } @@ -343,10 +355,9 @@ if (line) myfree(line); myfree(str); - myfree(listaddr); - myfree(listdelim); - myfree(listfqdn); - return NULL; + myfree(retstr); + retstr = NULL; + goto freeandreturn; } } @@ -356,10 +367,9 @@ myfree(str); if (line) myfree(line); - myfree(listaddr); - myfree(listdelim); - myfree(listfqdn); - return NULL; + myfree(retstr); + retstr = NULL; + goto freeandreturn; } if (line) { @@ -399,11 +409,10 @@ if(writen(outfd,str,strlen(str)) < 0) { myfree(str); myfree(utfline); - myfree(listaddr); - myfree(listdelim); - myfree(listfqdn); log_error(LOG_ARGS, "Could not write std mail"); - return NULL; + myfree(retstr); + retstr = NULL; + goto freeandreturn; } myfree(str); i++; @@ -418,15 +427,14 @@ myfree(utfline); } else { str = substitute(utfline, listaddr, listdelim, - tokencount, data); + tokencount, moredata); myfree(utfline); if(writen(outfd, str, strlen(str)) < 0) { myfree(str); - myfree(listaddr); - myfree(listdelim); - myfree(listfqdn); log_error(LOG_ARGS, "Could not write std mail"); - return NULL; + myfree(retstr); + retstr = NULL; + goto freeandreturn; } myfree(str); } @@ -437,9 +445,16 @@ fsync(outfd); close(outfd); +freeandreturn: myfree(listaddr); myfree(listdelim); myfree(listfqdn); + for (i=tokencount-6; i<tokencount; i++) { + myfree(moredata[2*i]); + myfree(moredata[2*i+1]); + } + myfree(moredata); + return retstr; }