From 3c649784078d1093e692d70e0da90d13dbeacaf7 Mon Sep 17 00:00:00 2001 From: "Ralf S. Engelschall" Date: Sun, 21 Jan 2001 12:00:35 +0000 Subject: [PATCH] Provide a "petidomo --mode=dump " and use this in petidomo-kickout instead of directly fiddling with Petidomo's files. --- main.c | 25 ++++++++++++++++++++++++- petidomo-kickout | 24 +++++++++--------------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/main.c b/main.c index c61144a..397891b 100644 --- a/main.c +++ b/main.c @@ -48,7 +48,7 @@ main(int argc, char * argv[]) char * incoming_mail; argv_t args[] = { - {ARGV_MAND, "mode", ARGV_CHAR_P, &mode, "mode", "listserv, deliver, or approve."}, + {ARGV_MAND, "mode", ARGV_CHAR_P, &mode, "mode", "listserv, deliver, approve or dump."}, {ARGV_MAYBE, "listname", ARGV_CHAR_P, &listname, "listname", "Default mailing list."}, {ARGV_MAYBE, "masterconf", ARGV_CHAR_P, &masterconfig_path, "masterconf", "Path to petidomo.conf."}, {ARGV_MAYBE, "approved", ARGV_BOOL, &g_is_approved, "approved", "approved flag."}, @@ -90,6 +90,29 @@ main(int argc, char * argv[]) argv_version_string = (char *)petidomo_version.v_gnu; argv_process(args, argc, argv); + /* Member Dump Mode */ + if (strcasecmp(mode, "dump") == 0) { + char *cp; + const struct List_Config *ListConfig; + if (listname == NULL) { + fprintf(stderr, "petidomo: dump mode requires a list name argument\n"); + exit(1); + } + if (InitPetidomo(masterconfig_path) != 0) { + fprintf(stderr, "petidomo: failed load master configuration.\n"); + exit(1); + } + MasterConfig = getMasterConfig(); + ListConfig = getListConfig(listname); + if ((cp = loadfile(ListConfig->address_file)) == NULL) { + fprintf(stderr, "petidomo: failed to open file \"%s\"\n", ListConfig->address_file); + exit(1); + } + fwrite(cp, strlen(cp), 1, stdout); + free(cp); + exit(0); + } + /* Log a few helpful facts about this Petidomo instance. */ syslog(LOG_DEBUG, "%s starting up; mode=%s, listname=%s, masterconf=%s, approved=%s, ruid=%d, euid=%d, gid=%d, egid=%d", diff --git a/petidomo-kickout b/petidomo-kickout index e994709..b43920c 100755 --- a/petidomo-kickout +++ b/petidomo-kickout @@ -20,10 +20,6 @@ foreach my $dir (split(/:/, "$ENV{PATH}:/bin:/sbin:/usr/bin:/usr/sbin:/lib:/usr/ } } -# locate the Petidomo basedir -my $basedir = `petidomo --version 2>&1`; -$basedir =~ s|^.+\((\S+)\).*$|$1|s; - # read config my $list = {}; open(FP, "<$config") || die "No ~/.petidomo file found"; @@ -32,17 +28,16 @@ while () { if (m|^\s*(\S+)\s+(\S+)|) { my ($l, $pw) = ($1, $2); $l =~ s|@[^@]+$||; - if (-f "$basedir/$l.list") { - $list->{$l} = {}; - $list->{$l}->{PASSWORD} = $pw; - $list->{$l}->{MEMBERS} = []; - open(LST, "<$basedir/$l.list"); - while () { - s|\n$||s; - push(@{$list->{$l}->{MEMBERS}}, $_); - } - close(LST); + $list->{$l} = {}; + $list->{$l}->{PASSWORD} = $pw; + $list->{$l}->{MEMBERS} = []; + next if ($l eq 'petidomo'); + open(DUMP, "./petidomo --masterconf=../test/petidomo.conf --mode=dump $l |") || die "fuck"; + while () { + s|\n$||s; + push(@{$list->{$l}->{MEMBERS}}, $_); } + close(DUMP); } } close(FP); @@ -70,6 +65,5 @@ foreach my $l (keys(%{$list})) { } } } -sleep(1); exit(0);