From: Baptiste Daroussin Date: Wed, 12 Apr 2023 10:18:19 +0000 (+0200) Subject: listcontrol: remove the requirement to execute mlmmj-unsub X-Git-Tag: RELEASE_1_4_0b1~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea3ee65dbc405d3d369829ae1ed75ba41d4edace;p=thirdparty%2Fmlmmj.git listcontrol: remove the requirement to execute mlmmj-unsub --- diff --git a/include/listcontrol.h b/include/listcontrol.h index 538ef54c..0256ec01 100644 --- a/include/listcontrol.h +++ b/include/listcontrol.h @@ -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 */ diff --git a/src/listcontrol.c b/src/listcontrol.c index f321ba67..3fcdc030 100644 --- a/src/listcontrol.c +++ b/src/listcontrol.c @@ -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 */ diff --git a/src/mlmmj-process.c b/src/mlmmj-process.c index 880720a6..73e4df84 100644 --- a/src/mlmmj-process.c +++ b/src/mlmmj-process.c @@ -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; } diff --git a/tests/mlmmj.c b/tests/mlmmj.c index c188ae44..8d44c8a2 100644 --- a/tests/mlmmj.c +++ b/tests/mlmmj.c @@ -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)