Mercurial > hg > mlmmj
changeset 276:f670b8a4e457
Some more reassuring that open will retry if EEXIST
author | mmj |
---|---|
date | Fri, 25 Jun 2004 17:24:31 +1000 |
parents | 9a847bfdc764 |
children | a18debdfdcc1 |
files | src/mlmmj-process.c src/mlmmj-sub.c |
diffstat | 2 files changed, 45 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mlmmj-process.c Fri Jun 25 17:04:03 2004 +1000 +++ b/src/mlmmj-process.c Fri Jun 25 17:24:31 2004 +1000 @@ -91,7 +91,6 @@ moderatorsfilename = concatstr(2, listdir, "/control/moderators"); if((moderatorsfd = open(moderatorsfilename, O_RDONLY)) < 0) { log_error(LOG_ARGS, "Could not open '%s'", moderatorsfilename); - myfree(queuefilename); myfree(moderatorsfilename); close(queuefd); exit(EXIT_FAILURE); @@ -100,8 +99,6 @@ if((mailfd = open(mailfilename, O_RDONLY)) < 0) { log_error(LOG_ARGS, "Could not open '%s'", mailfilename); - myfree(queuefilename); - myfree(moderatorsfilename); close(queuefd); exit(EXIT_FAILURE); }
--- a/src/mlmmj-sub.c Fri Jun 25 17:04:03 2004 +1000 +++ b/src/mlmmj-sub.c Fri Jun 25 17:24:31 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/sub-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); @@ -119,29 +124,39 @@ const char *subaddr, const char *mlmmjsend) { int subconffd, subtextfd, queuefd; - char *confirmaddr, *listname, *listfqdn, *confirmfilename; - char *subtextfilename, *queuefilename, *fromaddr, *randomstr; - char *buf, *s1; + char *confirmaddr, *listname, *listfqdn, *confirmfilename = NULL; + char *subtextfilename, *queuefilename = NULL, *fromaddr; + char *buf, *s1, *randomstr = NULL; listname = genlistname(listaddr); listfqdn = genlistfqdn(listaddr); - randomstr = random_plus_addr(subaddr); - confirmfilename = concatstr(3, listdir, "/subconf/", randomstr); - if((subconffd = open(confirmfilename, O_RDWR|O_CREAT|O_EXCL, - S_IRUSR|S_IWUSR)) < 0) { + do { + randomstr = random_plus_addr(subaddr); + myfree(confirmfilename); + myfree(randomstr); + confirmfilename = concatstr(3, listdir, "/subconf/", + 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(confirmfilename); - myfree(randomstr); exit(EXIT_FAILURE); } + myfree(confirmfilename); + if(writen(subconffd, subaddr, strlen(subaddr)) < 0) { log_error(LOG_ARGS, "Could not write to subconffd"); exit(EXIT_FAILURE); } + close(subconffd); - myfree(confirmfilename); confirmaddr = concatstr(5, listname, "+confsub-", randomstr, "@", listfqdn); @@ -149,26 +164,34 @@ fromaddr = concatstr(5, listname, "+bounces-confsub-", randomstr, "@", listfqdn); + myfree(randomstr); + subtextfilename = concatstr(2, listdir, "/text/sub-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_RDWR|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 subscribe to ", listaddr,