]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
send_denymail: do not execute mlmmj-send
authorBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 9 Dec 2021 08:07:22 +0000 (09:07 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 9 Dec 2021 08:07:22 +0000 (09:07 +0100)
src/mlmmj-process.c

index fe9b29e3ea7d4fab644271bf225e11af60640664..c541edc15ee622664bb9c09c154a6004bb2f1e18 100644 (file)
@@ -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);
                            }