choose [<genopts>] [<redirect>] [#<comment>] (interactively allocate)
update <addr> [<redirect>] [#<comment>]
show <addr>
- list
+ list [-a] (-a also lists aliases set to reject)
list-actions
empty string for redirect means reject
remember to quote comments (to protect # from your shell)
list-user <user>
insert-exact <addr> <user> <redirect> <comment>
donate <addr> <user>
+ list-users
enable-user|disable-user <user>
default generation method is alphanum
END
}
sub action_list {
+ my $listall = 0;
+ $listall ||= $priv;
+ while (@ARGV) {
+ last unless $ARGV[0] =~ m/^-/;
+ $_ = shift @ARGV;
+ last if m/^--?$/;
+ if (m/^-a$/) {
+ $listall=1;
+ } else {
+ die "unknown option to list \`$_'\n";
+ }
+ }
nomoreargs;
- my $q = $dbh->prepare("SELECT * FROM addrs WHERE user=?".
- " ORDER BY localpart");
+ my $q = "SELECT * FROM addrs WHERE user=?";
+ $q .= " AND NOT redirect = ''" unless $listall;
+ $q .= " ORDER BY localpart";
+ $q = $dbh->prepare($q);
$q->execute($user);
listq($q);
}
listq($q)
}
+sub action_list_users {
+ die unless $priv;
+ nomoreargs;
+ my $qo = $dbh->prepare("SELECT user, count(*) AS count FROM addrs".
+ " GROUP BY user ORDER BY user");
+ my $qd = $dbh->prepare("SELECT 1 FROM disabled_users WHERE user = ?");
+ my $qe = $dbh->prepare("SELECT count(*) FROM addrs".
+ " WHERE user = ? AND NOT redirect=''");
+ $qo->execute();
+ printf "# total inuse ena user\n" or die $!;
+ while (my $row = $qo->fetchrow_hashref) {
+ my $tu = $row->{user};
+ $qd->execute($tu);
+ $qe->execute($tu);
+ my ($disabled) = $qd->fetchrow_array();
+ my ($inuse) = $qe->fetchrow_array();
+ printf "%6d %6d %s %s\n",
+ $row->{count},
+ $inuse, $disabled ? '-' : 'y',
+ $tu
+ or die $!;
+ }
+}
+
sub action_insert_exact {
die unless $priv;
my $row = { };
die unless $priv;
$user = nextarg;
nomoreargs;
- $dbh->do('INSERT INTO disabled_users VALUES user (?)',{},$user);
+ $dbh->do('INSERT INTO disabled_users (user) VALUES (?)',{},$user);
$dbh->commit;
}