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)
END
our $usage3 = <<'END';
privileged actions
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 nextarg () {
die "too few arguments\n" unless @ARGV;
my $v = shift @ARGV;
- die "option too late on command line\n" if $v =~ m/^-/;
+ die "option in wrong place on command line\n" if $v =~ m/^-/;
return $v;
}
+ (length $worddelim) * ($numwords-1); # delimiters
die "assuming lowest reasonable mean word length $minmaxmeanwordlen".
" addrs would be $expectedmindomlen long but".
- " your maximum length specified $maxdomainlen\n"
+ " maximum length is set to $maxdomainlen (use different -m?)\n"
if $expectedmindomlen > $maxdomainlen;
}
sub action_choose {
genopts;
+ $|=1;
my $template = rhsargs({'redirect'=>$user, 'comment'=>''});
$template->{'user'} = $user;
prepare_create();
1;
}) {
my $newrow = { %$template, 'localpart' => $s };
+ insertrow($newrow);
$dbh->commit();
prow($newrow);
} else {
}
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;
}