{
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;
exit(EXIT_FAILURE);
}
- queuefilename = concatstr(3, listdir, "/queue/", randomstr);
-
- if((queuefd = open(queuefilename, O_WRONLY|O_CREAT|O_EXCL,
- S_IRUSR|S_IWUSR)) < 0) {
+ do {
+ randomstr = random_str();
+ myfree(queuefilename);
+ queuefilename = concatstr(3, listdir, "/queue/", randomstr);
+ myfree(randomstr);
+
+ 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@",
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;
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) {
- myfree(donemailname);
- randomstr = random_str();
- donemailname = concatstr(3, listdir, "/queue/", randomstr);
- fd = open(donemailname, O_RDWR|O_CREAT|O_EXCL,
- S_IRUSR|S_IWUSR);
- }
+ do {
+ myfree(donemailname);
+ myfree(randomstr);
+ randomstr = random_str();
+ donemailname = concatstr(3, listdir, "/queue/", randomstr);
+
+ 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
rename(donemailname, discardname);
myfree(donemailname);
myfree(discardname);
+ myfree(randomstr);
/* TODO: free emailstructs */
exit(EXIT_SUCCESS);
}
myfree(subject);
unlink(donemailname);
myfree(donemailname);
+ myfree(randomstr);
execlp(mlmmjsend, mlmmjsend,
"-l", "1",
"-T", fromemails.emaillist[0],
return EXIT_SUCCESS;
}
+ myfree(randomstr);
if(noprocess) {
myfree(donemailname);