From 298b7ba509c604f63c57f4aa27c8ac4d4b3b71d6 Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Thu, 9 Dec 2021 09:14:51 +0100 Subject: [PATCH] mlmmj-maintd: do not execute mlmmj-unsub --- src/Makefile.am | 2 +- src/mlmmj-maintd.c | 45 ++++++++++++--------------------------------- 2 files changed, 13 insertions(+), 34 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 5c5bdaf1..3d4c474a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -58,7 +58,7 @@ mlmmj_maintd_SOURCES = mlmmj.c mlmmj-maintd.c print-version.c log_error.c mygetl mylocking.c log_oper.c readn.c \ prepstdreply.c gethdrline.c unistr.c controls.c \ send_mails.c checkwait_smtpreply.c \ - mail-functions.c init_sockfd.c + mail-functions.c init_sockfd.c subscriberfuncs.c mlmmj_list_SOURCES = mlmmj-list.c strgen.c print-version.c memory.c \ log_error.c random-int.c readn.c subscriberfuncs.c diff --git a/src/mlmmj-maintd.c b/src/mlmmj-maintd.c index 596f6bf4..a2e1109f 100644 --- a/src/mlmmj-maintd.c +++ b/src/mlmmj-maintd.c @@ -47,6 +47,7 @@ #include "log_oper.h" #include "utils.h" #include "send_mails.h" +#include "subscriberfuncs.h" static void print_help(const char *prg) { @@ -602,8 +603,7 @@ int unsub_bouncers(struct mlmmj_list *list, const char *mlmmjunsub) char *probefile, *address, *a, *firstbounce, *bouncedata; struct dirent *dp; struct stat st; - pid_t pid, childpid; - int status, fd; + int fd; time_t bouncetime, t, bouncelife = 0; const char *errstr; @@ -700,37 +700,16 @@ int unsub_bouncers(struct mlmmj_list *list, const char *mlmmjunsub) } *a = '@'; - childpid = fork(); - - if(childpid < 0) { - log_error(LOG_ARGS, "Could not fork"); - myfree(address); - myfree(bouncedata); - continue; - } - - if(childpid > 0) { - log_oper(list->dir, OPLOGFNAME, "mlmmj-maintd: %s" - " unsubscribed due to bouncing since" - " %s", address, bouncedata); - myfree(address); - myfree(bouncedata); - do /* Parent waits for the child */ - pid = waitpid(childpid, &status, 0); - while(pid == -1 && errno == EINTR); - unlink(dp->d_name); - a = concatstr(2, dp->d_name, ".lastmsg"); - unlink(a); - myfree(a); - } else { - execlp(mlmmjunsub, mlmmjunsub, - "-L", list->dir, - "-b", "-a", address, (char *)NULL); - log_error(LOG_ARGS, "Could not execlp %s", - mlmmjunsub); - /* This is the child. Exit on failure. */ - exit(EXIT_FAILURE); - } + unsubscribe(list, address, SUB_ALL, SUB_BOUNCING); + log_oper(list->dir, OPLOGFNAME, "mlmmj-maintd: %s" + " unsubscribed due to bouncing since" + " %s", address, bouncedata); + myfree(address); + myfree(bouncedata); + unlink(dp->d_name); + a = concatstr(2, dp->d_name, ".lastmsg"); + unlink(a); + myfree(a); } closedir(bouncedir); -- 2.47.3