#!/usr/bin/perl -w
-#
-# usage: ../fyvzl [-lLENGTH] [-mMAXPERUSER] [-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;
our $maxperuser = 10000;
our $qualdom;
our $dbh;
+our $dom;
our $user;
our $priv;
print "# user $u ".(isdisabled($u) ? 'disabled' : 'enabled')."\n";
$last_u = $u;
}
+ my $pa = $row->{'localpart'};
+ $pa .= '@'.$dom if defined $dom;
if (defined $row->{'redirect'}) {
- print "$row->{'localpart'}: $row->{'redirect'}\n";
+ print "$pa: $row->{'redirect'}\n";
} else {
- print "# reject $row->{'localpart'}\n";
+ print "# reject $pa\n";
}
}
$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 (;;) {
$dbh->commit;
}
+sub action_list_actions {
+ print $usage2 or die $!;
+}
+
while (@ARGV) {
last unless $ARGV[0] =~ m/^-/;
$_ = shift @ARGV;
$randlength = $1;
} elsif (m/^-m(\d+)$/) {
$maxperuser = $1;
+ } elsif (m/^-d(\S+)$/) {
+ $dom = $1;
} elsif (m/^-q(\S+)$/) {
$qualdom = $1;
+ } elsif (m/^-h$/) {
+ print $usage1.$usage2 or die $!;
} else {
die "unknown option \`$_'\n";
}
$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 $!";