version 1.1072, 2010/07/06 18:36:56
|
version 1.1073, 2010/07/17 20:02:13
|
Line 76 use HTTP::Date;
|
Line 76 use HTTP::Date;
|
use Image::Magick; |
use Image::Magick; |
|
|
use vars qw(%perlvar %spareid %pr %prp $memcache %packagetab $tmpdir |
use vars qw(%perlvar %spareid %pr %prp $memcache %packagetab $tmpdir |
$_64bit %env %protocol); |
$_64bit %env %protocol %loncaparevs); |
|
|
my (%badServerCache, $memcache, %courselogs, %accesshash, %domainrolehash, |
my (%badServerCache, $memcache, %courselogs, %accesshash, %domainrolehash, |
%userrolehash, $processmarker, $dumpcount, %coursedombuf, |
%userrolehash, $processmarker, $dumpcount, %coursedombuf, |
Line 196 sub get_server_timezone {
|
Line 196 sub get_server_timezone {
|
} |
} |
|
|
sub get_server_loncaparev { |
sub get_server_loncaparev { |
my ($dom,$lonhost) = @_; |
my ($dom,$lonhost,$ignore_cache,$caller) = @_; |
if (defined($lonhost)) { |
if (defined($lonhost)) { |
if (!defined(&hostname($lonhost))) { |
if (!defined(&hostname($lonhost))) { |
undef($lonhost); |
undef($lonhost); |
Line 211 sub get_server_loncaparev {
|
Line 211 sub get_server_loncaparev {
|
} |
} |
} |
} |
if (defined($lonhost)) { |
if (defined($lonhost)) { |
my $cachetime = 24*3600; |
my $cachetime = 12*3600; |
my ($loncaparev,$cached)=&is_cached_new('serverloncaparev',$lonhost); |
if (!$ignore_cache) { |
if (defined($cached)) { |
my ($loncaparev,$cached)=&is_cached_new('serverloncaparev',$lonhost); |
return $loncaparev; |
if (defined($cached)) { |
} else { |
return $loncaparev; |
my $loncaparev = &reply('serverloncaparev',$lonhost); |
} |
return &do_cache_new('serverloncaparev',$lonhost,$loncaparev,$cachetime); |
} |
|
my ($answer,$loncaparev); |
|
my @ids=¤t_machine_ids(); |
|
if (grep(/^\Q$lonhost\E$/,@ids)) { |
|
$answer = $perlvar{'lonVersion'}; |
|
if ($answer =~ /^[\'\"]?([\d.\-]+)[\'\"]?$/) { |
|
$loncaparev = $1; |
|
} |
|
} else { |
|
$answer = &reply('serverloncaparev',$lonhost); |
|
if (($answer eq 'unknown_cmd') || ($answer eq 'con_lost')) { |
|
if ($caller eq 'loncron') { |
|
my $ua=new LWP::UserAgent; |
|
$ua->timeout(20); |
|
my $protocol = $protocol{$lonhost}; |
|
$protocol = 'http' if ($protocol ne 'https'); |
|
my $url = $protocol.'://'.&hostname($lonhost).'/adm/about.html'; |
|
my $request=new HTTP::Request('GET',$url); |
|
my $response=$ua->request($request); |
|
unless ($response->is_error()) { |
|
my $content = $response->content; |
|
if ($content =~ /<p>VERSION\:\s*([\d.\-]+)<\/p>/) { |
|
$loncaparev = $1; |
|
} |
|
} |
|
} else { |
|
$loncaparev = $loncaparevs{$lonhost}; |
|
} |
|
} elsif ($answer =~ /^[\'\"]?([\d.\-]+)[\'\"]?$/) { |
|
$loncaparev = $1; |
|
} |
} |
} |
|
return &do_cache_new('serverloncaparev',$lonhost,$loncaparev,$cachetime); |
} |
} |
} |
} |
|
|
Line 811 sub queryauthenticate {
|
Line 842 sub queryauthenticate {
|
# --------- Try to authenticate user from domain's lib servers (first this one) |
# --------- Try to authenticate user from domain's lib servers (first this one) |
|
|
sub authenticate { |
sub authenticate { |
my ($uname,$upass,$udom,$checkdefauth)=@_; |
my ($uname,$upass,$udom,$checkdefauth,$clientcancheckhost)=@_; |
$upass=&escape($upass); |
$upass=&escape($upass); |
$uname= &LONCAPA::clean_username($uname); |
$uname= &LONCAPA::clean_username($uname); |
my $uhome=&homeserver($uname,$udom,1); |
my $uhome=&homeserver($uname,$udom,1); |
Line 834 sub authenticate {
|
Line 865 sub authenticate {
|
return 'no_host'; |
return 'no_host'; |
} |
} |
} |
} |
my $answer=reply("encrypt:auth:$udom:$uname:$upass:$checkdefauth",$uhome); |
my $answer=reply("encrypt:auth:$udom:$uname:$upass:$checkdefauth:$clientcancheckhost",$uhome); |
if ($answer eq 'authorized') { |
if ($answer eq 'authorized') { |
if ($newhome) { |
if ($newhome) { |
&logthis("User $uname at $udom authorized by $uhome, but needs account"); |
&logthis("User $uname at $udom authorized by $uhome, but needs account"); |
Line 852 sub authenticate {
|
Line 883 sub authenticate {
|
return 'no_host'; |
return 'no_host'; |
} |
} |
|
|
|
sub can_host_session { |
|
my ($udom,$machinedom,$remoterev,$remotesessions,$hostedsessions) = @_; |
|
my $canhost = 1; |
|
if (ref($remotesessions) eq 'HASH') { |
|
if (ref($remotesessions->{'excludedomain'}) eq 'ARRAY') { |
|
if (grep(/^\Q$machinedom\E$/,@{$remotesessions->{'excludedomain'}})) { |
|
$canhost = 0; |
|
} else { |
|
$canhost = 1; |
|
} |
|
} |
|
if (ref($remotesessions->{'includedomain'}) eq 'ARRAY') { |
|
if (grep(/^\Q$machinedom\E$/,@{$remotesessions->{'includedomain'}})) { |
|
$canhost = 1; |
|
} else { |
|
$canhost = 0; |
|
} |
|
} |
|
if ($canhost) { |
|
if ($remotesessions->{'version'} ne '') { |
|
my ($reqmajor,$reqminor) = ($remotesessions->{'version'} =~ /^(\d+)\.(\d+)$/); |
|
if ($reqmajor ne '' && $reqminor ne '') { |
|
if ($remoterev =~ /^\'?(\d+)\.(\d+)/) { |
|
my $major = $1; |
|
my $minor = $2; |
|
if (($major < $reqmajor ) || |
|
(($major == $reqmajor) && ($minor < $reqminor))) { |
|
$canhost = 0; |
|
} |
|
} else { |
|
$canhost = 0; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if ($canhost) { |
|
if (ref($hostedsessions) eq 'HASH') { |
|
if (ref($hostedsessions->{'excludedomain'}) eq 'ARRAY') { |
|
if (grep(/^\Q$udom\E$/,@{$hostedsessions->{'excludedomain'}})) { |
|
$canhost = 0; |
|
} else { |
|
$canhost = 1; |
|
} |
|
} |
|
if (ref($hostedsessions->{'includedomain'}) eq 'ARRAY') { |
|
if (grep(/^\Q$udom\E$/,@{$hostedsessions->{'includedomain'}})) { |
|
$canhost = 1; |
|
} else { |
|
$canhost = 0; |
|
} |
|
} |
|
} |
|
} |
|
return $canhost; |
|
} |
|
|
# ---------------------- Find the homebase for a user from domain's lib servers |
# ---------------------- Find the homebase for a user from domain's lib servers |
|
|
my %homecache; |
my %homecache; |
Line 1328 sub get_domain_defaults {
|
Line 1416 sub get_domain_defaults {
|
my %domconfig = |
my %domconfig = |
&Apache::lonnet::get_dom('configuration',['defaults','quotas', |
&Apache::lonnet::get_dom('configuration',['defaults','quotas', |
'requestcourses','inststatus', |
'requestcourses','inststatus', |
'coursedefaults'],$domain); |
'coursedefaults','usersessions'],$domain); |
if (ref($domconfig{'defaults'}) eq 'HASH') { |
if (ref($domconfig{'defaults'}) eq 'HASH') { |
$domdefaults{'lang_def'} = $domconfig{'defaults'}{'lang_def'}; |
$domdefaults{'lang_def'} = $domconfig{'defaults'}{'lang_def'}; |
$domdefaults{'auth_def'} = $domconfig{'defaults'}{'auth_def'}; |
$domdefaults{'auth_def'} = $domconfig{'defaults'}{'auth_def'}; |
Line 1368 sub get_domain_defaults {
|
Line 1456 sub get_domain_defaults {
|
$domdefaults{$item} = $domconfig{'coursedefaults'}{$item}; |
$domdefaults{$item} = $domconfig{'coursedefaults'}{$item}; |
} |
} |
} |
} |
|
if (ref($domconfig{'usersessions'}) eq 'HASH') { |
|
if (ref($domconfig{'usersessions'}{'remote'}) eq 'HASH') { |
|
$domdefaults{'remotesessions'} = $domconfig{'usersessions'}{'remote'}; |
|
} |
|
if (ref($domconfig{'usersessions'}{'hosted'}) eq 'HASH') { |
|
$domdefaults{'hostedsessions'} = $domconfig{'usersessions'}{'hosted'}; |
|
} |
|
} |
&Apache::lonnet::do_cache_new('domdefaults',$domain,\%domdefaults, |
&Apache::lonnet::do_cache_new('domdefaults',$domain,\%domdefaults, |
$cachetime); |
$cachetime); |
return %domdefaults; |
return %domdefaults; |
Line 10003 BEGIN {
|
Line 10099 BEGIN {
|
close($config); |
close($config); |
} |
} |
|
|
|
# ---------------------------------------------------------- Read loncaparev table |
|
{ |
|
if (-e "$perlvar{'lonTabDir'}/loncaparevs.tab") { |
|
if (open(my $config,"<$perlvar{'lonTabDir'}/loncaparevs.tab")) { |
|
while (my $configline=<$config>) { |
|
chomp($configline); |
|
my ($hostid,$loncaparev)=split(/:/,$configline); |
|
$loncaparevs{$hostid}=$loncaparev; |
|
} |
|
close($config); |
|
} |
|
} |
|
} |
|
|
|
sub all_loncaparevs { |
|
return qw(1.1 1.2 1.3 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10); |
|
} |
|
|
# ------------- set up temporary directory |
# ------------- set up temporary directory |
{ |
{ |
$tmpdir = $perlvar{'lonDaemons'}.'/tmp/'; |
$tmpdir = $perlvar{'lonDaemons'}.'/tmp/'; |
Line 10233 authentication scheme
|
Line 10347 authentication scheme
|
|
|
=item * |
=item * |
X<authenticate()> |
X<authenticate()> |
B<authenticate($uname,$upass,$udom)>: try to |
B<authenticate($uname,$upass,$udom,$checkdefauth,$clientcancheckhost)>: try to |
authenticate user from domain's lib servers (first use the current |
authenticate user from domain's lib servers (first use the current |
one). C<$upass> should be the users password. |
one). C<$upass> should be the users password. |
|
$checkdefauth is optional (value is 1 if a check should be made to |
|
authenticate user using default authentication method, and allow |
|
account creation if username does not have account in the domain). |
|
$clientcancheckhost is optional (value is 1 if checking whether the |
|
server can host will occur on the client side in lonauth.pm). |
|
|
=item * |
=item * |
X<homeserver()> |
X<homeserver()> |