chiark
/
gitweb
/
~ijackson
/
evade-mail-usrlocal.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
better usage
[evade-mail-usrlocal.git]
/
fyvzl
diff --git
a/fyvzl
b/fyvzl
index 3ccae97d32d6bf2cf8d6b69ba1bf4ac14ecad376..4fa8fbdd10cf40bcc59eaf2a8d34383ba5739895 100755
(executable)
--- a/
fyvzl
+++ b/
fyvzl
@@
-1,17
+1,21
@@
#!/usr/bin/perl -w
#!/usr/bin/perl -w
-#
-# usage: ../fyvzl [-lLENGTH] [-mMAXPERUSER] [-dDOM] [-qQUALDOM] DATABASE-FILE ACTION ARG
-# actions
-# create [REDIRECT-TO]
-# update LOCAL-PART REDIRECT-TO
-# reject LOCAL-PART
-# show LOCAL-PART
-# list
-# privileged actions
-# list-user USER
-# insert-exact LOCAL-PART USER REDIRECT
-# donate LOCAL-PART USER
-# enable-user|disable-user USER
+our $usage1 = <<'END';
+usage: ../fyvzl [-lLENGTH] [-mMAXPERUSER] [-dDOM] [-qQUALDOM] DATABASE-FILE ACTION ARG
+END
+our $usage2 = <<'END';
+actions
+ create [REDIRECT-TO]
+ update LOCAL-PART REDIRECT-TO
+ reject LOCAL-PART
+ show LOCAL-PART
+ list
+ list-actions
+privileged actions
+ list-user USER
+ insert-exact LOCAL-PART USER REDIRECT
+ donate LOCAL-PART USER
+ enable-user|disable-user USER
+END
use strict;
use strict;
@@
-98,6
+102,11
@@
sub action_create {
$redirect = qualify $redirect;
open R, "/dev/urandom" or die $!;
binmode R;
$redirect = qualify $redirect;
open R, "/dev/urandom" or die $!;
binmode R;
+ my $countq = $dbh->prepare("SELECT count(*) FROM addrs WHERE user=?");
+ $countq->execute($user);
+ my ($count) = $countq->fetchrow_array();
+ die unless defined $count;
+ die "too many aliases for this user\n" if $count >= $maxperuser;
my $q = $dbh->prepare("SELECT localpart FROM addrs WHERE localpart=?");
my $s;
for (;;) {
my $q = $dbh->prepare("SELECT localpart FROM addrs WHERE localpart=?");
my $s;
for (;;) {
@@
-211,6
+220,10
@@
sub action_disable_user {
$dbh->commit;
}
$dbh->commit;
}
+sub action_list_actions {
+ print $usage2 or die $!;
+}
+
while (@ARGV) {
last unless $ARGV[0] =~ m/^-/;
$_ = shift @ARGV;
while (@ARGV) {
last unless $ARGV[0] =~ m/^-/;
$_ = shift @ARGV;
@@
-223,6
+236,8
@@
while (@ARGV) {
$dom = $1;
} elsif (m/^-q(\S+)$/) {
$qualdom = $1;
$dom = $1;
} elsif (m/^-q(\S+)$/) {
$qualdom = $1;
+ } elsif (m/^-h$/) {
+ print $usage1.$usage2 or die $!;
} else {
die "unknown option \`$_'\n";
}
} else {
die "unknown option \`$_'\n";
}
@@
-238,6
+253,11
@@
if (defined $ENV{'USERV_USER'}) {
$user = ((getpwuid $<)[0]) or die;
}
$user = ((getpwuid $<)[0]) or die;
}
+$usage2 .= "LOCAL-PART is implicitly qualified with \@$dom\n"
+ if defined $qualdom;
+$usage2 .= "REDIRECT is implicitly qualified with \@$qualdom if it has no \@\n"
+ if defined $qualdom;
+
$dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","",
{ PrintError => 0, AutoCommit => 0, RaiseError => 1 })
or die "$dbfile $!";
$dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","",
{ PrintError => 0, AutoCommit => 0, RaiseError => 1 })
or die "$dbfile $!";