"selfmoderated"
};
+static void
+free_parsed_hdrs(struct mailhdr *readhdrs, strlist fromemails,
+ strlist originalfromemails, strlist toemails, strlist ccemails,
+ strlist rpemails, strlist dtemails, strlist allheaders)
+{
+ free_mailhdrs(readhdrs);
+ tll_free_and_free(fromemails, free);
+ tll_free_and_free(originalfromemails, free);
+ tll_free_and_free(toemails, free);
+ tll_free_and_free(ccemails, free);
+ tll_free_and_free(rpemails, free);
+ tll_free_and_free(dtemails, free);
+ tll_free_and_free(allheaders, free);
+}
static bool is_moderator(int listfd, const char *address,
char **moderators) {
delheaders, readhdrs,
&allheaders, subjectprefix, replyto) < 0) {
log_error(LOG_ARGS, "Error in do_all_the_voodoo_here");
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
free(donemailname);
free(discardname);
free(randomstr);
- /* TODO: free emailstructs */
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}
/* The only time posteraddr will remain unset is when the mail is a
if ((rawmailfd = open(mailfile, O_RDONLY)) < 0) {
log_error(LOG_ARGS, "could not open() "
"input mail file");
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
if ((donemailfd = open(donemailname,
O_WRONLY|O_TRUNC)) < 0) {
log_error(LOG_ARGS, "could not open() "
"output mail file");
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
if (do_all_the_voodoo_here(rawmailfd, donemailfd, -1,
-1, delheaders,
NULL, &allheaders, NULL, 0) < 0) {
log_error(LOG_ARGS, "do_all_the_voodoo_here");
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
tll_free_and_free(*delheaders, free);
listcontrol(testfrom, &ml, recipextra,
mlmmjsend, donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
return EXIT_SUCCESS;
}
if (errno != ENOENT) {
if (stat(donemailname, &st) < 0) {
log_error(LOG_ARGS, "stat(%s,..) failed", donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
unlink(donemailname);
unlink(mailfile);
free(donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}
free(donemailname);
free(discardname);
free(randomstr);
- /* TODO: free emailstructs */
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
mailfile);
unlink(donemailname);
free(donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}
txt = open_text(ml.fd, "deny", "post",
mailfile);
unlink(donemailname);
free(donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}
txt = open_text(ml.fd, "deny", "post",
donemailname, discardname);
free(donemailname);
free(discardname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
free(donemailname);
free(discardname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
} else if (accret == ACT_SEND) {
send = 1;
mailfile);
unlink(donemailname);
free(donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}
if (subonlypost) {
mailfile);
unlink(donemailname);
free(donemailname);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}
if (subonlypost) {
donemailname, mqueuename);
free(donemailname);
free(mqueuename);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
free(donemailname);
omitfilename);
free(mqueuename);
free(omitfilename);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
free(omitfilename);
log_error(LOG_ARGS,
"could not write omit file");
free(mqueuename);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_FAILURE);
}
fsync(omitfd);
}
newmoderated(&ml, mqueuename, mlmmjsend, efrom, subject,
posteraddr, modreason);
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
return EXIT_SUCCESS;
}
if (noprocess) {
free(donemailname);
- /* XXX: toemails and ccemails etc. have to be free() */
+ free_parsed_hdrs(readhdrs, fromemails, originalfromemails,
+ toemails, ccemails, rpemails, dtemails, allheaders);
exit(EXIT_SUCCESS);
}