]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
prepstdreply: convert to struct ml
authorBaptiste Daroussin <bapt@FreeBSD.org>
Sat, 11 Feb 2023 21:38:43 +0000 (22:38 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Sat, 11 Feb 2023 21:38:43 +0000 (22:38 +0100)
include/prepstdreply.h
src/listcontrol.c
src/mlmmj-bounce.c
src/mlmmj-process.c
src/mlmmj-sub.c
src/mlmmj-unsub.c
src/prepstdreply.c
src/send_digest.c
src/send_list.c
src/subscriberfuncs.c
tests/mlmmj.c

index 5bda915dc83e819254527fa12eee4e6deda898e9..cc90a235c68188b7cbca2b9ffdf455e7db5fa00a 100644 (file)
@@ -26,6 +26,7 @@
 #define PREPSTDREPLY_H
 
 #include <stdbool.h>
+#include "mlmmj.h"
 
 struct text;
 typedef struct text text;
@@ -62,11 +63,11 @@ void register_formatted(text *txt, const char *token,
                rewind_function rew, get_function get, void * state);
 char *get_processed_text_line(text *txt, int headers,
                const char *listdir, int listfd, int ctrlfd);
-bool prepstdreply_to(text *txt, const char *listdir,
-               const char *from, const char *to, const char *replyto, int listfd, int ctrlfd, int tofd, const char *messageid);
-char *prepstdreply(text *txt, const char *listdir,
-               const char *from, const char *to, const char *replyto, int listfd, int ctrlfd);
+bool prepstdreply_to(text *txt, struct ml *ml,
+               const char *from, const char *to, const char *replyto, int tofd, const char *messageid);
+char *prepstdreply(text *txt, struct ml *ml,
+               const char *from, const char *to, const char *replyto);
 void close_text(text *txt);
-void register_default_unformatted(text *txt, const char *listdelim, const char *listaddr);
+void register_default_unformatted(text *txt, struct ml *ml);
 
 #endif /* PREPSTDREPLY_H */
index 597de2584e13549442512d77a6aa47d4f5503518..1d72a8c0ed4abd467b1d2ba7771da1ea60edbc57 100644 (file)
@@ -205,12 +205,12 @@ int listcontrol(strlist *fromemails, struct ml *ml,
                        txt = open_text(ml->fd, "deny", "sub", "disabled",
                                        "digest", "sub-deny-digest");
                        MY_ASSERT(txt);
-                       register_default_unformatted(txt, ml->delim, ml->addr);
+                       register_default_unformatted(txt, ml);
                        register_unformatted(txt, "subaddr",
                                        tll_front(*fromemails));
-                       queuefilename = prepstdreply(txt, ml->dir,
+                       queuefilename = prepstdreply(txt, ml,
                                        "$listowner$",
-                                       tll_front(*fromemails), NULL, ml->fd, ml->ctrlfd);
+                                       tll_front(*fromemails), NULL);
                        MY_ASSERT(queuefilename);
                        close_text(txt);
                        send_help(ml, queuefilename,
@@ -241,13 +241,12 @@ int listcontrol(strlist *fromemails, struct ml *ml,
                        txt = open_text(ml->fd, "deny", "sub", "disabled",
                                        "nomail", "sub-deny-nomail");
                        MY_ASSERT(txt);
-                       register_default_unformatted(txt, ml->delim, ml->addr);
+                       register_default_unformatted(txt, ml);
                        register_unformatted(txt, "subaddr",
                                        tll_front(*fromemails));
-                       queuefilename = prepstdreply(txt, ml->dir,
+                       queuefilename = prepstdreply(txt, ml,
                                        "$listowner$",
-                                       tll_front(*fromemails), NULL, ml->fd,
-                                       ml->ctrlfd);
+                                       tll_front(*fromemails), NULL);
                        MY_ASSERT(queuefilename);
                        close_text(txt);
                        send_help(ml, queuefilename,
@@ -278,12 +277,12 @@ int listcontrol(strlist *fromemails, struct ml *ml,
                        txt = open_text(ml->fd, "deny", "sub", "disabled",
                                        "both", "sub-deny-digest");
                        MY_ASSERT(txt);
-                       register_default_unformatted(txt, ml->delim, ml->addr);
+                       register_default_unformatted(txt, ml);
                        register_unformatted(txt, "subaddr",
                                        tll_front(*fromemails));
-                       queuefilename = prepstdreply(txt, ml->dir,
+                       queuefilename = prepstdreply(txt, ml,
                                        "$listowner$",
-                                       tll_front(*fromemails), NULL, ml->fd,ml->ctrlfd);
+                                       tll_front(*fromemails), NULL);
                        MY_ASSERT(queuefilename);
                        close_text(txt);
                        send_help(ml, queuefilename,
@@ -599,9 +598,9 @@ permit:
                                tll_front(*fromemails));
                txt = open_text(ml->fd, "help", NULL, NULL, NULL, "listhelp");
                MY_ASSERT(txt);
-               register_default_unformatted(txt, ml->delim, ml->addr);
-               queuefilename = prepstdreply(txt, ml->dir,
-                               "$listowner$", tll_front(*fromemails), NULL, ml->fd,ml->ctrlfd);
+               register_default_unformatted(txt, ml);
+               queuefilename = prepstdreply(txt, ml,
+                               "$listowner$", tll_front(*fromemails), NULL);
                MY_ASSERT(queuefilename);
                close_text(txt);
                send_help(ml, queuefilename,
@@ -622,9 +621,9 @@ permit:
                                tll_front(*fromemails));
                txt = open_text(ml->fd, "faq", NULL, NULL, NULL, "listfaq");
                MY_ASSERT(txt);
-               register_default_unformatted(txt, ml->delim, ml->addr);
-               queuefilename = prepstdreply(txt, ml->dir,
-                               "$listowner$", tll_front(*fromemails), NULL, ml->fd,ml->ctrlfd);
+               register_default_unformatted(txt, ml);
+               queuefilename = prepstdreply(txt, ml,
+                               "$listowner$", tll_front(*fromemails), NULL);
                MY_ASSERT(queuefilename);
                close_text(txt);
                send_help(ml, queuefilename,
index 18b734b4d3f2a678ba7af2365dd636b7f85ac2fc..824432462854e8687add06a8917a2052d59c1c64 100644 (file)
@@ -77,12 +77,12 @@ void do_probe(struct ml *ml, const char *mlmmjsend, const char *addr)
 
        txt = open_text(ml->fd, "probe", NULL, NULL, NULL, "bounce-probe");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "bouncenumbers", "%bouncenumbers%"); /* DEPRECATED */
        fls = init_file_lines(addr, ':');
        register_formatted(txt, "bouncenumbers",
                        rewind_file_lines, get_file_line, fls);
-       queuefilename = prepstdreply(txt, ml->dir, "$listowner$", myaddr, NULL, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$listowner$", myaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
index 4c5e3c7e04bd54b21c41b6d6e8e0956989e7b806..9947dab67c53c5c335d10c293f606d60f5b81f45 100644 (file)
@@ -166,7 +166,7 @@ static void newmoderated(struct ml *ml, const char *mailfilename,
        txt = open_text(ml->fd, "moderate", "post",
                        modreason_strs[modreason], NULL, "moderation");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subject", subject);
        register_unformatted(txt, "posteraddr", posteraddr);
        register_unformatted(txt, "moderateaddr", replyto); /* DEPRECATED */
@@ -176,8 +176,7 @@ static void newmoderated(struct ml *ml, const char *mailfilename,
        register_formatted(txt, "moderators",
                        rewind_memory_lines, get_memory_line, mls);
        register_originalmail(txt, mailfilename);
-       queuefilename = prepstdreply(txt, ml->dir, "$listowner$", to, replyto,
-           ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$listowner$", to, replyto);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
@@ -191,15 +190,14 @@ static void newmoderated(struct ml *ml, const char *mailfilename,
                txt = open_text(ml->fd, "wait", "post",
                                modreason_strs[modreason], NULL, "moderation-poster");
                MY_ASSERT(txt);
-               register_default_unformatted(txt, ml->delim, ml->addr);
+               register_default_unformatted(txt, ml);
                register_unformatted(txt, "subject", subject);
                register_unformatted(txt, "posteraddr", posteraddr);
                register_unformatted(txt, "moderators", "%moderators%"); /* DEPRECATED */
                register_formatted(txt, "moderators",
                                rewind_memory_lines, get_memory_line, mls);
                register_originalmail(txt, mailfilename);
-               queuefilename = prepstdreply(txt, ml->dir,
-                               "$listowner$", efromsender, NULL, ml->fd, ml->ctrlfd);
+               queuefilename = prepstdreply(txt, ml, "$listowner$", efromsender, NULL);
                MY_ASSERT(queuefilename);
                close_text(txt);
 
@@ -707,13 +705,13 @@ int main(int argc, char **argv)
                        txt = open_text(ml.fd, "deny", "post",
                                        "maxmailsize", NULL, "maxmailsize");
                        MY_ASSERT(txt);
-                       register_default_unformatted(txt, ml.delim, ml.addr);
+                       register_default_unformatted(txt, &ml);
                        register_unformatted(txt, "subject", subject);
                        register_unformatted(txt, "posteraddr", posteraddr);
                        register_unformatted(txt, "maxmailsize", maxmailsizestr);
                        register_originalmail(txt, donemailname);
-                       queuefilename = prepstdreply(txt, ml.dir,
-                           "$listowner$", posteraddr, NULL, ml.fd, ml.fd);
+                       queuefilename = prepstdreply(txt, &ml, "$listowner$",
+                           posteraddr, NULL);
                        MY_ASSERT(queuefilename);
                        close_text(txt);
                        unlink(donemailname);
@@ -764,12 +762,12 @@ int main(int argc, char **argv)
                txt = open_text(ml.fd, "deny", "post",
                                "tocc", NULL, "notintocc");
                MY_ASSERT(txt);
-               register_default_unformatted(txt, ml.delim, ml.addr);
+               register_default_unformatted(txt, &ml);
                register_unformatted(txt, "subject", subject);
                register_unformatted(txt, "posteraddr", posteraddr);
                register_originalmail(txt, donemailname);
-               queuefilename = prepstdreply(txt, ml.dir,
-                   "$listowner$", posteraddr, NULL, ml.fd, ml.ctrlfd);
+               queuefilename = prepstdreply(txt, &ml,
+                   "$listowner$", posteraddr, NULL);
                MY_ASSERT(queuefilename)
                close_text(txt);
                unlink(donemailname);
@@ -802,12 +800,12 @@ int main(int argc, char **argv)
                        txt = open_text(ml.fd, "deny", "post",
                                        "access", NULL, "access");
                        MY_ASSERT(txt);
-                       register_default_unformatted(txt, ml.delim, ml.addr);
+                       register_default_unformatted(txt, &ml);
                        register_unformatted(txt, "subject", subject);
                        register_unformatted(txt, "posteraddr", posteraddr);
                        register_originalmail(txt, donemailname);
-                       queuefilename = prepstdreply(txt, ml.dir,
-                                       "$listowner$", posteraddr, NULL, ml.fd, ml.ctrlfd);
+                       queuefilename = prepstdreply(txt, &ml,
+                                       "$listowner$", posteraddr, NULL);
                        MY_ASSERT(queuefilename)
                        close_text(txt);
                        unlink(donemailname);
@@ -905,12 +903,12 @@ int main(int argc, char **argv)
                                        "modonlypost", NULL, NULL);
                            }
                            MY_ASSERT(txt);
-                           register_default_unformatted(txt, ml.delim, ml.addr);
+                           register_default_unformatted(txt, &ml);
                            register_unformatted(txt, "subject", subject);
                            register_unformatted(txt, "posteraddr", testaddr);
                            register_originalmail(txt, donemailname);
-                           queuefilename = prepstdreply(txt, ml.dir,
-                                   "$listowner$", testaddr, NULL, ml.fd, ml.ctrlfd);
+                           queuefilename = prepstdreply(txt, &ml,
+                                   "$listowner$", testaddr, NULL);
                            MY_ASSERT(queuefilename)
                            close_text(txt);
                            unlink(donemailname);
index 2fadf55e36d9237a86316c22971399636d8c5eb2..ec33094d49ed128acc51b51cc34efba9072c89c9 100644 (file)
@@ -140,7 +140,7 @@ static void moderate_sub(struct ml *ml, const char *subaddr,
                        subreason_strs[reasonsub], subtype_strs[typesub],
                        "submod-moderator");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
        register_unformatted(txt, "moderateaddr", replyto); /* DEPRECATED */
        register_unformatted(txt, "permitaddr", replyto);
@@ -148,8 +148,7 @@ static void moderate_sub(struct ml *ml, const char *subaddr,
        register_unformatted(txt, "moderators", "%gatekeepers%"); /* DEPRECATED */
        register_formatted(txt, "gatekeepers",
                        rewind_memory_lines, get_memory_line, mls);
-       queuefilename = prepstdreply(txt, ml->dir, "$listowner$", to, replyto,
-           ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$listowner$", to, replyto);
        MY_ASSERT(queuefilename);
        close_text(txt);
        
@@ -194,13 +193,12 @@ static void moderate_sub(struct ml *ml, const char *subaddr,
                        subreason_strs[reasonsub], subtype_strs[typesub],
                        "submod-requester");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
        register_unformatted(txt, "moderators", "%gatekeepers"); /* DEPRECATED */
        register_formatted(txt, "gatekeepers",
                        rewind_memory_lines, get_memory_line, mls);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$listowner$", subaddr, NULL, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$listowner$", subaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
@@ -305,10 +303,9 @@ void confirm_sub(struct ml *ml, const char *subaddr,
                        listtext);
        free(listtext);
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$helpaddr$", subaddr, NULL, ml->fd, ml->fd);
+       queuefilename = prepstdreply(txt, ml, "$helpaddr$", subaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
@@ -388,12 +385,11 @@ void generate_subconfirm(struct ml *ml, const char *subaddr,
                        listtext);
        free(listtext);
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
        register_unformatted(txt, "confaddr", confirmaddr); /* DEPRECATED */
        register_unformatted(txt, "confirmaddr", confirmaddr);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$helpaddr$", subaddr, confirmaddr, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$helpaddr$", subaddr, confirmaddr);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
@@ -435,10 +431,9 @@ void generate_subscribed(struct ml *ml, const char *subaddr,
                        "deny", "sub", "subbed", subtype_strs[typesub],
                        "sub-subscribed");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$helpaddr$", subaddr, NULL, ml->fd, ml->fd);
+       queuefilename = prepstdreply(txt, ml, "$helpaddr$", subaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
index bfd1d01d75d06af9f30f58aee1d32df476f291cc..a7e4e9c2fecfc82963c8c8f19d54eb15c40702b6 100644 (file)
@@ -72,10 +72,9 @@ void confirm_unsub(struct ml *ml, const char *subaddr, const char *mlmmjsend,
                        listtext);
        free(listtext);
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$helpaddr$", subaddr, NULL, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$helpaddr$", subaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
@@ -151,12 +150,11 @@ void generate_unsubconfirm(struct ml *ml, const char *subaddr,
                        listtext);
        free(listtext);
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
        register_unformatted(txt, "confaddr", confirmaddr); /* DEPRECATED */
        register_unformatted(txt, "confirmaddr", confirmaddr);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$helpaddr$", subaddr, confirmaddr, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$helpaddr$", subaddr, confirmaddr);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
@@ -197,10 +195,9 @@ static void generate_notsubscribed(struct ml *ml, const char *subaddr,
                        "deny", "unsub", "unsubbed", subtype_strs[typesub],
                        "unsub-notsubscribed");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$helpaddr$", subaddr, NULL, ml->fd, ml->fd);
+       queuefilename = prepstdreply(txt, ml, "$helpaddr$", subaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
index ba72ed7ee3e8d7f0cb0829e8ff82edddeed5a646..08bfb989f2d3f4a623018d143c03d8bb7d66100a 100644 (file)
@@ -458,49 +458,45 @@ void register_unformatted(text *txt, const char *token, const char *replacement)
 }
 
 void
-register_default_unformatted(text *txt, const char *listdelim,
-    const char *listaddr)
+register_default_unformatted(text *txt, struct ml *ml)
 {
-       char *listname, *fqdn, *tmp;
-
-       fqdn = genlistfqdn(listaddr);
-       listname = genlistname(listaddr);
+       char *tmp;
 
        register_unformatted(txt, "", "$");
-       register_unformatted(txt, "listaddr", listaddr);
-       xasprintf(&tmp, "%s%s", listname, listdelim);
+       register_unformatted(txt, "listaddr", ml->addr);
+       xasprintf(&tmp, "%s%s", ml->name, ml->delim);
        register_unformatted(txt, "list+", tmp);
-       register_unformatted(txt, "list", listname);
-       register_unformatted(txt, "domain", fqdn);
+       register_unformatted(txt, "list", ml->name);
+       register_unformatted(txt, "domain", ml->fqdn);
        free(tmp);
-       xasprintf(&tmp, "%s%sowner@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "owner");
        register_unformatted(txt, "listowner", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%shelp@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "help");
        register_unformatted(txt, "helpaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%sfaq@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "faq");
        register_unformatted(txt, "faqaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%sget-N@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "get-N");
        register_unformatted(txt, "listgetN", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%sunsubscribe@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "unsubscribe");
        register_unformatted(txt, "listunsubaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%sunsubscribe-digest@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "unsubscribe-digest");
        register_unformatted(txt, "digestunsubaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%sunsubscribe-nomail@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "unsubscribe-nomail");
        register_unformatted(txt, "nomailunsubaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%ssubscribe@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "subscribe");
        register_unformatted(txt, "listsubaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%ssubscribe-digest@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "subscribe-digest");
        register_unformatted(txt, "digestsubaddr", tmp);
        free(tmp);
-       xasprintf(&tmp, "%s%ssubscribe-nomail@%s", listname, listdelim, fqdn);
+       gen_addr(tmp, ml, "subscribe-nomail");
        register_unformatted(txt, "nomailsubaddr", tmp);
        free(tmp);
 }
@@ -1497,20 +1493,16 @@ void close_text(text *txt)
 }
 
 bool
-prepstdreply_to(text *txt, const char *listdir, const char *from, const char *to,
-    const char *replyto, int listfd, int ctrlfd, int tofd, const char *msgid)
+prepstdreply_to(text *txt, struct ml *ml, const char *from, const char *to,
+    const char *replyto, int tofd, const char *msgid)
 {
        bool ret = false;
        char *tmp, *line;
        int i;
        size_t len;
-       char *listaddr, *listdelim, *listfqdn, *str;
+       char *str;
        char *headers[10] = { NULL }; /* relies on NULL to flag end */
 
-       listaddr = getlistaddr(ctrlfd);
-       listdelim = getlistdelim(ctrlfd);
-       listfqdn = genlistfqdn(listaddr);
-
        for (i=0; i<6; i++) { 
                tmp = xstrdup("randomN");
                tmp[6] = '0' + i;
@@ -1520,16 +1512,16 @@ prepstdreply_to(text *txt, const char *listdir, const char *from, const char *to
                free(str);
        }
 
-       tmp = substitute(from, listfd, ctrlfd, txt);
+       tmp = substitute(from, ml->fd, ml->ctrlfd, txt);
        xasprintf(&headers[0], "From: %s", tmp);
        free(tmp);
-       tmp = substitute(to, listfd, ctrlfd, txt);
+       tmp = substitute(to, ml->fd, ml->ctrlfd, txt);
        xasprintf(&headers[1], "To: %s", tmp);
        free(tmp);
        if (msgid)
                headers[2] = xstrdup(msgid);
        else
-               headers[2] = genmsgid(listfqdn);
+               headers[2] = genmsgid(ml->fqdn);
        chomp(headers[2]);
        if (msgid)
                headers[3] = xstrdup(msgid);
@@ -1542,13 +1534,13 @@ prepstdreply_to(text *txt, const char *listdir, const char *from, const char *to
        headers[7] = xstrdup("Content-Transfer-Encoding: 8bit");
 
        if(replyto) {
-               tmp = substitute(replyto, listfd, ctrlfd, txt);
+               tmp = substitute(replyto, ml->fd, ml->fd, txt);
                xasprintf(&headers[8], "Reply-To: %s", tmp);
                free(tmp);
        }
 
        for(;;) {
-               line = get_processed_text_line(txt, 1, listdir, listfd, ctrlfd);
+               line = get_processed_text_line(txt, 1, ml->dir, ml->fd, ml->fd);
                if (!line) {
                        log_error(LOG_ARGS, "No body in listtext");
                        break;
@@ -1626,7 +1618,7 @@ prepstdreply_to(text *txt, const char *listdir, const char *from, const char *to
        }
 
        if (line == NULL) {
-               line = get_processed_text_line(txt, 0, listdir, listfd, ctrlfd);
+               line = get_processed_text_line(txt, 0, ml->dir, ml->fd, ml->ctrlfd);
        }
        while(line) {
                        if(dprintf(tofd, "%s\n", line) < 0) {
@@ -1635,7 +1627,7 @@ prepstdreply_to(text *txt, const char *listdir, const char *from, const char *to
                                goto freeandreturn;
                        }
                free(line);
-               line = get_processed_text_line(txt, 0, listdir, listfd, ctrlfd);
+               line = get_processed_text_line(txt, 0, ml->dir, ml->fd, ml->ctrlfd);
        }
 
        fsync(tofd);
@@ -1644,15 +1636,11 @@ prepstdreply_to(text *txt, const char *listdir, const char *from, const char *to
        ret = true;
 
 freeandreturn:
-       free(listaddr);
-       free(listdelim);
-       free(listfqdn);
 
        return ret;
 }
 
-char *prepstdreply(text *txt, const char *listdir,
-                  const char *from, const char *to, const char *replyto, int listfd,  int ctrlfd)
+char *prepstdreply(text *txt, struct ml *ml, const char *from, const char *to, const char *replyto)
 {
        int outfd;
        char *tmp, *retstr = NULL;
@@ -1662,7 +1650,7 @@ char *prepstdreply(text *txt, const char *listdir,
                tmp = random_str();
                if (retstr)
                        free(retstr);
-               retstr = concatstr(3, listdir, "/queue/", tmp);
+               xasprintf(&retstr, "%s/queue/%s", ml->dir, tmp);
                free(tmp);
 
                outfd = open(retstr, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
@@ -1675,7 +1663,7 @@ char *prepstdreply(text *txt, const char *listdir,
                free(txt);
                return NULL;
        }
-       if (!prepstdreply_to(txt, listdir, from, to, replyto, listfd, ctrlfd, outfd, NULL))
+       if (!prepstdreply_to(txt, ml, from, to, replyto, outfd, NULL))
                return (NULL);
        return (retstr);
 }
index 98a392581ebe3c54a4ff02cfaf584090c196a32c..a9fee743273f3e1d014ac0c5c31eabcb74a5560f 100644 (file)
@@ -279,7 +279,7 @@ int send_digest(struct ml *ml, int firstindex, int lastindex,
                log_error(LOG_ARGS, "Could not open listtext 'digest'");
                goto fallback_subject;
        }
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
 
        snprintf(buf, sizeof(buf), "%d", firstindex);
        register_unformatted(txt, "digestfirst", buf);
index e5e1d8c182d15c054e3be5fbe5a3dd691dc151cc..3f741e4f47b06ab63930bdc8f958085c40a034b7 100644 (file)
@@ -153,7 +153,7 @@ void send_list(struct ml *ml, const char *emailaddr, const char *mlmmjsend)
        txt = open_text(ml->fd, "list", NULL, NULL, subtype_strs[SUB_ALL],
                        "listsubs");
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_formatted(txt, "listsubs",
                        rewind_subs_list, get_sub, normalsls);
        register_formatted(txt, "normalsubs",
@@ -162,8 +162,7 @@ void send_list(struct ml *ml, const char *emailaddr, const char *mlmmjsend)
                        rewind_subs_list, get_sub, digestsls);
        register_formatted(txt, "nomailsubs",
                        rewind_subs_list, get_sub, nomailsls);
-       queuefilename = prepstdreply(txt, ml->dir, "$listowner$", emailaddr,
-           NULL, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$listowner$", emailaddr, NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
index 987b21b630774ee5c3b573961cd1db9ed1990994..e8c89c2cbe8cb4905111c55ad1e0c9e21a746b90 100644 (file)
@@ -198,11 +198,10 @@ void notify_sub(struct ml *ml, const char *subaddr,
                        subreason_strs[reasonsub], subtype_strs[typesub],
                        listtext);
        MY_ASSERT(txt);
-       register_default_unformatted(txt, ml->delim, ml->addr);
+       register_default_unformatted(txt, ml);
        register_unformatted(txt, "subaddr", subaddr);
        register_unformatted(txt, sub ? "newsub" : "oldsub", subaddr); /* DEPRECATED */
-       queuefilename = prepstdreply(txt, ml->dir,
-                       "$listowner$", "$listowner$", NULL, ml->fd, ml->ctrlfd);
+       queuefilename = prepstdreply(txt, ml, "$listowner$", "$listowner$", NULL);
        MY_ASSERT(queuefilename);
        close_text(txt);
 
index 2f80038645fcdc8f3714b0512a840e25652cd86b..062bf34d3eb1828078bdb1a9b60f960e2f946028 100644 (file)
@@ -2127,7 +2127,7 @@ ATF_TC_BODY(text_0, tc)
        ml_init(&ml);
        ml.dir = "list";
        ATF_REQUIRE(ml_open(&ml, false));
-       ATF_REQUIRE(prepstdreply_to(txt, ml.dir, "me@fqdn.org", "to@plop.org", NULL, ml.fd, ml.ctrlfd, tofd, "Message-Id: <fake>"));
+       ATF_REQUIRE(prepstdreply_to(txt, &ml, "me@fqdn.org", "to@plop.org", NULL, tofd, "Message-Id: <fake>"));
        close_text(txt);
        fsync(tofd);
        close(tofd);
@@ -2175,8 +2175,8 @@ ATF_TC_BODY(text_1, tc)
        ml_init(&ml);
        ml.dir = "list";
        ATF_REQUIRE(ml_open(&ml, false));
-       register_default_unformatted(txt, ml.delim, ml.addr);
-       ATF_REQUIRE(prepstdreply_to(txt, ml.dir, "me@fqdn.org", "to@plop.org", "bla@me.org", ml.fd, ml.ctrlfd, tofd, "Message-Id: <fake>"));
+       register_default_unformatted(txt, &ml);
+       ATF_REQUIRE(prepstdreply_to(txt, &ml, "me@fqdn.org", "to@plop.org", "bla@me.org", tofd, "Message-Id: <fake>"));
        close_text(txt);
        fsync(tofd);
        close(tofd);