]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
mlmmj-process: factorize code for sending deny email
authorBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 21 Oct 2021 12:52:11 +0000 (14:52 +0200)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 21 Oct 2021 12:53:18 +0000 (14:53 +0200)
listtexts [new submodule]
src/mlmmj-process.c

diff --git a/listtexts b/listtexts
new file mode 160000 (submodule)
index 0000000..e28cdd7
--- /dev/null
+++ b/listtexts
@@ -0,0 +1 @@
+Subproject commit e28cdd7e4385208f1ff9b7e07905ac2d686cd2c8
index ce30e96b03a7a9a1cfe972a44b2578a62c6fcfa3..b826919ff4258790aa573a515d4688a84d859c52 100644 (file)
@@ -449,6 +449,47 @@ static void print_help(const char *prg)
        exit(EXIT_SUCCESS);
 }
 
+static void
+send_denymail(const char *listdir, const char *listaddr, const char *mlmmjsend,
+    const char *cause, const char *subcause, char *causestr, const char *posteraddr,
+    const char *subject, char *donemailname, const char *mailfile)
+{
+       char *listname, *listfqdn, *fromaddr, *queuefilename, *listdelim;
+       text *txt;
+
+       listdelim = getlistdelim(listdir);
+       listname = genlistname(listaddr);
+       listfqdn = genlistfqdn(listaddr);
+       fromaddr = concatstr(4, listname, listdelim, "bounces-help@", listfqdn);
+       txt = open_text(listdir, "deny", "post", cause, NULL, subcause);
+       MY_ASSERT(txt);
+       register_unformatted(txt, "subject", subject);
+       register_unformatted(txt, "posteraddr", posteraddr);
+       if (causestr != NULL)
+               register_unformatted(txt, cause, causestr);
+       register_originalmail(txt, donemailname);
+       queuefilename = prepstdreply(txt, listdir,
+               "$listowner$", posteraddr, NULL);
+       MY_ASSERT(queuefilename);
+       close_text(txt);
+       myfree(listdelim);
+       myfree(listname);
+       myfree(listfqdn);
+       unlink(donemailname);
+       unlink(mailfile);
+       myfree(donemailname);
+       myfree(causestr);
+       execlp(mlmmjsend, mlmmjsend,
+               "-l", "1",
+               "-L", listdir,
+               "-T", posteraddr,
+               "-F", fromaddr,
+               "-m", queuefilename, (char *)NULL);
+
+       log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
+       exit(EXIT_FAILURE);
+}
+
 int main(int argc, char **argv)
 {
        int i, j, opt, noprocess = 0, moderated = 0, send = 0;
@@ -463,9 +504,7 @@ int main(int argc, char **argv)
        char *randomstr = NULL, *mqueuename, *omitfilename;
        char *mlmmjsend, *mlmmjsub, *mlmmjunsub, *mlmmjbounce;
        char *bindir, *subjectprefix, *discardname, *listaddr, *listdelim = NULL;
-       char *listfqdn, *listname, *fromaddr;
-       text *txt;
-       char *queuefilename, *recipextra = NULL, *owner = NULL;
+       char *recipextra = NULL, *owner = NULL;
        char *maxmailsizestr;
        char *subject = NULL, *posteraddr = NULL;
        char *envstr, *efrom;
@@ -842,39 +881,8 @@ int main(int argc, char **argv)
                                myfree(maxmailsizestr);
                                exit(EXIT_SUCCESS);
                        }
-
-                       listdelim = getlistdelim(listdir);
-                       listname = genlistname(listaddr);
-                       listfqdn = genlistfqdn(listaddr);
-                       fromaddr = concatstr(4, listname, listdelim,
-                                       "bounces-help@", listfqdn);
-                       txt = open_text(listdir, "deny", "post",
-                                       "maxmailsize", NULL, "maxmailsize");
-                       MY_ASSERT(txt);
-                       register_unformatted(txt, "subject", subject);
-                       register_unformatted(txt, "posteraddr", posteraddr);
-                       register_unformatted(txt, "maxmailsize", maxmailsizestr);
-                       register_originalmail(txt, donemailname);
-                       queuefilename = prepstdreply(txt, listdir,
-                                       "$listowner$", posteraddr, NULL);
-                       MY_ASSERT(queuefilename);
-                       close_text(txt);
-                       myfree(listdelim);
-                       myfree(listname);
-                       myfree(listfqdn);
-                       unlink(donemailname);
-                       unlink(mailfile);
-                       myfree(donemailname);
-                       myfree(maxmailsizestr);
-                       execlp(mlmmjsend, mlmmjsend,
-                                       "-l", "1",
-                                       "-L", listdir,
-                                       "-T", posteraddr,
-                                       "-F", fromaddr,
-                                       "-m", queuefilename, (char *)NULL);
-
-                       log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
-                       exit(EXIT_FAILURE);
+                       send_denymail(listdir, listaddr, mlmmjsend, "maxmailsize", "maxmailsize",
+                           maxmailsizestr, posteraddr, subject, donemailname, mailfile);
                }
        }
 
@@ -915,35 +923,8 @@ int main(int argc, char **argv)
                        myfree(donemailname);
                        exit(EXIT_SUCCESS);
                }
