umask 077;
# import from fex.pp
-our ($FEXHOME,$FHS,$hostname,$spooldir,@logdir,$akeydir,$docdir);
+our ($FEXHOME,$FHS,$hostname,$spooldir,@logdir,$logdir,$akeydir,$docdir);
our ($durl,@durl,$mdomain,$admin,$mailmode);
our ($autodelete,$keep_default,$keep_max,$recipient_quota,$sender_quota);
our (@local_rdomains);
if (abs_path($spooldir) ne abs_path("$FEXHOME/spool")) {
warn "WARNING: \$spooldir differs from $FEXHOME/spool !\n";
}
-
+
getopts('hcvlLwuMRE/q:r:d:a:n:k:m:y:S:C:A:V:D:P:') or usage(2);
usage(0) if $opt_h;
examples() if $opt_E;
close $aa or die "$0: cannot write $aa - $!\n";
my $fph = "$FEXLIB/fex.ph";
$_ = slurp($fph) or die "$0: cannot read $fph\n";
- s/^\s*\$admin\s*=.*/\$admin = '$admin';/m or
+ s/^\s*\$admin\s*=.*/\$admin = '$admin';/m or
$_ = "\$admin = '$admin';\n".$_;
open $fph,">$fph.new" or die "$0: cannot write $fph.new\n";
print {$fph} $_;
if ($opt_M) {
my ($mtime,$comment,$file,$keep);
local $_;
-
+
if (@ARGV) {
foreach $file (glob("@ARGV")) {
$mtime = mtime("$file/data") or next;
$comment = slurp("$file/comment")||'';
next if $comment =~ /NOMAIL/;
- $keep = readlink "$file/keep"
- || readlink "$file/../../\@KEEP"
+ $keep = readlink "$file/keep"
+ || readlink "$file/../../\@KEEP"
|| $keep_default;
$keep = $keep - int((time-mtime("$file/data"))/60/60/24);
# show logfile
if ($opt_w) {
- $log = $logdir[0]."/fexsrv.log";
+ $log = "$logdir/fexsrv.log";
warn "$0: polling $log\n\n";
exec "$FEXHOME/bin/logwatch",$log;
die "$0: logwatch not found\n";
my ($file,$dkey,@L);
chdir $spooldir or die "$0: $spooldir - $!\n";
foreach $file (glob "*/*/*") {
- if (-s "$file/data" and
- $dkey = readlink("$file/dkey") and
+ if (-s "$file/data" and
+ $dkey = readlink("$file/dkey") and
-l ".dkeys/$dkey"
) {
push @L,sprintf "%2\$s --> %1\$s : $durl/$dkey/%3\$s\n",split "/",$file;
my $filter = shift;
my ($comment,$file,$keep,$old,$size,$download);
local $_;
-
+
foreach $file (glob "*/*/*/data") {
next if $file =~ m:(.+?)/: and -l $1;
$size = -s $file or next;
$download = join(' & ',split("\n",(slurp("$file/download")||'')));
print "\n$file\n";
printf " comment: %s\n",decode_utf8($comment);
- printf " size: %s\n",d3($size);
+ printf " size: %s\n",d3($size);
printf " sender ip: %s\n",readlink("$file/ip")||'';
printf " expire in: %s days\n",$keep-$old;
printf " upload speed: %s kB/s\n",readlink("$file/speed")||0;
exit;
}
-# delete user
+# delete user
if ($opt_d) {
$idf = "$spooldir/$opt_d/\@";
die "$0: no such user $opt_d\n" unless -f $idf;
EOD
} elsif ($opt_r eq 'UPLOAD_HOSTS') {
print {$rf}<<EOD;
-# Restrict allowed upload hosts.
+# Restrict allowed upload hosts.
# Only listed addresses are allowed as upload hosts.
# Make this file COMPLETLY empty if you want to disable the restriction.
# You can add single ip adresses or ip ranges.
EOD
} elsif ($opt_r eq 'DOWNLOAD_HOSTS') {
print {$rf}<<EOD;
-# Restrict allowed download hosts.
+# Restrict allowed download hosts.
# Only listed addresses are allowed as download hosts.
# Make this file COMPLETLY empty if you want to disable the restriction.
# You can add single ip adresses or ip ranges.
# add virtual server
if ($opt_A) {
- if ($opt_A =~ /(.+):(.+)/) {
+ if ($opt_A =~ /(.+):(.+)/) {
$vhost = $1;
$hhost = $2;
- } else {
+ } else {
die "usage: $0 -A alias:hostname\n".
"example: $0 -A flupp:fex.flupp.org\n";
}
if (/^n/i) { $autodelete = 'no' }
elsif (/^y/i) { $autodelete = 'yes' }
elsif (/^d/i) { $autodelete = 'delay' }
- else {
+ else {
die "usage: $0 -a user yes\n".
"usage: $0 -a user no\n".
"usage: $0 -a user delay\n".
if (/^n/i) { $notification = 'no' }
elsif (/^[sb]/i) { $notification = 'short' }
elsif (/^[fd]/i) { $notification = '' }
- else {
+ else {
die "usage: $0 -n user no\n".
"usage: $0 -n user brief\n".
"usage: $0 -n user detailed\n".
if ($opt_D) {
$user = lc $opt_D;
$user .= '@'.$mdomain if $mdomain and $user !~ /@/;
- $_ = shift @ARGV || '';
- if (/^y/i) {
- open $user,">>$spooldir/$user/\@DISABLED";
- close $user;
- print "$user is now disabled\n";
- } elsif (/^n/i) {
+ $_ = $ARGV[0] || '';
+ if (/^no?$/i) {
unlink "$spooldir/$user/\@DISABLED";
print "$user is now enabled\n";
} else {
- die "usage: $0 -D user yes\n".
- "usage: $0 -D user no\n".
- "example: $0 -D framstag\@rus.uni-stuttgart.de no\n";
+ open $user,">>$spooldir/$user/\@DISABLED";
+ print {$user} "@ARGV\n";
+ close $user;
+ print "$user is now disabled\n";
}
exit;
}
print "login: DELETED\n";
}
}
+ my $disabled = 'no';
+ if (-e "$spooldir/$user/\@DISABLED") {
+ $disabled = slurp("$spooldir/$user/\@DISABLED");
+ chomp $disabled;
+ $disabled ||= 'yes';
+ }
printf "fex yourself web default: %s\n",
-e "$spooldir/$user/\@FEXYOURSELF" ? 'yes' : 'no';
printf "persistent: %s\n",
-e "$spooldir/$user/\@PERSISTENT" ? 'yes' : 'no';
printf "captive: %s\n",
-e "$spooldir/$user/\@CAPTIVE" ? 'yes' : 'no';
- printf "disabled: %s\n",
- -e "$spooldir/$user/\@DISABLED" ? 'yes' : 'no';
+ printf "disabled: %s\n",$disabled;
printf "recipients restrictions: %s\n",
-e "$spooldir/$user/\@ALLOWED_RECIPIENTS" ? 'yes' : 'no';
printf "upload restrictions: %s\n",
$squota = $1 if /^s.*:(\d*)/i;
}
open $qf,'>',$qf or die "$0: cannot write $qf - $!\n";
- print {$qf} "recipient:$rquota\n" if $rquota =~ /\d/;
- print {$qf} "sender:$squota\n" if $squota =~ /\d/;
+ print {$qf} "recipient:$rquota\n" if $rquota;
+ print {$qf} "sender:$squota\n" if $squota;
close $qf;
}
- $rquota = $recipient_quota if $rquota !~ /\d/;
- $squota = $sender_quota if $squota !~ /\d/;
- printf "recpient quota (used): %d (%d) MB\n",
- check_recipient_quota($user) if $rquota;
- printf "sender quota (used): %d (%d) MB\n",
- check_sender_quota($user) if $squota;
+ printf "recpient quota (used): %d (%d) MB\n",check_recipient_quota($user);
+ printf "sender quota (used): %d (%d) MB\n",check_sender_quota($user);
}
my ($log,$u,$d,$z);
my $Z = 0;
- if (-t) { $log = $logdir[0].'/fup.log' }
+ if (-t) { $log = "$logdir/fup.log" }
else { $log = '>&=STDIN' }
open $log,$log or die "$0: cannot open $log - $!\n";
my ($log,$u,$d,$z);
my (%user,%domain,%du);
- if (-t) { $log = $logdir[0].'/fop.log' }
+ if (-t) { $log = "$logdir/fop.log" }
else { $log = '>&=STDIN' }
open $log,$log or die "$0: cannot open $log - $!\n";
sub check_admin {
-
+
my $admin_id = slurp("$spooldir/$admin/@") or
die "$0: no admin account - you have to create it with:\n".
"$0 -/ $admin ".randstring(8)."\n";
warn "$0: moving $fid to ${fid}_save\n";
rename $fid,$fid.'_save';
}
- }
+ }
unless (-f $fid) {
mkdir dirname($fid);
open $fid,'>',$fid or die "$0: cannot create $fid - $!\n";
$0 -ru user # edit user upload restriction
$0 -rd user # edit user download restriction
$0 -d user # delete user
-$0 -D user [yn] # disable user (yes,no)
+$0 -D user "reason" # disable user
+$0 -D user "no" # re-enable user
$0 -P user [yn] # make user persistent = no account expiration (yes,no)
$0 -a user [ynd] # set user autodelete default (yes,no,delay)
$0 -n user [dbn] # set user notification default (detailed,brief,no)