#!/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;
$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;
$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 $!";