version 1.1407, 2019/04/24 01:44:46
|
version 1.1417, 2020/01/17 04:51:33
|
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 1082 sub find_existing_session {
|
Line 1082 sub find_existing_session {
|
return; |
return; |
} |
} |
|
|
|
sub delusersession { |
|
my ($lonid,$udom,$uname) = @_; |
|
my $uprimary_id = &domain($udom,'primary'); |
|
my $uintdom = &internet_dom($uprimary_id); |
|
my $intdom = &internet_dom($lonid); |
|
my $serverhomedom = &host_domain($lonid); |
|
if (($uintdom ne '') && ($uintdom eq $intdom)) { |
|
return &reply(join(':','delusersession', |
|
map {&escape($_)} ($udom,$uname)),$lonid); |
|
} |
|
return; |
|
} |
|
|
# check if user's browser sent load balancer cookie and server still has session |
# check if user's browser sent load balancer cookie and server still has session |
# and is not overloaded. |
# and is not overloaded. |
sub check_for_balancer_cookie { |
sub check_for_balancer_cookie { |
Line 1252 sub changepass {
|
Line 1265 sub changepass {
|
} elsif ($answer =~ "invalid_client") { |
} elsif ($answer =~ "invalid_client") { |
&logthis("$server refused to change $uname in $udom password because ". |
&logthis("$server refused to change $uname in $udom password because ". |
"it was a reset by e-mail originating from an invalid server."); |
"it was a reset by e-mail originating from an invalid server."); |
|
} elsif ($answer =~ "^prioruse") { |
|
&logthis("$server refused to change $uname in $udom password because ". |
|
"the password had been used before"); |
} |
} |
return $answer; |
return $answer; |
} |
} |
Line 2245 sub inst_directory_query {
|
Line 2261 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 2296 sub usersearch {
|
Line 2312 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 2666 sub get_domain_defaults {
|
Line 2682 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 2705 sub get_domain_defaults {
|
Line 2721 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 8080 sub allowed {
|
Line 8155 sub allowed {
|
|
|
if ($env{'user.priv.'.$env{'request.role'}.'.'.$courseuri} |
if ($env{'user.priv.'.$env{'request.role'}.'.'.$courseuri} |
=~/\Q$priv\E\&([^\:]*)/) { |
=~/\Q$priv\E\&([^\:]*)/) { |
unless (($priv eq 'bro') && (!$ownaccess)) { |
if ($priv eq 'mip') { |
$thisallowed.=$1; |
my $rem = $1; |
|
if (($uri ne '') && ($env{'request.course.id'} eq $uri) && |
|
($env{'course.'.$env{'request.course.id'}.'.internal.courseowner'} eq $env{'user.name'}.':'.$env{'user.domain'})) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($cdom ne '') { |
|
my %passwdconf = &get_passwdconf($cdom); |
|
if (ref($passwdconf{'crsownerchg'}) eq 'HASH') { |
|
if (ref($passwdconf{'crsownerchg'}{'by'}) eq 'ARRAY') { |
|
if (@{$passwdconf{'crsownerchg'}{'by'}}) { |
|
my @inststatuses = split(':',$env{'environment.inststatus'}); |
|
unless (@inststatuses) { |
|
@inststatuses = ('default'); |
|
} |
|
foreach my $status (@inststatuses) { |
|
if (grep(/^\Q$status\E$/,@{$passwdconf{'crsownerchg'}{'by'}})) { |
|
$thisallowed.=$rem; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
unless (($priv eq 'bro') && (!$ownaccess)) { |
|
$thisallowed.=$1; |
|
} |
} |
} |
} |
} |
|
|
Line 8170 sub allowed {
|
Line 8271 sub allowed {
|
|
|
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
|
|
|
# If this is modifying password (internal auth) domains must match for user and user's role. |
|
|
|
if ($priv eq 'mip') { |
|
if ($env{'user.domain'} eq $env{'request.role.domain'}) { |
|
return $thisallowed; |
|
} else { |
|
return ''; |
|
} |
|
} |
|
|
$courseprivid=$env{'request.course.id'}; |
$courseprivid=$env{'request.course.id'}; |
if ($env{'request.course.sec'}) { |
if ($env{'request.course.sec'}) { |
$courseprivid.='/'.$env{'request.course.sec'}; |
$courseprivid.='/'.$env{'request.course.sec'}; |
Line 10074 sub store_coowners {
|
Line 10185 sub store_coowners {
|
sub modifyuserauth { |
sub modifyuserauth { |
my ($udom,$uname,$umode,$upass)=@_; |
my ($udom,$uname,$umode,$upass)=@_; |
my $uhome=&homeserver($uname,$udom); |
my $uhome=&homeserver($uname,$udom); |
unless (&allowed('mau',$udom)) { return 'refused'; } |
my $allowed; |
|
if (&allowed('mau',$udom)) { |
|
$allowed = 1; |
|
} elsif (($umode eq 'internal') && ($udom eq $env{'user.domain'}) && |
|
($env{'request.course.id'}) && (&allowed('mip',$env{'request.course.id'})) && |
|
(!$env{'course.'.$env{'request.course.id'}.'.internal.nopasswdchg'})) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
if (($cdom ne '') && ($cnum ne '')) { |
|
my $is_owner = &is_course_owner($cdom,$cnum); |
|
if ($is_owner) { |
|
$allowed = 1; |
|
} |
|
} |
|
} |
|
unless ($allowed) { return 'refused'; } |
&logthis('Call to modify user authentication '.$udom.', '.$uname.', '. |
&logthis('Call to modify user authentication '.$udom.', '.$uname.', '. |
$umode.' by '.$env{'user.name'}.' at '.$env{'user.domain'}. |
$umode.' by '.$env{'user.name'}.' at '.$env{'user.domain'}. |
' in domain '.$env{'request.role.domain'}); |
' in domain '.$env{'request.role.domain'}); |
Line 12154 sub EXT {
|
Line 12280 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 13941 sub default_login_domain {
|
Line 14071 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 14852 BEGIN {
|
Line 15003 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, |
}); |
}); |