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:
parent
8b9c30b1e6
commit
3c64978407
25
main.c
25
main.c
@ -48,7 +48,7 @@ main(int argc, char * argv[])
|
|||||||
char * incoming_mail;
|
char * incoming_mail;
|
||||||
argv_t args[] =
|
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, "listname", ARGV_CHAR_P, &listname, "listname", "Default mailing list."},
|
||||||
{ARGV_MAYBE, "masterconf", ARGV_CHAR_P, &masterconfig_path, "masterconf", "Path to petidomo.conf."},
|
{ARGV_MAYBE, "masterconf", ARGV_CHAR_P, &masterconfig_path, "masterconf", "Path to petidomo.conf."},
|
||||||
{ARGV_MAYBE, "approved", ARGV_BOOL, &g_is_approved, "approved", "approved flag."},
|
{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_version_string = (char *)petidomo_version.v_gnu;
|
||||||
argv_process(args, argc, argv);
|
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. */
|
/* 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",
|
syslog(LOG_DEBUG, "%s starting up; mode=%s, listname=%s, masterconf=%s, approved=%s, ruid=%d, euid=%d, gid=%d, egid=%d",
|
||||||
|
|||||||
@ -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
|
# read config
|
||||||
my $list = {};
|
my $list = {};
|
||||||
open(FP, "<$config") || die "No ~/.petidomo file found";
|
open(FP, "<$config") || die "No ~/.petidomo file found";
|
||||||
@ -32,17 +28,16 @@ while (<FP>) {
|
|||||||
if (m|^\s*(\S+)\s+(\S+)|) {
|
if (m|^\s*(\S+)\s+(\S+)|) {
|
||||||
my ($l, $pw) = ($1, $2);
|
my ($l, $pw) = ($1, $2);
|
||||||
$l =~ s|@[^@]+$||;
|
$l =~ s|@[^@]+$||;
|
||||||
if (-f "$basedir/$l.list") {
|
$list->{$l} = {};
|
||||||
$list->{$l} = {};
|
$list->{$l}->{PASSWORD} = $pw;
|
||||||
$list->{$l}->{PASSWORD} = $pw;
|
$list->{$l}->{MEMBERS} = [];
|
||||||
$list->{$l}->{MEMBERS} = [];
|
next if ($l eq 'petidomo');
|
||||||
open(LST, "<$basedir/$l.list");
|
open(DUMP, "./petidomo --masterconf=../test/petidomo.conf --mode=dump $l |") || die "fuck";
|
||||||
while (<LST>) {
|
while (<DUMP>) {
|
||||||
s|\n$||s;
|
s|\n$||s;
|
||||||
push(@{$list->{$l}->{MEMBERS}}, $_);
|
push(@{$list->{$l}->{MEMBERS}}, $_);
|
||||||
}
|
|
||||||
close(LST);
|
|
||||||
}
|
}
|
||||||
|
close(DUMP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(FP);
|
close(FP);
|
||||||
@ -70,6 +65,5 @@ foreach my $l (keys(%{$list})) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sleep(1);
|
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user