Provide a "petidomo --mode=dump <listname>" and use this in petidomo-kickout

instead of directly fiddling with Petidomo's files.
This commit is contained in:
Ralf S. Engelschall 2001-01-21 12:00:35 +00:00
parent 8b9c30b1e6
commit 3c64978407
2 changed files with 33 additions and 16 deletions

25
main.c
View File

@ -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",

View File

@ -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 (<FP>) {
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 (<LST>) {
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 (<DUMP>) {
s|\n$||s;
push(@{$list->{$l}->{MEMBERS}}, $_);
}
close(DUMP);
}
}
close(FP);
@ -70,6 +65,5 @@ foreach my $l (keys(%{$list})) {
}
}
}
sleep(1);
exit(0);