version 1.526, 2016/09/20 23:48:07
|
version 1.529, 2016/09/24 15:35:25
|
Line 267 my %trust = (
|
Line 267 my %trust = (
|
restore => {remote => 1, enroll => 1, reqcrs => 1,}, |
restore => {remote => 1, enroll => 1, reqcrs => 1,}, |
rolesdel => {remote => 1, enroll => 1, domroles => 1, coaurem => 1}, |
rolesdel => {remote => 1, enroll => 1, domroles => 1, coaurem => 1}, |
rolesput => {remote => 1, enroll => 1, domroles => 1, coaurem => 1}, |
rolesput => {remote => 1, enroll => 1, domroles => 1, coaurem => 1}, |
serverdistarch => {manageronly => 1}, |
servercerts => {institutiononly => 1}, |
|
serverdistarch => {anywhere => 1}, |
serverhomeID => {anywhere => 1}, |
serverhomeID => {anywhere => 1}, |
serverloncaparev => {anywhere => 1}, |
serverloncaparev => {anywhere => 1}, |
servertimezone => {remote => 1, enroll => 1}, |
servertimezone => {remote => 1, enroll => 1}, |
Line 1567 sub du2_handler {
|
Line 1568 sub du2_handler {
|
# selected directory the filename followed by the full output of |
# selected directory the filename followed by the full output of |
# the stat function is returned. The returned info for each |
# the stat function is returned. The returned info for each |
# file are separated by ':'. The stat fields are separated by &'s. |
# file are separated by ':'. The stat fields are separated by &'s. |
|
# |
|
# If the requested path contains /../ or is: |
|
# |
|
# 1. for a directory, and the path does not begin with one of: |
|
# (a) /home/httpd/html/res/<domain>/ |
|
# (b) /home/httpd/html/res/userfiles/ |
|
# (c) /home/httpd/lonUsers/<domain>/<1>/<2>/<3>/<username>/userfiles |
|
# or is: |
|
# |
|
# 2. for a file, and the path (after prepending) does not begin with: |
|
# /home/httpd/lonUsers/<domain>/<1>/<2>/<3>/<username>/ |
|
# |
|
# the response will be "refused". |
|
# |
# Parameters: |
# Parameters: |
# $cmd - The command that dispatched us (ls). |
# $cmd - The command that dispatched us (ls). |
# $ulsdir - The directory path to list... I'm not sure what this |
# $ulsdir - The directory path to list... I'm not sure what this |
Line 1588 sub ls_handler {
|
Line 1603 sub ls_handler {
|
my $rights; |
my $rights; |
my $ulsout=''; |
my $ulsout=''; |
my $ulsfn; |
my $ulsfn; |
|
if ($ulsdir =~m{/\.\./}) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
if (-e $ulsdir) { |
if (-e $ulsdir) { |
if(-d $ulsdir) { |
if(-d $ulsdir) { |
|
unless (($ulsdir =~ m{/home/httpd/html/(res/$LONCAPA::match_domain|userfiles)/}) || |
|
($ulsdir =~ m{/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_username/userfiles/})) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
if (opendir(LSDIR,$ulsdir)) { |
if (opendir(LSDIR,$ulsdir)) { |
while ($ulsfn=readdir(LSDIR)) { |
while ($ulsfn=readdir(LSDIR)) { |
undef($obs); |
undef($obs); |
Line 1613 sub ls_handler {
|
Line 1637 sub ls_handler {
|
closedir(LSDIR); |
closedir(LSDIR); |
} |
} |
} else { |
} else { |
|
unless ($ulsdir =~ m{/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_username/}) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
my @ulsstats=stat($ulsdir); |
my @ulsstats=stat($ulsdir); |
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
} |
} |
Line 1637 sub ls_handler {
|
Line 1665 sub ls_handler {
|
# selected directory the filename followed by the full output of |
# selected directory the filename followed by the full output of |
# the stat function is returned. The returned info for each |
# the stat function is returned. The returned info for each |
# file are separated by ':'. The stat fields are separated by &'s. |
# file are separated by ':'. The stat fields are separated by &'s. |
|
# |
|
# If the requested path contains /../ or is: |
|
# |
|
# 1. for a directory, and the path does not begin with one of: |
|
# (a) /home/httpd/html/res/<domain>/ |
|
# (b) /home/httpd/html/res/userfiles/ |
|
# (c) /home/httpd/lonUsers/<domain>/<1>/<2>/<3>/<username>/userfiles |
|
# or is: |
|
# |
|
# 2. for a file, and the path (after prepending) does not begin with: |
|
# /home/httpd/lonUsers/<domain>/<1>/<2>/<3>/<username>/ |
|
# |
|
# the response will be "refused". |
|
# |
# Parameters: |
# Parameters: |
# $cmd - The command that dispatched us (ls). |
# $cmd - The command that dispatched us (ls). |
# $ulsdir - The directory path to list... I'm not sure what this |
# $ulsdir - The directory path to list... I'm not sure what this |
Line 1657 sub ls2_handler {
|
Line 1699 sub ls2_handler {
|
my $rights; |
my $rights; |
my $ulsout=''; |
my $ulsout=''; |
my $ulsfn; |
my $ulsfn; |
|
if ($ulsdir =~m{/\.\./}) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
if (-e $ulsdir) { |
if (-e $ulsdir) { |
if(-d $ulsdir) { |
if(-d $ulsdir) { |
|
unless (($ulsdir =~ m{/home/httpd/html/(res/$LONCAPA::match_domain|userfiles)/}) || |
|
($ulsdir =~ m{/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_username/userfiles/})) { |
|
&Failure($client,"refused\n","$userinput"); |
|
return 1; |
|
} |
if (opendir(LSDIR,$ulsdir)) { |
if (opendir(LSDIR,$ulsdir)) { |
while ($ulsfn=readdir(LSDIR)) { |
while ($ulsfn=readdir(LSDIR)) { |
undef($obs); |
undef($obs); |
Line 1683 sub ls2_handler {
|
Line 1734 sub ls2_handler {
|
closedir(LSDIR); |
closedir(LSDIR); |
} |
} |
} else { |
} else { |
|
unless ($ulsdir =~ m{/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_username/}) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
my @ulsstats=stat($ulsdir); |
my @ulsstats=stat($ulsdir); |
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
} |
} |
Line 1699 sub ls2_handler {
|
Line 1754 sub ls2_handler {
|
# selected directory the filename followed by the full output of |
# selected directory the filename followed by the full output of |
# the stat function is returned. The returned info for each |
# the stat function is returned. The returned info for each |
# file are separated by ':'. The stat fields are separated by &'s. |
# file are separated by ':'. The stat fields are separated by &'s. |
|
# |
|
# If the requested path (after prepending) contains /../ or is: |
|
# |
|
# 1. for a directory, and the path does not begin with one of: |
|
# (a) /home/httpd/html/res/<domain>/ |
|
# (b) /home/httpd/html/res/userfiles/ |
|
# (c) /home/httpd/lonUsers/<domain>/<1>/<2>/<3>/<username>/userfiles |
|
# (d) /home/httpd/html/priv/<domain>/ and client is the homeserver |
|
# |
|
# or is: |
|
# |
|
# 2. for a file, and the path (after prepending) does not begin with: |
|
# /home/httpd/lonUsers/<domain>/<1>/<2>/<3>/<username>/ |
|
# |
|
# the response will be "refused". |
|
# |
# Parameters: |
# Parameters: |
# $cmd - The command that dispatched us (ls). |
# $cmd - The command that dispatched us (ls). |
# $tail - The tail of the request that invoked us. |
# $tail - The tail of the request that invoked us. |
Line 1738 sub ls3_handler {
|
Line 1809 sub ls3_handler {
|
} |
} |
|
|
my $dir_root = $perlvar{'lonDocRoot'}; |
my $dir_root = $perlvar{'lonDocRoot'}; |
if ($getpropath) { |
if (($getpropath) || ($getuserdir)) { |
if (($uname =~ /^$LONCAPA::match_name$/) && ($udom =~ /^$LONCAPA::match_domain$/)) { |
if (($uname =~ /^$LONCAPA::match_name$/) && ($udom =~ /^$LONCAPA::match_domain$/)) { |
$dir_root = &propath($udom,$uname); |
$dir_root = &propath($udom,$uname); |
$dir_root =~ s/\/$//; |
$dir_root =~ s/\/$//; |
} else { |
} else { |
&Failure($client,"refused\n","$cmd:$tail"); |
&Failure($client,"refused\n",$userinput); |
return 1; |
|
} |
|
} elsif ($getuserdir) { |
|
if (($uname =~ /^$LONCAPA::match_name$/) && ($udom =~ /^$LONCAPA::match_domain$/)) { |
|
my $subdir=$uname.'__'; |
|
$subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; |
|
$dir_root = $Apache::lonnet::perlvar{'lonUsersDir'} |
|
."/$udom/$subdir/$uname"; |
|
} else { |
|
&Failure($client,"refused\n","$cmd:$tail"); |
|
return 1; |
return 1; |
} |
} |
} elsif ($alternate_root ne '') { |
} elsif ($alternate_root ne '') { |
Line 1766 sub ls3_handler {
|
Line 1827 sub ls3_handler {
|
$ulsdir = $dir_root.'/'.$ulsdir; |
$ulsdir = $dir_root.'/'.$ulsdir; |
} |
} |
} |
} |
|
if ($ulsdir =~m{/\.\./}) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
|
my $islocal; |
|
my @machine_ids = &Apache::lonnet::current_machine_ids(); |
|
if (grep(/^\Q$clientname\E$/,@machine_ids)) { |
|
$islocal = 1; |
|
} |
my $obs; |
my $obs; |
my $rights; |
my $rights; |
my $ulsout=''; |
my $ulsout=''; |
my $ulsfn; |
my $ulsfn; |
if (-e $ulsdir) { |
if (-e $ulsdir) { |
if(-d $ulsdir) { |
if(-d $ulsdir) { |
|
unless (($getpropath) || ($getuserdir) || |
|
($ulsdir =~ m{/home/httpd/html/(res/$LONCAPA::match_domain|userfiles)/}) || |
|
($ulsdir =~ m{/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_username/userfiles/}) || |
|
(($ulsdir =~ m{/home/httpd/html/priv/$LONCAPA::match_domain/}) && ($islocal))) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
if (opendir(LSDIR,$ulsdir)) { |
if (opendir(LSDIR,$ulsdir)) { |
while ($ulsfn=readdir(LSDIR)) { |
while ($ulsfn=readdir(LSDIR)) { |
undef($obs); |
undef($obs); |
Line 1796 sub ls3_handler {
|
Line 1873 sub ls3_handler {
|
closedir(LSDIR); |
closedir(LSDIR); |
} |
} |
} else { |
} else { |
|
unless (($getpropath) || ($getuserdir) || |
|
($ulsdir =~ m{/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_username/})) { |
|
&Failure($client,"refused\n",$userinput); |
|
return 1; |
|
} |
my @ulsstats=stat($ulsdir); |
my @ulsstats=stat($ulsdir); |
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
$ulsout.=$ulsfn.'&'.join('&',@ulsstats).':'; |
} |
} |