version 1.581, 2024/06/22 14:29:36
|
version 1.583, 2024/12/27 02:32:56
|
Line 223 my %trust = (
|
Line 223 my %trust = (
|
courseidputhash => {remote => 1, domroles => 1, enroll => 1}, |
courseidputhash => {remote => 1, domroles => 1, enroll => 1}, |
courselastaccess => {remote => 1, domroles => 1, enroll => 1}, |
courselastaccess => {remote => 1, domroles => 1, enroll => 1}, |
coursesessions => {institutiononly => 1}, |
coursesessions => {institutiononly => 1}, |
|
crsfilefrompriv => {remote => 1, enroll => 1}, |
currentauth => {remote => 1, domroles => 1, enroll => 1}, |
currentauth => {remote => 1, domroles => 1, enroll => 1}, |
currentdump => {remote => 1, enroll => 1}, |
currentdump => {remote => 1, enroll => 1}, |
currentversion => {remote=> 1, content => 1}, |
currentversion => {remote=> 1, content => 1}, |
Line 1923 sub ls3_handler {
|
Line 1924 sub ls3_handler {
|
my $ulsout=''; |
my $ulsout=''; |
my $ulsfn; |
my $ulsfn; |
|
|
my ($crscheck,$toplevel,$currdom,$currnum,$skip); |
my ($crscheck,$toplevel,$currdom,$currnum,$skip,$privdir_for_course); |
unless ($islocal) { |
unless ($islocal) { |
my ($major,$minor) = split(/\./,$clientversion); |
my ($major,$minor) = split(/\./,$clientversion); |
if (($major < 2) || ($major == 2 && $minor < 12)) { |
if (($major < 2) || ($major == 2 && $minor < 12)) { |
$crscheck = 1; |
$crscheck = 1; |
} |
} |
|
if ($ulsdir =~ m{^/home/httpd/html/priv/($LONCAPA::match_domain)/($LONCAPA::match_courseid)}) { |
|
my ($currdom,$currnum) = ($1,$2); |
|
if (&LONCAPA::Lond::is_course($currdom,$currnum)) { |
|
$privdir_for_course = 1; |
|
} |
|
} |
} |
} |
if (-e $ulsdir) { |
if (-e $ulsdir) { |
if(-d $ulsdir) { |
if(-d $ulsdir) { |
unless (($getpropath) || ($getuserdir) || |
unless (($getpropath) || ($getuserdir) || |
($ulsdir =~ m{^/home/httpd/html/(res/$LONCAPA::match_domain|userfiles/)}) || |
($ulsdir =~ m{^/home/httpd/html/(res/$LONCAPA::match_domain|userfiles/)}) || |
($ulsdir =~ m{^/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_name/userfiles}) || |
($ulsdir =~ m{^/home/httpd/lonUsers/$LONCAPA::match_domain(?:/[\w\-.@]){3}/$LONCAPA::match_name/userfiles}) || |
(($ulsdir =~ m{^/home/httpd/html/priv/$LONCAPA::match_domain}) && ($islocal))) { |
(($ulsdir =~ m{^/home/httpd/html/priv/$LONCAPA::match_domain}) && ($islocal)) || |
|
($privdir_for_course)) { |
&Failure($client,"refused\n",$userinput); |
&Failure($client,"refused\n",$userinput); |
return 1; |
return 1; |
} |
} |
Line 2817 sub devalidate_meta_cache {
|
Line 2825 sub devalidate_meta_cache {
|
} |
} |
|
|
# |
# |
|
# Copy a file from /home/httpd/html/priv/domain/coursenum/ |
|
# to /home/httpd/html/userfiles/domain/coursenum/priv |
|
# |
|
# Parameters: |
|
# $cmd - The command that got us here. |
|
# $tail - Tail of the command |
|
# : separated list of escaped values for |
|
# (a) relative path to a file in /priv/domain/coursenum |
|
# (b) coursenum |
|
# (c) domain |
|
# $client - File descriptor connected to client. |
|
# Returns |
|
# 0 - Requested to exit, caller should shut down. |
|
# 1 - Continue processing. |
|
# |
|
|
|
sub crs_filefrompriv_handler { |
|
my ($cmd, $tail, $client) = @_; |
|
my $userinput = "$cmd:$tail"; |
|
my ($path,$cnum,$cdom) = map { &unescape($_); } split(/:/,$tail); |
|
$path =~ s/\.{2,}//g; |
|
if (($path eq '') || ($path eq '.')) { |
|
&Failure($client, "not_found\n", "$cmd:$tail"); |
|
} else { |
|
$cdom = &LONCAPA::clean_domain($cdom); |
|
$cnum = &LONCAPA::clean_courseid($cnum); |
|
if (&LONCAPA::Lond::is_course($cdom,$cnum)) { |
|
my $toplevel = "/userfiles/$cdom/$cnum/priv"; |
|
my $toppath = $perlvar{'lonDocRoot'}.$toplevel; |
|
my $dest = $toppath.'/'.$path; |
|
my $desturl = $toplevel.'/'.$path; |
|
my $src = $perlvar{'lonDocRoot'}.'/priv/'.$cdom.'/'.$cnum.'/'.$path; |
|
my ($dest_mtime, $src_mtime); |
|
if (-e $dest) { |
|
($dest_mtime) = (stat($dest))[9]; |
|
} |
|
if (-e $src) { |
|
my $protocol = $Apache::lonnet::protocol{$perlvar{'lonHostID'}}; |
|
$protocol = 'http' if ($protocol ne 'https'); |
|
my $url = $protocol.'://'.&Apache::lonnet::hostname($perlvar{'lonHostID'}).$desturl; |
|
($src_mtime) = (stat($src))[9]; |
|
if ((-e $dest) && ($dest_mtime >= $src_mtime)) { |
|
my $result = &escape($url); |
|
&Reply($client,\$result,$userinput); |
|
} else { |
|
my $reldir = $toplevel; |
|
my ($subdir,$fname) = ($path =~ m{^(.+)/([^/]+)$}); |
|
if ($subdir eq '') { |
|
$fname = $path; |
|
} else { |
|
$reldir .= '/'.$subdir; |
|
} |
|
my $targetdir = $perlvar{'lonDocRoot'}; |
|
my $dirfail; |
|
foreach my $part (split(/\//,$reldir)) { |
|
$targetdir .= '/'.$part; |
|
if ((-e $targetdir)!=1) { |
|
unless (mkdir($targetdir,0755)) { |
|
$dirfail = 1; |
|
last; |
|
} |
|
} |
|
} |
|
if ($dirfail) { |
|
&Failure($client,"error: mkdir_failed\n", $userinput); |
|
} else { |
|
if (File::Copy::copy($src,$dest)) { |
|
my $result = &escape($url); |
|
&Reply($client,\$result,$userinput); |
|
} else { |
|
&Failure($client,"error: copy_failed\n", $userinput); |
|
} |
|
} |
|
} |
|
} else { |
|
&Failure($client,"error: not_found\n", $userinput); |
|
} |
|
} else { |
|
&Failure($client, "error: not_course\n", $userinput); |
|
} |
|
} |
|
return 1; |
|
} |
|
®ister_handler("crsfilefrompriv", \&crs_filefrompriv_handler, 0, 1, 0); |
|
|
|
# |
# Fetch a user file from a remote server to the user's home directory |
# Fetch a user file from a remote server to the user's home directory |
# userfiles subdir. |
# userfiles subdir. |
# Parameters: |
# Parameters: |
Line 6150 sub enrollment_enabled_handler {
|
Line 6244 sub enrollment_enabled_handler {
|
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = $cmd.":".$tail; # For logging purposes. |
my $userinput = $cmd.":".$tail; # For logging purposes. |
|
|
|
|
my ($cdom) = split(/:/, $tail, 2); # Domain we're asking about. |
my ($cdom) = split(/:/, $tail, 2); # Domain we're asking about. |
|
my $outcome; |
my $outcome = &localenroll::run($cdom); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::run($cdom); |
|
}; |
&Reply($client, \$outcome, $userinput); |
&Reply($client, \$outcome, $userinput); |
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0); |
®ister_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0); |
Line 6188 sub validate_instcode_handler {
|
Line 6283 sub validate_instcode_handler {
|
my ($dom,$instcode,$owner) = split(/:/, $tail); |
my ($dom,$instcode,$owner) = split(/:/, $tail); |
$instcode = &unescape($instcode); |
$instcode = &unescape($instcode); |
$owner = &unescape($owner); |
$owner = &unescape($owner); |
my ($outcome,$description,$credits) = |
my ($outcome,$description,$credits); |
&localenroll::validate_instcode($dom,$instcode,$owner); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
($outcome,$description,$credits) = |
|
&localenroll::validate_instcode($dom,$instcode,$owner); |
|
}; |
my $result = &escape($outcome).'&'.&escape($description).'&'. |
my $result = &escape($outcome).'&'.&escape($description).'&'. |
&escape($credits); |
&escape($credits); |
&Reply($client, \$result, $userinput); |
&Reply($client, \$result, $userinput); |
Line 6223 sub validate_instcrosslist_handler {
|
Line 6322 sub validate_instcrosslist_handler {
|
$instcode = &unescape($instcode); |
$instcode = &unescape($instcode); |
$inst_xlist = &unescape($inst_xlist); |
$inst_xlist = &unescape($inst_xlist); |
$coowner = &unescape($coowner); |
$coowner = &unescape($coowner); |
my $outcome = &localenroll::validate_crosslist_access($dom,$instcode, |
my $outcome; |
$inst_xlist,$coowner); |
eval { |
&Reply($client, \$outcome, $userinput); |
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::validate_crosslist_access($dom,$instcode, |
|
$inst_xlist,$coowner); |
|
}; |
|
|
|
&Reply($client, \$outcome, $userinput); |
return 1; |
return 1; |
} |
} |
®ister_handler("autovalidateinstcrosslist", \&validate_instcrosslist_handler, 0, 1, 0); |
®ister_handler("autovalidateinstcrosslist", \&validate_instcrosslist_handler, 0, 1, 0); |
Line 6249 sub get_sections_handler {
|
Line 6352 sub get_sections_handler {
|
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
|
|
my ($coursecode, $cdom) = split(/:/, $tail); |
my ($coursecode, $cdom) = split(/:/, $tail); |
my @secs = &localenroll::get_sections($coursecode,$cdom); |
my $seclist; |
my $seclist = &escape(join(':',@secs)); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
my @secs = &localenroll::get_sections($coursecode,$cdom); |
|
$seclist = &escape(join(':',@secs)); |
|
}; |
&Reply($client, \$seclist, $userinput); |
&Reply($client, \$seclist, $userinput); |
|
|
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autogetsections", \&get_sections_handler, 0, 1, 0); |
®ister_handler("autogetsections", \&get_sections_handler, 0, 1, 0); |
Line 6274 sub get_sections_handler {
|
Line 6378 sub get_sections_handler {
|
# Returns: |
# Returns: |
# 1 - Processing should continue. |
# 1 - Processing should continue. |
# |
# |
|
|
sub validate_course_owner_handler { |
sub validate_course_owner_handler { |
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
Line 6281 sub validate_course_owner_handler {
|
Line 6386 sub validate_course_owner_handler {
|
|
|
$owner = &unescape($owner); |
$owner = &unescape($owner); |
$coowners = &unescape($coowners); |
$coowners = &unescape($coowners); |
my $outcome = &localenroll::new_course($inst_course_id,$owner,$cdom,$coowners); |
my $outcome; |
|
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::new_course($inst_course_id,$owner,$cdom,$coowners); |
|
}; |
&Reply($client, \$outcome, $userinput); |
&Reply($client, \$outcome, $userinput); |
|
|
|
|
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autonewcourse", \&validate_course_owner_handler, 0, 1, 0); |
®ister_handler("autonewcourse", \&validate_course_owner_handler, 0, 1, 0); |
Line 6311 sub validate_course_section_handler {
|
Line 6417 sub validate_course_section_handler {
|
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
my ($inst_course_id, $cdom) = split(/:/, $tail); |
my ($inst_course_id, $cdom) = split(/:/, $tail); |
|
my $outcome; |
my $outcome=&localenroll::validate_courseID($inst_course_id,$cdom); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome=&localenroll::validate_courseID($inst_course_id,$cdom); |
|
}; |
&Reply($client, \$outcome, $userinput); |
&Reply($client, \$outcome, $userinput); |
|
|
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autovalidatecourse", \&validate_course_section_handler, 0, 1, 0); |
®ister_handler("autovalidatecourse", \&validate_course_section_handler, 0, 1, 0); |
Line 6349 sub validate_class_access_handler {
|
Line 6456 sub validate_class_access_handler {
|
$outcome=&localenroll::check_section($inst_class,$owners,$cdom); |
$outcome=&localenroll::check_section($inst_class,$owners,$cdom); |
}; |
}; |
&Reply($client,\$outcome, $userinput); |
&Reply($client,\$outcome, $userinput); |
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autovalidateclass_sec", \&validate_class_access_handler, 0, 1, 0); |
®ister_handler("autovalidateclass_sec", \&validate_class_access_handler, 0, 1, 0); |
Line 6482 sub create_auto_enroll_password_handler
|
Line 6588 sub create_auto_enroll_password_handler
|
my ($authparam, $cdom) = split(/:/, $userinput); |
my ($authparam, $cdom) = split(/:/, $userinput); |
|
|
my ($create_passwd,$authchk); |
my ($create_passwd,$authchk); |
($authparam, |
eval { |
$create_passwd, |
local($SIG{__DIE__})='DEFAULT'; |
$authchk) = &localenroll::create_password($authparam,$cdom); |
($authparam,$create_passwd,$create_passwd,$authchk) = |
|
&localenroll::create_password($authparam,$cdom); |
|
}; |
&Reply($client, &escape($authparam.':'.$create_passwd.':'.$authchk)."\n", |
&Reply($client, &escape($authparam.':'.$create_passwd.':'.$authchk)."\n", |
$userinput); |
$userinput); |
|
|
Line 6721 sub get_institutional_code_format_handle
|
Line 6828 sub get_institutional_code_format_handle
|
my ($key,$value) = split/=/,$_; |
my ($key,$value) = split/=/,$_; |
$instcodes{&unescape($key)} = &unescape($value); |
$instcodes{&unescape($key)} = &unescape($value); |
} |
} |
my $formatreply = &localenroll::instcode_format($cdom, |
my $formatreply; |
\%instcodes, |
eval { |
\%codes, |
local($SIG{__DIE__})='DEFAULT'; |
\@codetitles, |
$formatreply = &localenroll::instcode_format($cdom, |
\%cat_titles, |
\%instcodes, |
\%cat_order); |
\%codes, |
|
\@codetitles, |
|
\%cat_titles, |
|
\%cat_order); |
|
}; |
if ($formatreply eq 'ok') { |
if ($formatreply eq 'ok') { |
my $codes_str = &Apache::lonnet::hash2str(%codes); |
my $codes_str = &Apache::lonnet::hash2str(%codes); |
my $codetitles_str = &Apache::lonnet::array2str(@codetitles); |
my $codetitles_str = &Apache::lonnet::array2str(@codetitles); |
Line 6786 sub get_possible_instcodes_handler {
|
Line 6897 sub get_possible_instcodes_handler {
|
my $reply; |
my $reply; |
my $cdom = $tail; |
my $cdom = $tail; |
my (@codetitles,%cat_titles,%cat_order,@code_order); |
my (@codetitles,%cat_titles,%cat_order,@code_order); |
my $formatreply = &localenroll::possible_instcodes($cdom, |
my $formatreply; |
\@codetitles, |
eval { |
\%cat_titles, |
local($SIG{__DIE__})='DEFAULT'; |
\%cat_order, |
$formatreply = &localenroll::possible_instcodes($cdom, |
\@code_order); |
\@codetitles, |
|
\%cat_titles, |
|
\%cat_order, |
|
\@code_order); |
|
}; |
if ($formatreply eq 'ok') { |
if ($formatreply eq 'ok') { |
my $result = join('&',map {&escape($_);} (@codetitles)).':'; |
my $result = join('&',map {&escape($_);} (@codetitles)).':'; |
$result .= join('&',map {&escape($_);} (@code_order)).':'; |
$result .= join('&',map {&escape($_);} (@code_order)).':'; |