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 */
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;
strlist *owners;
text *txt;
char *queuefilename;
+ enum subtype ts = SUB_NONE;
const char *subtype = NULL;
const char *subtypename = NULL;
bounce_t bret;
/* 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);
" 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 */
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;
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) {
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)
else
testfrom = &fromemails;
listcontrol(testfrom, &ml, recipextra,
- mlmmjsub, mlmmjunsub, mlmmjsend,
- donemailname);
+ mlmmjsub, mlmmjsend, donemailname);
return EXIT_SUCCESS;
}
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)