Mercurial > hg > mlmmj
changeset 275:9a847bfdc764
Don't fail in mlmmj-process b/c of EEXIST on the queuefilenames
author | mmj |
---|---|
date | Fri, 25 Jun 2004 17:04:03 +1000 |
parents | 3cd2ac31e671 |
children | f670b8a4e457 |
files | src/mlmmj-process.c |
diffstat | 1 files changed, 28 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mlmmj-process.c Fri Jun 25 17:02:32 2004 +1000 +++ b/src/mlmmj-process.c Fri Jun 25 17:04:03 2004 +1000 @@ -70,7 +70,7 @@ { char *from, *fqdn, *listname; char *buf, *moderatorfilename, *listaddr = getlistaddr(listdir); - char *queuefilename, *moderatorsfilename, *randomstr = random_str(); + char *queuefilename = NULL, *moderatorsfilename, *randomstr = NULL; char *mailbasename = mybasename(mailfilename), *s1; int moderatorfd, queuefd, moderatorsfd, mailfd; size_t count = 0; @@ -106,16 +106,22 @@ exit(EXIT_FAILURE); } + 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); from = concatstr(3, listname, "+owner@", fqdn); s1 = concatstr(15, "From: ", from, "\nTo: ", listname, "-moderators@", @@ -326,7 +332,7 @@ int subonlypost = 0, addrtocc = 1, intocc = 0; char *listdir = NULL, *mailfile = NULL, *headerfilename = NULL; char *footerfilename = NULL, *donemailname = NULL; - char *randomstr = random_str(), *mqueuename; + char *randomstr = NULL, *mqueuename; char *mlmmjsend, *mlmmjsub, *mlmmjunsub, *mlmmjbounce; char *bindir, *subjectprefix, *discardname, *listaddr; char *listfqdn, *listname, *fromaddr, *fromstr, *subject; @@ -383,21 +389,20 @@ exit(EXIT_FAILURE); } - donemailname = concatstr(3, listdir, "/queue/", randomstr); - donemailfd = open(donemailname, O_RDWR|O_CREAT|O_EXCL, - S_IRUSR|S_IWUSR); - while(donemailfd < 0 && errno == EEXIST) { + do { myfree(donemailname); + myfree(randomstr); randomstr = random_str(); donemailname = concatstr(3, listdir, "/queue/", randomstr); - fd = open(donemailname, O_RDWR|O_CREAT|O_EXCL, + + donemailfd = open(donemailname, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); - } + + } while ((donemailfd < 0) && (errno == EEXIST)); if(donemailfd < 0) { + log_error(LOG_ARGS, "could not create %s", donemailname); myfree(donemailname); - log_error(LOG_ARGS, "could not create mail file in queue" - "directory"); exit(EXIT_FAILURE); } #if 0 @@ -463,6 +468,7 @@ rename(donemailname, discardname); myfree(donemailname); myfree(discardname); + myfree(randomstr); /* TODO: free emailstructs */ exit(EXIT_SUCCESS); } @@ -616,6 +622,7 @@ myfree(subject); unlink(donemailname); myfree(donemailname); + myfree(randomstr); execlp(mlmmjsend, mlmmjsend, "-l", "1", "-T", fromemails.emaillist[0], @@ -646,6 +653,7 @@ return EXIT_SUCCESS; } + myfree(randomstr); if(noprocess) { myfree(donemailname);