X-Git-Url: https://git.treefish.org/fex.git/blobdiff_plain/e60096926213ce02293a261254ff065cae44c1c8..e5c93609849bda051fff54b5d5265af5608c6c69:/bin/fac diff --git a/bin/fac b/bin/fac index cec687a..1458ef8 100755 --- a/bin/fac +++ b/bin/fac @@ -43,7 +43,7 @@ unless ($<) { 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); @@ -79,7 +79,7 @@ warn "WARNING: $spooldir with owner=root !?\n" unless $stat[4]; 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; @@ -97,7 +97,7 @@ if (${'opt_/'}) { 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} $_; @@ -159,14 +159,14 @@ if ($opt_m) { 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); @@ -198,7 +198,7 @@ if ($opt_M) { # 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"; @@ -209,8 +209,8 @@ if ($opt_l) { 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; @@ -225,7 +225,7 @@ if ($opt_L) { 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; @@ -238,7 +238,7 @@ if ($opt_L) { $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; @@ -248,7 +248,7 @@ if ($opt_L) { exit; } -# delete user +# delete user if ($opt_d) { $idf = "$spooldir/$opt_d/\@"; die "$0: no such user $opt_d\n" unless -f $idf; @@ -297,7 +297,7 @@ if ($opt_r) { EOD } elsif ($opt_r eq 'UPLOAD_HOSTS') { print {$rf}<$fph" or die "$0: cannot write to $fph - $!\n"; print {$fph} $_; close $fph; - system "cp $FEXLIB/fup.pl $vhd/lib/fup.pl"; + cpa("$FEXLIB/fup.pl","$vhd/lib"); foreach $i (qw'dop fex.pp fup.pl lf.pl reactivation.txt') { # symlink "$FEXLIB/$i","$vhd/lib/$i"; symlink "../../lib/$i","$vhd/lib/$i"; @@ -477,7 +477,7 @@ if ($opt_a) { 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". @@ -498,7 +498,7 @@ if ($opt_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". @@ -588,18 +588,15 @@ if ($opt_y) { 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; } @@ -655,14 +652,19 @@ sub showuser { 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", @@ -702,17 +704,13 @@ sub quota { $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); } @@ -721,7 +719,7 @@ sub fupstat { 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"; @@ -758,7 +756,7 @@ sub fopstat { 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"; @@ -799,7 +797,7 @@ sub cpa { 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"; @@ -824,7 +822,7 @@ sub check_admin { 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"; @@ -869,7 +867,8 @@ $0 -rr user # edit user recipients restriction $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) @@ -886,10 +885,10 @@ $0 -L [filter] # list pending files in detail $0 -M # list pending files with TO/FROM/FILE $0 -M TO/FROM/FILE # resend notification email $0 -m "reason" # enter maintenance mode (reason "exit" to leave) -$0 -A alias:hostname # add new virtual server -$0 -V virtualhost ... # operations on virtualhost (alias or hostname) $0 -E # show usage examples EOD +# $0 -A alias:hostname # add new virtual server +# $0 -V virtualhost ... # operations on virtualhost (alias or hostname) if (-x "$FEXHOME/cgi-bin/fac") { print "See also web admin interface $proto://$hostname$port/fac\n"; }