From: Baptiste Daroussin Date: Thu, 9 Dec 2021 08:07:22 +0000 (+0100) Subject: send_denymail: do not execute mlmmj-send X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f18ab4ac35478c3582d2b1a2110dafdf9dd0f30a;p=thirdparty%2Fmlmmj.git send_denymail: do not execute mlmmj-send --- diff --git a/src/mlmmj-process.c b/src/mlmmj-process.c index fe9b29e3..c541edc1 100644 --- a/src/mlmmj-process.c +++ b/src/mlmmj-process.c @@ -50,6 +50,7 @@ #include "log_oper.h" #include "unistr.h" #include "chomp.h" +#include "send_mails.h" enum action { ALLOW, @@ -437,12 +438,14 @@ static void print_help(const char *prg) } static void -send_denymail(struct mlmmj_list *list, const char *mlmmjsend, - const char *cause, const char *subcause, char *causestr, const char *posteraddr, - const char *subject, char *donemailname, const char *mailfile) +send_denymail(struct mlmmj_list *list, const char *cause, const char *subcause, + char *causestr, const char *posteraddr, const char *subject, + char *donemailname, const char *mailfile) { char *fromaddr, *queuefilename; text *txt; + struct mail_headers mh; + int queuefd; fromaddr = concatstr(4, list->name, list->delim, "bounces-help@", list->fqdn); txt = open_text(list, "deny", "post", cause, NULL, subcause); @@ -454,19 +457,17 @@ send_denymail(struct mlmmj_list *list, const char *mlmmjsend, register_originalmail(txt, donemailname); queuefilename = prepstdreply(txt, list, "$listowner$", posteraddr, NULL, false); MY_ASSERT(queuefilename); + queuefd = openat(list->queuefd, queuefilename, O_RDONLY); close_text(txt); unlink(donemailname); unlink(mailfile); myfree(donemailname); myfree(causestr); - execlp(mlmmjsend, mlmmjsend, - "-l", "1", - "-L", list->dir, - "-T", posteraddr, - "-F", fromaddr, - "-m", queuefilename, (char *)NULL); - - log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend); + memset(&mh, 0, sizeof(mh)); + mh.to = posteraddr; + mh.from = fromaddr; + if (send_single_mail(list, &mh, queuefd, queuefilename)) + exit(EXIT_SUCCESS); exit(EXIT_FAILURE); } @@ -849,7 +850,7 @@ int main(int argc, char **argv) myfree(maxmailsizestr); exit(EXIT_SUCCESS); } - send_denymail(&list, mlmmjsend, "maxmailsize", "maxmailsize", + send_denymail(&list, "maxmailsize", "maxmailsize", maxmailsizestr, posteraddr, subject, donemailname, mailfile); } } @@ -890,7 +891,7 @@ int main(int argc, char **argv) myfree(donemailname); exit(EXIT_SUCCESS); } - send_denymail(&list, mlmmjsend, "tocc", "notintocc", NULL, + send_denymail(&list, "tocc", "notintocc", NULL, posteraddr, subject, donemailname, mailfile); } @@ -914,7 +915,7 @@ int main(int argc, char **argv) myfree(donemailname); exit(EXIT_SUCCESS); } - send_denymail(&list, mlmmjsend, "access", "access", + send_denymail(&list, "access", "access", NULL, posteraddr, subject, donemailname, mailfile); } else if (accret == MODERATE) { moderated = 1; @@ -984,11 +985,11 @@ int main(int argc, char **argv) exit(EXIT_SUCCESS); } if (subonlypost) { - send_denymail(&list, mlmmjsend, "subonlypost", + send_denymail(&list, "subonlypost", "subonlypost", NULL, posteraddr, subject, donemailname, mailfile); } else if (modonlypost) { - send_denymail(&list, mlmmjsend, "modonlypost", + send_denymail(&list, "modonlypost", NULL, NULL, posteraddr, subject, donemailname, mailfile); }