version 1.525, 2016/09/12 20:20:44
|
version 1.531, 2017/02/07 18:14:13
|
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).':'; |
} |
} |
Line 1819 sub read_lonnet_global {
|
Line 1901 sub read_lonnet_global {
|
); |
); |
my %limit_to = ( |
my %limit_to = ( |
perlvar => { |
perlvar => { |
lonOtherAuthen => 1, |
lonOtherAuthen => 1, |
lonBalancer => 1, |
lonBalancer => 1, |
lonVersion => 1, |
lonVersion => 1, |
lonSysEMail => 1, |
lonAdmEMail => 1, |
lonHostID => 1, |
lonSupportEMail => 1, |
lonRole => 1, |
lonSysEMail => 1, |
lonDefDomain => 1, |
lonHostID => 1, |
lonLoadLim => 1, |
lonRole => 1, |
lonUserLoadLim => 1, |
lonDefDomain => 1, |
|
lonLoadLim => 1, |
|
lonUserLoadLim => 1, |
} |
} |
); |
); |
if (ref($requested) eq 'HASH') { |
if (ref($requested) eq 'HASH') { |
Line 5667 sub auto_export_grades_handler {
|
Line 5751 sub auto_export_grades_handler {
|
# $cmd - The command that got us dispatched. |
# $cmd - The command that got us dispatched. |
# $tail - The tail of the command. In our case this is a colon |
# $tail - The tail of the command. In our case this is a colon |
# separated list that will be split into: |
# separated list that will be split into: |
# $filename - The name of the file to remove. |
# $filename - The name of the file to retrieve. |
# The filename is given as a path relative to |
# The filename is given as a path relative to |
# the LonCAPA temp file directory. |
# the LonCAPA temp file directory. |
# $client - Socket open on the client. |
# $client - Socket open on the client. |
Line 5684 sub retrieve_auto_file_handler {
|
Line 5768 sub retrieve_auto_file_handler {
|
|
|
if ($filename =~m{/\.\./}) { |
if ($filename =~m{/\.\./}) { |
&Failure($client, "refused\n", $userinput); |
&Failure($client, "refused\n", $userinput); |
|
} elsif ($filename !~ /^$LONCAPA::match_domain\_$LONCAPA::match_courseid\_.+_classlist\.xml$/) { |
|
&Failure($client, "refused\n", $userinput); |
} elsif ( (-e $source) && ($filename ne '') ) { |
} elsif ( (-e $source) && ($filename ne '') ) { |
my $reply = ''; |
my $reply = ''; |
if (open(my $fh,$source)) { |
if (open(my $fh,$source)) { |