Mercurial > hg > mlmmj
changeset 277:a18debdfdcc1
More bugfixes and EEXIST checking
author | mmj |
---|---|
date | Fri, 25 Jun 2004 17:34:18 +1000 |
parents | f670b8a4e457 |
children | 45501498e5a8 |
files | src/mlmmj-sub.c src/mlmmj-unsub.c |
diffstat | 2 files changed, 48 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mlmmj-sub.c Fri Jun 25 17:24:31 2004 +1000 +++ b/src/mlmmj-sub.c Fri Jun 25 17:34:18 2004 +1000 @@ -132,9 +132,9 @@ listfqdn = genlistfqdn(listaddr); do { - randomstr = random_plus_addr(subaddr); myfree(confirmfilename); myfree(randomstr); + randomstr = random_plus_addr(subaddr); confirmfilename = concatstr(3, listdir, "/subconf/", randomstr); @@ -146,6 +146,7 @@ if(subconffd < 0) { log_error(LOG_ARGS, "Could not open '%s'", confirmfilename); myfree(confirmfilename); + myfree(randomstr); exit(EXIT_FAILURE); } @@ -153,6 +154,8 @@ if(writen(subconffd, subaddr, strlen(subaddr)) < 0) { log_error(LOG_ARGS, "Could not write to subconffd"); + myfree(confirmfilename); + myfree(randomstr); exit(EXIT_FAILURE); }
--- a/src/mlmmj-unsub.c Fri Jun 25 17:24:31 2004 +1000 +++ b/src/mlmmj-unsub.c Fri Jun 25 17:34:18 2004 +1000 @@ -47,7 +47,7 @@ const char *subaddr, const char *mlmmjsend) { int subtextfd, queuefd; - char *buf, *subtextfilename, *randomstr, *queuefilename; + char *buf, *subtextfilename, *randomstr, *queuefilename = NULL; char *fromaddr, *listname, *listfqdn, *s1; subtextfilename = concatstr(2, listdir, "/text/unsub-ok"); @@ -61,18 +61,23 @@ listname = genlistname(listaddr); listfqdn = genlistfqdn(listaddr); + + do { randomstr = random_str(); - + myfree(queuefilename); queuefilename = concatstr(3, listdir, "/queue/", randomstr); + myfree(randomstr); - if((queuefd = open(queuefilename, O_WRONLY|O_CREAT|O_EXCL, - S_IRUSR|S_IWUSR)) < 0) { + queuefd = open(queuefilename, O_RDWR|O_CREAT|O_EXCL, + S_IRUSR|S_IWUSR); + + } while ((queuefd < 0) && (errno == EEXIST)); + + if(queuefd < 0) { log_error(LOG_ARGS, "Could not open '%s'", queuefilename); myfree(queuefilename); - myfree(randomstr); exit(EXIT_FAILURE); } - myfree(randomstr); fromaddr = concatstr(3, listname, "+bounces-help@", listfqdn); @@ -120,20 +125,30 @@ void generate_unsubconfirm(const char *listdir, const char *listaddr, const char *subaddr, const char *mlmmjsend) { - char *confirmaddr, *buf, *listname, *listfqdn, *confirmfilename; - char *subtextfilename, *queuefilename, *fromaddr, *randomstr, *s1; + char *confirmaddr, *buf, *listname, *listfqdn; + char *subtextfilename, *queuefilename = NULL, *fromaddr, *s1; + char *randomstr = NULL, *confirmfilename = NULL; int subconffd, subtextfd, queuefd; listname = genlistname(listaddr); listfqdn = genlistfqdn(listaddr); - randomstr = random_plus_addr(subaddr); - confirmfilename = concatstr(3, listdir, "/unsubconf/", randomstr); - if((subconffd = open(confirmfilename, O_WRONLY|O_CREAT|O_EXCL, - S_IRUSR|S_IWUSR)) < 0) { - log_error(LOG_ARGS, "Could not open '%s'", confirmfilename); + do { myfree(confirmfilename); myfree(randomstr); + randomstr = random_plus_addr(subaddr); + confirmfilename = concatstr(3, listdir, "/unsubconf/", + randomstr); + + subconffd = open(confirmfilename, O_RDWR|O_CREAT|O_EXCL, + S_IRUSR|S_IWUSR); + + } while ((subconffd < 0) && (errno == EEXIST)); + + if(subconffd < 0) { + log_error(LOG_ARGS, "Could not open '%s'", confirmfilename); + myfree(randomstr); + myfree(confirmfilename); exit(EXIT_FAILURE); } @@ -141,6 +156,8 @@ if(writen(subconffd, subaddr, strlen(subaddr)) < 0) { log_error(LOG_ARGS, "Could not write unsubconffile"); + myfree(randomstr); + myfree(confirmfilename); exit(EXIT_FAILURE); } @@ -150,26 +167,33 @@ listfqdn); fromaddr = concatstr(5, listname, "+bounces-confunsub-", randomstr, "@", listfqdn); + myfree(randomstr); + subtextfilename = concatstr(2, listdir, "/text/unsub-confirm"); if((subtextfd = open(subtextfilename, O_RDONLY)) < 0) { log_error(LOG_ARGS, "Could not open '%s'", subtextfilename); - myfree(randomstr); myfree(subtextfilename); exit(EXIT_FAILURE); } myfree(subtextfilename); + do { + randomstr = random_str(); + myfree(queuefilename); queuefilename = concatstr(3, listdir, "/queue/", randomstr); + myfree(randomstr); - if((queuefd = open(queuefilename, O_WRONLY|O_CREAT|O_EXCL, - S_IRUSR|S_IWUSR)) < 0) { + queuefd = open(queuefilename, O_RDWR|O_CREAT|O_EXCL, + S_IRUSR|S_IWUSR); + + } while ((queuefd < 0) && (errno == EEXIST)); + + if(queuefd < 0) { log_error(LOG_ARGS, "Could not open '%s'", queuefilename); myfree(queuefilename); - myfree(randomstr); exit(EXIT_FAILURE); } - myfree(randomstr); s1 = concatstr(9, "From: ", listname, "+help@", listfqdn, "\nTo: ", subaddr, "\nSubject: Confirm unsubscribe from ",