version 1.1411, 2019/07/18 18:28:58
|
version 1.1421, 2020/05/13 01:58:16
|
Line 79 use Encode;
|
Line 79 use Encode;
|
|
|
use vars qw(%perlvar %spareid %pr %prp $memcache %packagetab $tmpdir $deftex |
use vars qw(%perlvar %spareid %pr %prp $memcache %packagetab $tmpdir $deftex |
$_64bit %env %protocol %loncaparevs %serverhomeIDs %needsrelease |
$_64bit %env %protocol %loncaparevs %serverhomeIDs %needsrelease |
%managerstab); |
%managerstab $passwdmin); |
|
|
my (%badServerCache, $memcache, %courselogs, %accesshash, %domainrolehash, |
my (%badServerCache, $memcache, %courselogs, %accesshash, %domainrolehash, |
%userrolehash, $processmarker, $dumpcount, %coursedombuf, |
%userrolehash, $processmarker, $dumpcount, %coursedombuf, |
Line 1230 sub choose_server {
|
Line 1230 sub choose_server {
|
return ($login_host,$hostname,$portal_path,$isredirect,$lowest_load); |
return ($login_host,$hostname,$portal_path,$isredirect,$lowest_load); |
} |
} |
|
|
|
sub get_course_sessions { |
|
my ($cnum,$cdom,$lastactivity) = @_; |
|
my %servers = &internet_dom_servers($cdom); |
|
my %returnhash; |
|
foreach my $server (sort(keys(%servers))) { |
|
my $rep = &reply("coursesessions:$cdom:$cnum:$lastactivity",$server); |
|
my @pairs=split(/\&/,$rep); |
|
unless (($rep eq 'unknown_cmd') || ($rep =~ /^error/)) { |
|
foreach my $item (@pairs) { |
|
my ($key,$value)=split(/=/,$item,2); |
|
$key = &unescape($key); |
|
next if ($key =~ /^error: 2 /); |
|
if (exists($returnhash{$key})) { |
|
next if ($value < $returnhash{$key}); |
|
} |
|
$returnhash{$key}=$value; |
|
} |
|
} |
|
} |
|
return %returnhash; |
|
} |
|
|
# --------------------------------------------- Try to change a user's password |
# --------------------------------------------- Try to change a user's password |
|
|
sub changepass { |
sub changepass { |
Line 2261 sub inst_directory_query {
|
Line 2283 sub inst_directory_query {
|
if ($homeserver ne '') { |
if ($homeserver ne '') { |
unless ($homeserver eq $perlvar{'lonHostID'}) { |
unless ($homeserver eq $perlvar{'lonHostID'}) { |
if ($srch->{'srchby'} eq 'email') { |
if ($srch->{'srchby'} eq 'email') { |
my $lcrev = &get_server_loncaparev(undef,$homeserver); |
my $lcrev = &get_server_loncaparev($udom,$homeserver); |
my ($major,$minor) = ($lcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); |
my ($major,$minor) = ($lcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); |
if (($major eq '' && $minor eq '') || ($major < 2) || |
if (($major eq '' && $minor eq '') || ($major < 2) || |
(($major == 2) && ($minor < 12))) { |
(($major == 2) && ($minor < 12))) { |
Line 2312 sub usersearch {
|
Line 2334 sub usersearch {
|
if (&host_domain($tryserver) eq $dom) { |
if (&host_domain($tryserver) eq $dom) { |
unless ($tryserver eq $perlvar{'lonHostID'}) { |
unless ($tryserver eq $perlvar{'lonHostID'}) { |
if ($srch->{'srchby'} eq 'email') { |
if ($srch->{'srchby'} eq 'email') { |
my $lcrev = &get_server_loncaparev(undef,$tryserver); |
my $lcrev = &get_server_loncaparev($dom,$tryserver); |
my ($major,$minor) = ($lcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); |
my ($major,$minor) = ($lcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/); |
next if (($major eq '' && $minor eq '') || ($major < 2) || |
next if (($major eq '' && $minor eq '') || ($major < 2) || |
(($major == 2) && ($minor < 12))); |
(($major == 2) && ($minor < 12))); |
Line 2682 sub get_domain_defaults {
|
Line 2704 sub get_domain_defaults {
|
if (ref($domconfig{'coursecategories'}) eq 'HASH') { |
if (ref($domconfig{'coursecategories'}) eq 'HASH') { |
$domdefaults{'catauth'} = 'std'; |
$domdefaults{'catauth'} = 'std'; |
$domdefaults{'catunauth'} = 'std'; |
$domdefaults{'catunauth'} = 'std'; |
if ($domconfig{'coursecategories'}{'auth'}) { |
if ($domconfig{'coursecategories'}{'auth'}) { |
$domdefaults{'catauth'} = $domconfig{'coursecategories'}{'auth'}; |
$domdefaults{'catauth'} = $domconfig{'coursecategories'}{'auth'}; |
} |
} |
if ($domconfig{'coursecategories'}{'unauth'}) { |
if ($domconfig{'coursecategories'}{'unauth'}) { |
Line 2721 sub get_domain_defaults {
|
Line 2743 sub get_domain_defaults {
|
return %domdefaults; |
return %domdefaults; |
} |
} |
|
|
|
sub get_dom_cats { |
|
my ($dom) = @_; |
|
return unless (&domain($dom)); |
|
my ($cats,$cached)=&is_cached_new('cats',$dom); |
|
unless (defined($cached)) { |
|
my %domconfig = &get_dom('configuration',['coursecategories'],$dom); |
|
if (ref($domconfig{'coursecategories'}) eq 'HASH') { |
|
if (ref($domconfig{'coursecategories'}{'cats'}) eq 'HASH') { |
|
%{$cats} = %{$domconfig{'coursecategories'}{'cats'}}; |
|
} else { |
|
$cats = {}; |
|
} |
|
} else { |
|
$cats = {}; |
|
} |
|
&Apache::lonnet::do_cache_new('cats',$dom,$cats,3600); |
|
} |
|
return $cats; |
|
} |
|
|
|
sub get_dom_instcats { |
|
my ($dom) = @_; |
|
return unless (&domain($dom)); |
|
my ($instcats,$cached)=&is_cached_new('instcats',$dom); |
|
unless (defined($cached)) { |
|
my (%coursecodes,%codes,@codetitles,%cat_titles,%cat_order); |
|
my $totcodes = &retrieve_instcodes(\%coursecodes,$dom); |
|
if ($totcodes > 0) { |
|
my $caller = 'global'; |
|
if (&auto_instcode_format($caller,$dom,\%coursecodes,\%codes, |
|
\@codetitles,\%cat_titles,\%cat_order) eq 'ok') { |
|
$instcats = { |
|
codes => \%codes, |
|
codetitles => \@codetitles, |
|
cat_titles => \%cat_titles, |
|
cat_order => \%cat_order, |
|
}; |
|
&do_cache_new('instcats',$dom,$instcats,3600); |
|
} |
|
} |
|
} |
|
return $instcats; |
|
} |
|
|
|
sub retrieve_instcodes { |
|
my ($coursecodes,$dom) = @_; |
|
my $totcodes; |
|
my %courses = &courseiddump($dom,'.',1,'.','.','.',undef,undef,'Course'); |
|
foreach my $course (keys(%courses)) { |
|
if (ref($courses{$course}) eq 'HASH') { |
|
if ($courses{$course}{'inst_code'} ne '') { |
|
$$coursecodes{$course} = $courses{$course}{'inst_code'}; |
|
$totcodes ++; |
|
} |
|
} |
|
} |
|
return $totcodes; |
|
} |
|
|
sub course_portal_url { |
sub course_portal_url { |
my ($cnum,$cdom) = @_; |
my ($cnum,$cdom) = @_; |
my $chome = &homeserver($cnum,$cdom); |
my $chome = &homeserver($cnum,$cdom); |
Line 3447 sub remove_stale_resfile {
|
Line 3528 sub remove_stale_resfile {
|
$stale = 1; |
$stale = 1; |
} |
} |
if ($stale) { |
if ($stale) { |
unlink($fname); |
if (unlink($fname)) { |
if ($uri!~/\.meta$/) { |
if ($uri!~/\.meta$/) { |
unlink($fname.'.meta'); |
if (-e $fname.'.meta') { |
|
unlink($fname.'.meta'); |
|
} |
|
} |
|
&reply("unsub:$fname",$homeserver); |
|
$removed = 1; |
} |
} |
&reply("unsub:$fname",$homeserver); |
|
$removed = 1; |
|
} |
} |
} |
} |
} |
} |
Line 3602 sub can_edit_resource {
|
Line 3686 sub can_edit_resource {
|
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$cfile = $resurl; |
$cfile = $resurl; |
|
} elsif (($resurl =~ m{^/ext/}) && ($symb ne '')) { |
|
my ($map,$id,$res) = &decode_symb($symb); |
|
if ($map =~ /\.page$/) { |
|
$incourse = 1; |
|
if ($env{'form.forceedit'}) { |
|
$forceview = 1; |
|
$cfile = $map; |
|
} else { |
|
$forceedit = 1; |
|
$cfile = '/adm/wrapper'.$resurl; |
|
} |
|
} |
} elsif ($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/ext\.tool$}) { |
} elsif ($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/ext\.tool$}) { |
$incourse = 1; |
$incourse = 1; |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
Line 3627 sub can_edit_resource {
|
Line 3723 sub can_edit_resource {
|
$cfile = $template; |
$cfile = $template; |
} |
} |
} elsif (($resurl =~ m{^/adm/wrapper/ext/}) && ($env{'form.folderpath'} =~ /^supplemental/)) { |
} elsif (($resurl =~ m{^/adm/wrapper/ext/}) && ($env{'form.folderpath'} =~ /^supplemental/)) { |
$incourse = 1; |
$incourse = 1; |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
$forceview = 1; |
$forceview = 1; |
} else { |
} else { |
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$cfile = $resurl; |
$cfile = $resurl; |
} elsif (($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/ext\.tool$}) && ($env{'form.folderpath'} =~ /^supplemental/)) { |
} elsif (($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/ext\.tool$}) && ($env{'form.folderpath'} =~ /^supplemental/)) { |
$incourse = 1; |
$incourse = 1; |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
Line 12221 sub EXT {
|
Line 12317 sub EXT {
|
if ($space eq 'name') { |
if ($space eq 'name') { |
return $ENV{'SERVER_NAME'}; |
return $ENV{'SERVER_NAME'}; |
} |
} |
|
} elsif ($realm eq 'client') { |
|
if ($space eq 'remote_addr') { |
|
return $ENV{'REMOTE_ADDR'}; |
|
} |
} |
} |
return ''; |
return ''; |
} |
} |
Line 13049 sub symbverify {
|
Line 13149 sub symbverify {
|
|
|
if (tie(%bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
if (tie(%bighash,'GDBM_File',$env{'request.course.fn'}.'.db', |
&GDBM_READER(),0640)) { |
&GDBM_READER(),0640)) { |
my $noclutter; |
|
if (($thisurl =~ m{^/adm/wrapper/ext/}) || ($thisurl =~ m{^ext/})) { |
if (($thisurl =~ m{^/adm/wrapper/ext/}) || ($thisurl =~ m{^ext/})) { |
$thisurl =~ s/\?.+$//; |
$thisurl =~ s/\?.+$//; |
if ($map =~ m{^uploaded/.+\.page$}) { |
if ($map =~ m{^uploaded/.+\.page$}) { |
$thisurl =~ s{^(/adm/wrapper|)/ext/}{http://}; |
$thisurl =~ s{^(/adm/wrapper|)/ext/}{http://}; |
$thisurl =~ s{^\Qhttp://https://\E}{https://}; |
$thisurl =~ s{^\Qhttp://https://\E}{https://}; |
$noclutter = 1; |
|
} |
} |
} |
} |
my $ids; |
my $ids; |
if ($noclutter) { |
if ($map =~ m{^uploaded/.+\.page$}) { |
$ids=$bighash{'ids_'.$thisurl}; |
$ids=$bighash{'ids_'.&clutter_with_no_wrapper($thisurl)}; |
} else { |
} else { |
$ids=$bighash{'ids_'.&clutter($thisurl)}; |
$ids=$bighash{'ids_'.&clutter($thisurl)}; |
} |
} |
Line 14008 sub default_login_domain {
|
Line 14106 sub default_login_domain {
|
return $domain; |
return $domain; |
} |
} |
|
|
|
sub shared_institution { |
|
my ($dom) = @_; |
|
my $same_intdom; |
|
my $hostintdom = &internet_dom($perlvar{'lonHostID'}); |
|
if ($hostintdom ne '') { |
|
my %iphost = &get_iphost(); |
|
my $primary_id = &domain($dom,'primary'); |
|
my $primary_ip = &get_host_ip($primary_id); |
|
if (ref($iphost{$primary_ip}) eq 'ARRAY') { |
|
foreach my $id (@{$iphost{$primary_ip}}) { |
|
my $intdom = &internet_dom($id); |
|
if ($intdom eq $hostintdom) { |
|
$same_intdom = 1; |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
return $same_intdom; |
|
} |
|
|
sub uses_sts { |
sub uses_sts { |
my ($ignore_cache) = @_; |
my ($ignore_cache) = @_; |
my $lonhost = $perlvar{'lonHostID'}; |
my $lonhost = $perlvar{'lonHostID'}; |
Line 14919 BEGIN {
|
Line 15038 BEGIN {
|
$deftex = LONCAPA::texengine(); |
$deftex = LONCAPA::texengine(); |
} |
} |
|
|
|
# ------------- set default minimum length for passwords for internal auth users |
|
{ |
|
$passwdmin = LONCAPA::passwd_min(); |
|
} |
|
|
$memcache=new Cache::Memcached({'servers' => ['127.0.0.1:11211'], |
$memcache=new Cache::Memcached({'servers' => ['127.0.0.1:11211'], |
'compress_threshold'=> 20_000, |
'compress_threshold'=> 20_000, |
}); |
}); |