-               listdelim = getlistdelim(listdir);
-               listname = genlistname(listaddr);
-               listfqdn = genlistfqdn(listaddr);
-               fromaddr = concatstr(4, listname, listdelim, "bounces-help@",
-                                    listfqdn);
-               txt = open_text(listdir, "deny", "post",
-                               "tocc", NULL, "notintocc");
-               MY_ASSERT(txt);
-               register_unformatted(txt, "subject", subject);
-               register_unformatted(txt, "posteraddr", posteraddr);
-               register_originalmail(txt, donemailname);
-               queuefilename = prepstdreply(txt, listdir,
-                               "$listowner$", posteraddr, NULL);
-               MY_ASSERT(queuefilename)
-               close_text(txt);
-               myfree(listdelim);
-               myfree(listname);
-               myfree(listfqdn);
-               unlink(donemailname);
-               myfree(donemailname);
-               execlp(mlmmjsend, mlmmjsend,
-                               "-l", "1",
-                               "-L", listdir,
-                               "-T", posteraddr,
-                               "-F", fromaddr,
-                               "-m", queuefilename, (char *)NULL);
-
-               log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
-               exit(EXIT_FAILURE);
+               send_denymail(listdir, listaddr, mlmmjsend, "tocc", "notintocc", NULL,
+                   posteraddr, subject, donemailname, mailfile);
        }
 
        access_rules = ctrlvalues(listdir, "access");
@@ -967,38 +948,8 @@ int main(int argc, char **argv)
                                myfree(donemailname);
                                exit(EXIT_SUCCESS);
                        }
-                       listdelim = getlistdelim(listdir);
-                       listname = genlistname(listaddr);
-                       listfqdn = genlistfqdn(listaddr);
-                       fromaddr = concatstr(4, listname, listdelim,
-                                       "bounces-help@", listfqdn);
-                       txt = open_text(listdir, "deny", "post",
-                                       "access", NULL, "access");
-                       MY_ASSERT(txt);
-                       register_unformatted(txt, "subject", subject);
-                       register_unformatted(txt, "posteraddr", posteraddr);
-                       register_originalmail(txt, donemailname);
-                       queuefilename = prepstdreply(txt, listdir,
-                                       "$listowner$", posteraddr, NULL);
-                       MY_ASSERT(queuefilename)
-                       close_text(txt);
-                       myfree(listaddr);
-                       myfree(listdelim);
-                       myfree(listname);
-                       myfree(listfqdn);
-                       unlink(donemailname);
-                       myfree(donemailname);
-                       myfree(randomstr);
-                       execlp(mlmmjsend, mlmmjsend,
-                                       "-l", "1",
-                                       "-L", listdir,
-                                       "-T", posteraddr,
-                                       "-F", fromaddr,
-                                       "-m", queuefilename, (char *)NULL);
-
-                       log_error(LOG_ARGS, "execlp() of '%s' failed",
-                                       mlmmjsend);
-                       exit(EXIT_FAILURE);
+                       send_denymail(listdir, listaddr, mlmmjsend, "access", "access",
+                           NULL, posteraddr, subject, donemailname, mailfile);
                } else if (accret == MODERATE) {
                        moderated = 1;
                        modreason = ACCESS;
@@ -1068,41 +1019,15 @@ int main(int argc, char **argv)
                                myfree(donemailname);
                                exit(EXIT_SUCCESS);
                            }
-                           listdelim = getlistdelim(listdir);
-                           listname = genlistname(listaddr);
-                           listfqdn = genlistfqdn(listaddr);
-                           fromaddr = concatstr(4, listname, listdelim,
-                                   "bounces-help@", listfqdn);
                            if (subonlypost) {
-                               txt = open_text(listdir, "deny", "post",
-                                       "subonlypost", NULL, "subonlypost");
+                               send_denymail(listdir, listaddr, mlmmjsend, "subonlypost",
+                                   "subonlypost", NULL, posteraddr, subject, donemailname,
+                                   mailfile);
                            } else if (modonlypost) {
-                               txt = open_text(listdir, "deny", "post",
-                                       "modonlypost", NULL, NULL);
+                               send_denymail(listdir, listaddr, mlmmjsend, "modonlypost",
+                                   NULL, NULL, posteraddr, subject, donemailname,
+                                   mailfile);
                            }
-                           MY_ASSERT(txt);
-                           register_unformatted(txt, "subject", subject);
-                           register_unformatted(txt, "posteraddr", posteraddr);
-                           register_originalmail(txt, donemailname);
-                           queuefilename = prepstdreply(txt, listdir,
-                                   "$listowner$", posteraddr, NULL);
-                           MY_ASSERT(queuefilename)
-                           close_text(txt);
-                           myfree(listaddr);
-                           myfree(listdelim);
-                           myfree(listname);
-                           myfree(listfqdn);
-                           unlink(donemailname);
-                           myfree(donemailname);
-                           execlp(mlmmjsend, mlmmjsend,
-                                   "-L", listdir,
-                                   "-l", "1",
-                                   "-T", posteraddr,
-                                   "-F", fromaddr,
-                                   "-m", queuefilename, (char *)NULL);
-
-                           log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
-                           exit(EXIT_FAILURE);
                        }
                }
        }