--- tabea.cgi 2002/05/14 15:34:02 1.16
+++ tabea.cgi 2002/05/15 11:47:41 1.17
@@ -27,6 +27,7 @@
##
## tabea.cgi: Tabea CGI (syntax: Perl)
##
+##
require 5.000;
use strict;
@@ -40,7 +41,6 @@
my $pwdfile = "./tabea.pw";
my $configsdir = "./tabea.d";
-#my $tabeauser = "tabea";
# establish my configuration
@@ -56,7 +56,7 @@
# activate a general error handler
$SIG{__DIE__} = sub {
- my ($err) = @_;
+ my ($err) = @@_;
#$err =~ s|at\s+\S+\s+line\s+(\d+)|(line $1)|s;
$err =~ s|\n|<br>\n|sg;
@@ -68,12 +68,11 @@
};
-
# update cookies
my $cookies = [];
foreach my $param (qw(username)) { # FIXME!
if ($cgi->param($param) ne '' and ($cgi->param($param) ne $cgi->cookie($param))) {
- push(@{$cookies}, $cgi->cookie(
+ push(@@{$cookies}, $cgi->cookie(
-name => $param,
-value => $cgi->param($param),
-expires => '+1d',
@@ -91,10 +90,12 @@
#print "Test: $cfghash{'TabeaUser'}\n";
+
# fetch parameters
my $dialog = $cgi->param("dialog") || "";
my $username = $cgi->param("username") || "";
my $password = $cgi->param("password") || "";
+my $filename = $cgi->param("filename") || "";
my $page = '';
@@ -153,8 +154,8 @@
$templatesfiles = &strsort($templatesfiles);
$configsfiles = &strsort($configsfiles);
- my @templatesarray = split(/ /,$templatesfiles);
- my @configsarray = split(/ /,$configsfiles);
+ my @@templatesarray = split(/ /,$templatesfiles);
+ my @@configsarray = split(/ /,$configsfiles);
#
@@ -169,7 +170,7 @@
" <td>" .
$cgi->scrolling_list(
-name => 'templatelist',
- -value => [@templatesarray],
+ -value => [@@templatesarray],
-size => 3
) .
" </td>" .
@@ -200,7 +201,7 @@
" <td>" .
$cgi->scrolling_list(
-name => 'configslist',
- -value => [@configsarray],
+ -value => [@@configsarray],
-size => 10
) .
" </td>" .
@@ -258,11 +259,23 @@
$page .= &newfile($cfghash{'BaseDir'} . $cfghash{'ConfigDir'}, $username, $cgi->param('newfile'), $cgi->param('new_rights'));
$page .= $cgi->endform;
}
-
-else {
- die "invalid dialog \"$dialog\"";
+elsif ($dialog eq 'Config_rights') {
+ $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
+ my $configfile;
+ if (! defined $cgi->param('configslist') ) {
+ $configfile = '';
+ } else {
+ $configfile = $cgi->param('configslist');
+ }
+ $page .= &config_rights($configfile, $username);
+ # $page .= "Returnvalue: " . $cgi->param('filename') . "<br>";
+ $page .= $cgi->endform;
+}
+elsif ($dialog eq 'Change_rights') {
+ $page .= $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1));
+ $page .= &change_rights($cfghash{'BaseDir'} . $cfghash{'ConfigDir'} . "/" . $cgi->param('filename'), $cgi->param('changerights') );
+ $page .= $cgi->endform;
}
-
} else {
die "no configuration found";
}
@@ -279,22 +292,22 @@
########################################################################################
sub get_name_files {
########################################################################################
- my ($dirname, $user, $rights) = @_;
+ my ($dirname, $user, $rights) = @@_;
my $filel = '';
- my @filelarray;
+ my @@filelarray;
my $filelist = '';
my $subdir = '';
my $filemode = '';
my $entry = '';
my $dirlist = &readsubdir($dirname . "/" );
- my @dirarray = split (/ /, $dirlist);
+ my @@dirarray = split (/ /, $dirlist);
- DIR: foreach $subdir (@dirarray) {
+ DIR: foreach $subdir (@@dirarray) {
next DIR if $subdir eq $user;
$filel = &readdir($dirname . "/" . $subdir . "/") ;
- @filelarray = split (/ /, $filel);
- FILE: foreach $entry (@filelarray) {
+ @@filelarray = split (/ /, $filel);
+ FILE: foreach $entry (@@filelarray) {
my $path = $dirname . "/" . $subdir . "/" . $entry;
next FILE if (((stat($dirname . "/" . $subdir . "/" . $entry))[2]) & 07) != $rights;
$filelist .= $subdir . "/" . $entry . " ";
@@ -309,14 +322,14 @@
########################################################################################
sub get_own_files {
########################################################################################
- my ($dirname, $user) = @_;
+ my ($dirname, $user) = @@_;
my $filelist = '';
my $entry = '';
my $flist = &readdir($dirname . "/" . $user . "/");
- my @flistarray = split (/ /,$flist);
+ my @@flistarray = split (/ /,$flist);
- foreach $entry (@flistarray) {
+ foreach $entry (@@flistarray) {
$filelist .= $user . "/" . $entry . " ";
}
@@ -328,7 +341,7 @@
########################################################################################
sub edit {
########################################################################################
- my ($file) = @_;
+ my ($file) = @@_;
my $text;
# enter Edit form
if($file) {
@@ -336,7 +349,7 @@
&editconfig($filename, 'w', $username);
} else {
$text = $cgi->startform( -method => "POST", -action => $cgi->url(-full => 1)) .
- "<font color=red>Missing filename<br><br>\n" .
+ "<font color=red>Missing iilename<br><br>\n" .
$cgi->submit(-name => 'dialog', -value => 'Back') .
$cgi->endform;
}
@@ -348,7 +361,7 @@
########################################################################################
sub view {
########################################################################################
- my ($file) = @_;
+ my ($file) = @@_;
my $text;
if ($file) {
@@ -368,8 +381,8 @@
#########################################################################################
sub new {
########################################################################################
- my ( $dirname, $user ) = @_;
- my $text;
+ my ( $dirname, $user ) = @@_;
+ my $text = '';
$text= "<font size=+2>" .
"New File:<br><br>\n" .
@@ -416,11 +429,12 @@
return $text;
}
+
########################################################################################
sub newfile {
########################################################################################
- my ( $dirname, $user, $newfilename, $newrights ) = @_;
- my $text;
+ my ( $dirname, $user, $newfilename, $newrights ) = @@_;
+ my $text = '';
my $newpath = $dirname . "/" . $user . "/" . $newfilename;
my $filerights = '';
@@ -451,11 +465,105 @@
########################################################################################
+
+########################################################################################
+sub config_rights {
+########################################################################################
+ my ( $namefile, $user ) = @@_;
+ my $text = '';
+ my $defaultright = '';
+ my $filerights = stat( (($namefile)[2]) & 07 );
+ my $fnamehash ={ -name => 'filename',
+ -default => $namefile,
+ -size => 20,
+ -maxlength => 30
+ };
+ $fnamehash->{readonly}="";
+
+# $text .= $cgi->hidden(-name => 'filename', -default => ['xxx', 'xxx2'] ) ;
+ if ( $filerights == 6 ) {
+ $defaultright = "public" ;
+ } elsif ( $filerights == 4 ) {
+ $defaultright = "protected" ;
+ } else {
+ $defaultright = "private" ;
+ }
+
+ $text= "<font size=+2>" .
+ "Changing rights of file:<br><br>" ;
+
+ if ($namefile ne '') {
+ $namefile =~ m{^([a-zA-Z0-9!"£$%^&*()-_=+#~]+)/(.+)}sg;
+ if ($1 eq $user) {
+ $text .= "<table>" .
+ "<tr>" .
+ " <td>" .
+ $cgi->textfield($fnamehash).
+ " </td>" .
+ " <td>" .
+ $cgi->scrolling_list(
+ -name => 'changerights',
+ -value => ['private', 'protected', 'public'],
+ -default => $defaultright,
+ -size => 1
+ ) .
+ " </td>" .
+ "</tr>" .
+ "</table>" .
+ "<br><br>" .
+ $cgi->submit(-name => 'dialog', -value => 'Back') .
+ $cgi->submit(-name => 'dialog', -value => 'Change_rights');
+ } else {
+ $text .= "<font color=red>You can only change file rights in your directory<br><br>\n" .
+ $cgi->submit(-name => 'dialog', -value => 'Back');
+ }
+ } else {
+
+ $text .= "<font color=red>Missing filename<br><br>\n" .
+ $cgi->submit(-name => 'dialog', -value => 'Back');
+ }
+
+ return $text;
+}
+########################################################################################
+
+
+########################################################################################
+sub change_rights {
+########################################################################################
+ my ( $filename, $newrights ) = @@_;
+ my $text = '';
+ my $filerights = '';
+
+ $text= "<font size=+2>" .
+ "Changing rights of file:<br>" .
+ "</font>" .
+ "<br><font size=+1> $filename </font> to <font size=+1> $newrights </font><br>";
+ if ($newrights eq "private" ) {
+ $filerights = '';
+ } elsif ($newrights eq "protected" ) {
+ $filerights = "r";
+ } elsif ($newrights eq "public" ) {
+ $filerights = "rw";
+ } else {
+ die "Unknown file rights";
+ }
+# $text .= "Name : $filename<br>Rights: $filerights<br>" ;
+ system("chmod o=$filerights $filename") && die "Cannot set new file rights";
+ $text .= "<br>Done.<br><br>" .
+ $cgi->submit(-name => 'dialog', -value => 'Back');
+
+ return $text;
+}
+########################################################################################
+
+
+
########################################################################################
sub read_config {
########################################################################################
-my ($cfgfile) = @_;
+my ($cfgfile) = @@_;
my %cfghash ;
my $cfgin ;
my $key;
@@ -493,7 +601,7 @@
########################################################################################
sub validpassword {
########################################################################################
- my ($username, $password) = @_;
+ my ($user, $password) = @@_;
my $returnvalue = 0;
my $uname;
@@ -504,7 +612,7 @@
if(defined $pwdin) {
while(<$pwdin>) {
$_ =~ s|^(\w+):(.+)$|{$uname=$1; $pwd=$2}|eg;
- ( $uname =~ $username ) && do { # check the password
+ ( $uname =~ $user ) && do { # check the password
if (crypt($password, $pwd) eq $pwd){
$returnvalue = 1;
}
@@ -522,7 +630,7 @@
########################################################################################
sub readsubdir {
########################################################################################
- my ( $dir ) = @_;
+ my ( $dir ) = @@_;
my $filestring = "";
my $direntry = "";
@@ -547,7 +655,7 @@
########################################################################################
sub readdir {
########################################################################################
- my ( $dir ) = @_;
+ my ( $dir ) = @@_;
my $filestring = "";
my $direntry = "";
@@ -571,12 +679,12 @@
########################################################################################
sub strsort {
########################################################################################
- my ( $sortstr ) = @_;
+ my ( $sortstr ) = @@_;
- my @sortarray = split (/ /, $sortstr);
+ my @@sortarray = split (/ /, $sortstr);
- @sortarray = reverse sort {$b cmp $a} @sortarray;
- $sortstr = join(" ", @sortarray);
+ @@sortarray = reverse sort {$b cmp $a} @@sortarray;
+ $sortstr = join(" ", @@sortarray);
return $sortstr;
}
@@ -589,7 +697,7 @@
########################################################################################
sub editconfig {
########################################################################################
- my ($file, $mode, $user) = @_;
+ my ($file, $mode, $user) = @@_;
my $text = '';
my $filein ;
my $readonly ;
|