Index: ossp-pkg/tabea/tabea.cgi RCS File: /v/ossp/cvs/ossp-pkg/tabea/tabea.cgi,v rcsdiff -q -kk '-r1.16' '-r1.17' -u '/v/ossp/cvs/ossp-pkg/tabea/tabea.cgi,v' 2>/dev/null --- 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|
\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 @@ " " . $cgi->scrolling_list( -name => 'templatelist', - -value => [@templatesarray], + -value => [@@templatesarray], -size => 3 ) . " " . @@ -200,7 +201,7 @@ " " . $cgi->scrolling_list( -name => 'configslist', - -value => [@configsarray], + -value => [@@configsarray], -size => 10 ) . " " . @@ -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') . "
"; + $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)) . - "Missing filename

\n" . + "Missing iilename

\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= "" . "New File:

\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= "" . + "Changing rights of file:

" ; + + if ($namefile ne '') { + $namefile =~ m{^([a-zA-Z0-9!"£$%^&*()-_=+#~]+)/(.+)}sg; + if ($1 eq $user) { + $text .= "" . + "" . + " " . + " " . + "" . + "
" . + $cgi->textfield($fnamehash). + " " . + $cgi->scrolling_list( + -name => 'changerights', + -value => ['private', 'protected', 'public'], + -default => $defaultright, + -size => 1 + ) . + "
" . + "

" . + $cgi->submit(-name => 'dialog', -value => 'Back') . + $cgi->submit(-name => 'dialog', -value => 'Change_rights'); + } else { + $text .= "You can only change file rights in your directory

\n" . + $cgi->submit(-name => 'dialog', -value => 'Back'); + } + } else { + + $text .= "Missing filename

\n" . + $cgi->submit(-name => 'dialog', -value => 'Back'); + } + + return $text; +} +######################################################################################## + + +######################################################################################## +sub change_rights { +######################################################################################## + my ( $filename, $newrights ) = @@_; + my $text = ''; + my $filerights = ''; + + $text= "" . + "Changing rights of file:
" . + "
" . + "
$filename to $newrights
"; + 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
Rights: $filerights
" ; + system("chmod o=$filerights $filename") && die "Cannot set new file rights"; + $text .= "
Done.

" . + $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 ;