]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
listcontrol: remove the requirement to execute mlmmj-unsub
authorBaptiste Daroussin <bapt@FreeBSD.org>
Wed, 12 Apr 2023 10:18:19 +0000 (12:18 +0200)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Wed, 12 Apr 2023 10:18:19 +0000 (12:18 +0200)
include/listcontrol.h
src/listcontrol.c
src/mlmmj-process.c
tests/mlmmj.c

index 538ef54c8bd68509b9f874d001114d173d57a6b5..0256ec0192f11b608bac644a732abf2b21b69b06 100644 (file)
@@ -65,7 +65,6 @@ struct ctrl_command *get_ctrl_command(const char *controlstr, char **param);
 
 int listcontrol(strlist *fromemails, struct ml *ml,
                const char *controlstr, const char *mlmmjsub,
-               const char *mlmmjunsub, const char *mlmmjsend,
-               const char *mailname);
+               const char *mlmmjsend, const char *mailname);
 
 #endif /* LISTCONTROL_H */
index f321ba67cd1a9a069667d3384aac2ea7aa90b029..3fcdc030215e32b7ddbc0d312e51e8d2372fac14 100644 (file)
@@ -129,8 +129,7 @@ get_ctrl_command(const char *controlstr, char **param)
 
 int listcontrol(strlist *fromemails, struct ml *ml,
                const char *controlstr, const char *mlmmjsub,
-               const char *mlmmjunsub, const char *mlmmjsend,
-               const char *mailname)
+               const char *mlmmjsend, const char *mailname)
 {
        char *bouncenr, *tmpstr;
        char *param = NULL, *moderatefilename, *gatekeepfilename;
@@ -142,6 +141,7 @@ int listcontrol(strlist *fromemails, struct ml *ml,
        strlist *owners;
        text *txt;
        char *queuefilename;
+       enum subtype ts = SUB_NONE;
        const char *subtype = NULL;
        const char *subtypename = NULL;
        bounce_t bret;
@@ -379,20 +379,20 @@ int listcontrol(strlist *fromemails, struct ml *ml,
 
        /* listname+unsubconf-digest-COOKIE@domain.tld */
        case CTRL_CONFUNSUB_DIGEST:
-               subtype = "-d";
+               ts = SUB_DIGEST;
                subtypename = "-digest";
                __attribute__ ((fallthrough));
        /* listname+unsubconf-nomail-COOKIE@domain.tld */
        case CTRL_CONFUNSUB_NOMAIL:
-               if (subtype == NULL) {
-                       subtype = "-n";
+               if (ts == SUB_NONE) {
+                       ts = SUB_NOMAIL;
                        subtypename = "-nomail";
                }
                __attribute__ ((fallthrough));
        /* listname+unsubconf-COOKIE@domain.tld */
        case CTRL_CONFUNSUB:
-               if (subtype == NULL) {
-                       subtype = "";
+               if (ts == SUB_NONE) {
+                       ts = SUB_ALL;
                        subtypename = "";
                }
                tmpstr = get_subcookie_content(ml->fd, true, param);
@@ -404,8 +404,9 @@ int listcontrol(strlist *fromemails, struct ml *ml,
                                " Ignoring mail", subtypename);
                        return -1;
                }
-               exec_or_die(mlmmjunsub, "-L", ml->dir, "-a", tmpstr, "-R", "-c",
-                   subtype, NULL);
+               do_unsubscribe(ml, tmpstr, ts, SUB_CONFIRM,
+                   false, false, false, true);
+               exit(EXIT_SUCCESS);
                break;
 
        /* listname+bounces-INDEX-user=example.tld@domain.tld */
index 880720a6ce63974d2b5fe400eb276dba61b0bced..73e4df841cddc09bd5a7bca87d417ca788ec11a9 100644 (file)
@@ -382,7 +382,7 @@ int main(int argc, char **argv)
        bool subonlypost, modonlypost, modnonsubposts, foundaddr = false;
        char *mailfile = NULL, *donemailname = NULL;
        char *randomstr = NULL, *mqueuename, *omitfilename;
-       char *mlmmjsend, *mlmmjsub, *mlmmjunsub;
+       char *mlmmjsend, *mlmmjsub;
        char *bindir, *subjectprefix, *discardname;
        text *txt;
        char *queuefilename, *recipextra = NULL, *owner = NULL;
@@ -423,7 +423,6 @@ int main(int argc, char **argv)
        bindir = mydirname(argv[0]);
        xasprintf(&mlmmjsend, "%s/mlmmj-send", bindir);
        xasprintf(&mlmmjsub, "%s/mlmmj-sub", bindir);
-       xasprintf(&mlmmjunsub, "%s/mlmmj-unsub", bindir);
        free(bindir);
 
        while ((opt = getopt(argc, argv, "hVPm:L:")) != -1) {
@@ -676,7 +675,7 @@ int main(int argc, char **argv)
                            efrom, "-s", owner, "-a", "-m", donemailname, NULL);
                }
 #if 0
-               log_error(LOG_ARGS, "listcontrol(from, %s, %s, %s, %s, %s, %s, %s)\n", listdir, toemails.emaillist[0], mlmmjsub, mlmmjunsub, mlmmjsend, mlmmjbounce, donemailname);
+               log_error(LOG_ARGS, "listcontrol(from, %s, %s, %s, %s, %s, %s, %s)\n", listdir, toemails.emaillist[0], mlmmjsub, mlmmjsend, mlmmjbounce, donemailname);
 #endif
                unlink(mailfile);
                if (tll_length(originalfromemails) > 0)
@@ -684,8 +683,7 @@ int main(int argc, char **argv)
                else
                        testfrom = &fromemails;
                listcontrol(testfrom, &ml, recipextra,
-                           mlmmjsub, mlmmjunsub, mlmmjsend,
-                           donemailname);
+                           mlmmjsub, mlmmjsend, donemailname);
 
                return EXIT_SUCCESS;
        }
index c188ae44a884a613a7f7935696937e1dcbac5596..8d44c8a298e784acd014acc74cd078062fbd0a6e 100644 (file)
@@ -2442,20 +2442,20 @@ ATF_TC_BODY(listcontrol, tc)
        strlist fromemails = tll_init();
 
        ATF_REQUIRE(ml_open(&ml, false));
-       ATF_REQUIRE_EQ(listcontrol(NULL, &ml, "plop", NULL, NULL, NULL, "meh"), -1);
+       ATF_REQUIRE_EQ(listcontrol(NULL, &ml, "plop", NULL, NULL, "meh"), -1);
 
-       ATF_REQUIRE_EQ(listcontrol(&fromemails, &ml, "help", NULL, NULL, NULL, "meh"), -1);
+       ATF_REQUIRE_EQ(listcontrol(&fromemails, &ml, "help", NULL, NULL, "meh"), -1);
 
        atf_utils_create_file("list/control/closedlist", "");
        atf_utils_create_file("meh", "mail");
        tll_push_back(fromemails, "plop@test");
-       ATF_REQUIRE_EQ(listcontrol(&fromemails, &ml, "unsubscribe", NULL, NULL, NULL, "meh"), -1);
+       ATF_REQUIRE_EQ(listcontrol(&fromemails, &ml, "unsubscribe", NULL, NULL, "meh"), -1);
        if (atf_utils_file_exists("me"))
                atf_tc_fail("mail should have been removed");
 
        unlink("list/control/closedlist");
        atf_utils_create_file("list/control/closedlistsub", "");
-       ATF_REQUIRE_EQ(listcontrol(&fromemails, &ml, "subscribe", NULL, NULL, NULL, "meh"), -1);
+       ATF_REQUIRE_EQ(listcontrol(&fromemails, &ml, "subscribe", NULL, NULL, "meh"), -1);
 }
 
 ATF_TC_BODY(send_help, tc)