version 1.1330, 2016/11/15 20:46:35
|
version 1.1350, 2017/08/23 22:38:43
|
Line 71 delayed.
|
Line 71 delayed.
|
package Apache::lonnet; |
package Apache::lonnet; |
|
|
use strict; |
use strict; |
use LWP::UserAgent(); |
|
use HTTP::Date; |
use HTTP::Date; |
use Image::Magick; |
use Image::Magick; |
|
|
Line 101 use LONCAPA qw(:DEFAULT :match);
|
Line 100 use LONCAPA qw(:DEFAULT :match);
|
use LONCAPA::Configuration; |
use LONCAPA::Configuration; |
use LONCAPA::lonmetadata; |
use LONCAPA::lonmetadata; |
use LONCAPA::Lond; |
use LONCAPA::Lond; |
|
use LONCAPA::LWPReq; |
|
|
use File::Copy; |
use File::Copy; |
|
|
Line 243 sub get_servercerts_info {
|
Line 243 sub get_servercerts_info {
|
if ($1 < 6) { |
if ($1 < 6) { |
$uselocal = 0; |
$uselocal = 0; |
} |
} |
|
} elsif ($distro =~ /^(?:sles)(\d+)$/) { |
|
if ($1 < 12) { |
|
$uselocal = 0; |
|
} |
} |
} |
} |
} |
if ($uselocal) { |
if ($uselocal) { |
Line 305 sub get_server_loncaparev {
|
Line 309 sub get_server_loncaparev {
|
$answer = &reply('serverloncaparev',$lonhost); |
$answer = &reply('serverloncaparev',$lonhost); |
if (($answer eq 'unknown_cmd') || ($answer eq 'con_lost')) { |
if (($answer eq 'unknown_cmd') || ($answer eq 'con_lost')) { |
if ($caller eq 'loncron') { |
if ($caller eq 'loncron') { |
my $ua=new LWP::UserAgent; |
|
$ua->timeout(4); |
|
my $protocol = $protocol{$lonhost}; |
my $protocol = $protocol{$lonhost}; |
$protocol = 'http' if ($protocol ne 'https'); |
$protocol = 'http' if ($protocol ne 'https'); |
my $url = $protocol.'://'.&hostname($lonhost).'/adm/about.html'; |
my $url = $protocol.'://'.&hostname($lonhost).'/adm/about.html'; |
my $request=new HTTP::Request('GET',$url); |
my $request=new HTTP::Request('GET',$url); |
my $response=$ua->request($request); |
my $response=&LONCAPA::LWPReq::makerequest($lonhost,$request,'',\%perlvar,4,1); |
unless ($response->is_error()) { |
unless ($response->is_error()) { |
my $content = $response->content; |
my $content = $response->content; |
if ($content =~ /<p>VERSION\:\s*([\w.\-]+)<\/p>/) { |
if ($content =~ /<p>VERSION\:\s*([\w.\-]+)<\/p>/) { |
Line 650 sub transfer_profile_to_env {
|
Line 652 sub transfer_profile_to_env {
|
sub check_for_valid_session { |
sub check_for_valid_session { |
my ($r,$name,$userhashref) = @_; |
my ($r,$name,$userhashref) = @_; |
my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); |
my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); |
|
my ($linkname,$pubname); |
if ($name eq '') { |
if ($name eq '') { |
$name = 'lonID'; |
$name = 'lonID'; |
|
$linkname = 'lonLinkID'; |
|
$pubname = 'lonPubID'; |
} |
} |
my $lonid=$cookies{$name}; |
my $lonid=$cookies{$name}; |
|
if (!$lonid) { |
|
if (($name eq 'lonID') && ($ENV{'SERVER_PORT'} != 443) && ($linkname)) { |
|
$lonid=$cookies{$linkname}; |
|
} |
|
if (!$lonid) { |
|
if (($name eq 'lonID') && ($pubname)) { |
|
$lonid=$cookies{$pubname}; |
|
} |
|
} |
|
} |
return undef if (!$lonid); |
return undef if (!$lonid); |
|
|
my $handle=&LONCAPA::clean_handle($lonid->value); |
my $handle=&LONCAPA::clean_handle($lonid->value); |
Line 1049 sub choose_server {
|
Line 1064 sub choose_server {
|
if ($login_host ne '') { |
if ($login_host ne '') { |
$hostname = &hostname($login_host); |
$hostname = &hostname($login_host); |
} |
} |
return ($login_host,$hostname,$portal_path,$isredirect); |
return ($login_host,$hostname,$portal_path,$isredirect,$lowest_load); |
} |
} |
|
|
# --------------------------------------------- Try to change a user's password |
# --------------------------------------------- Try to change a user's password |
Line 1321 sub get_lonbalancer_config {
|
Line 1336 sub get_lonbalancer_config {
|
} |
} |
|
|
sub check_loadbalancing { |
sub check_loadbalancing { |
my ($uname,$udom) = @_; |
my ($uname,$udom,$caller) = @_; |
my ($is_balancer,$currtargets,$currrules,$dom_in_use,$homeintdom, |
my ($is_balancer,$currtargets,$currrules,$dom_in_use,$homeintdom, |
$rule_in_effect,$offloadto,$otherserver); |
$rule_in_effect,$offloadto,$otherserver); |
my $lonhost = $perlvar{'lonHostID'}; |
my $lonhost = $perlvar{'lonHostID'}; |
Line 1472 sub check_loadbalancing {
|
Line 1487 sub check_loadbalancing {
|
} |
} |
} |
} |
} |
} |
if (($otherserver ne '') && (grep(/^\Q$otherserver\E$/,@hosts))) { |
unless ($caller eq 'login') { |
$is_balancer = 0; |
if (($otherserver ne '') && (grep(/^\Q$otherserver\E$/,@hosts))) { |
if ($uname ne '' && $udom ne '') { |
$is_balancer = 0; |
if (($env{'user.name'} eq $uname) && ($env{'user.domain'} eq $udom)) { |
if ($uname ne '' && $udom ne '') { |
|
if (($env{'user.name'} eq $uname) && ($env{'user.domain'} eq $udom)) { |
|
|
&appenv({'user.loadbalexempt' => $lonhost, |
&appenv({'user.loadbalexempt' => $lonhost, |
'user.loadbalcheck.time' => time}); |
'user.loadbalcheck.time' => time}); |
|
} |
} |
} |
} |
} |
} |
} |
Line 1581 sub internet_dom_servers {
|
Line 1598 sub internet_dom_servers {
|
return %uniqservers; |
return %uniqservers; |
} |
} |
|
|
|
sub trusted_domains { |
|
my ($cmdtype,$calldom) = @_; |
|
my ($trusted,$untrusted); |
|
if (&domain($calldom) eq '') { |
|
return ($trusted,$untrusted); |
|
} |
|
unless ($cmdtype =~ /^(content|shared|enroll|coaurem|domroles|catalog|reqcrs|msg)$/) { |
|
return ($trusted,$untrusted); |
|
} |
|
my $callprimary = &domain($calldom,'primary'); |
|
my $intcalldom = &Apache::lonnet::internet_dom($callprimary); |
|
if ($intcalldom eq '') { |
|
return ($trusted,$untrusted); |
|
} |
|
|
|
my ($trustconfig,$cached)=&Apache::lonnet::is_cached_new('trust',$calldom); |
|
unless (defined($cached)) { |
|
my %domconfig = &Apache::lonnet::get_dom('configuration',['trust'],$calldom); |
|
&Apache::lonnet::do_cache_new('trust',$calldom,$domconfig{'trust'},3600); |
|
$trustconfig = $domconfig{'trust'}; |
|
} |
|
if (ref($trustconfig)) { |
|
my (%possexc,%possinc,@allexc,@allinc); |
|
if (ref($trustconfig->{$cmdtype}) eq 'HASH') { |
|
if (ref($trustconfig->{$cmdtype}->{'exc'}) eq 'ARRAY') { |
|
map { $possexc{$_} = 1; } @{$trustconfig->{$cmdtype}->{'exc'}}; |
|
} |
|
if (ref($trustconfig->{$cmdtype}->{'inc'}) eq 'ARRAY') { |
|
map { $possinc{$_} = 1; } @{$trustconfig->{$cmdtype}->{'inc'}}; |
|
} |
|
} |
|
if (keys(%possexc)) { |
|
if (keys(%possinc)) { |
|
foreach my $key (sort(keys(%possexc))) { |
|
next if ($key eq $intcalldom); |
|
unless ($possinc{$key}) { |
|
push(@allexc,$key); |
|
} |
|
} |
|
} else { |
|
@allexc = sort(keys(%possexc)); |
|
} |
|
} |
|
if (keys(%possinc)) { |
|
$possinc{$intcalldom} = 1; |
|
@allinc = sort(keys(%possinc)); |
|
} |
|
if ((@allexc > 0) || (@allinc > 0)) { |
|
my %doms_by_intdom; |
|
my %allintdoms = &all_host_intdom(); |
|
my %alldoms = &all_host_domain(); |
|
foreach my $key (%allintdoms) { |
|
if (ref($doms_by_intdom{$allintdoms{$key}}) eq 'ARRAY') { |
|
unless (grep(/^\Q$alldoms{$key}\E$/,@{$doms_by_intdom{$allintdoms{$key}}})) { |
|
push(@{$doms_by_intdom{$allintdoms{$key}}},$alldoms{$key}); |
|
} |
|
} else { |
|
$doms_by_intdom{$allintdoms{$key}} = [$alldoms{$key}]; |
|
} |
|
} |
|
foreach my $exc (@allexc) { |
|
if (ref($doms_by_intdom{$exc}) eq 'ARRAY') { |
|
$untrusted = $doms_by_intdom{$exc}; |
|
} |
|
} |
|
foreach my $inc (@allinc) { |
|
if (ref($doms_by_intdom{$inc}) eq 'ARRAY') { |
|
$trusted = $doms_by_intdom{$inc}; |
|
} |
|
} |
|
} |
|
} |
|
return ($trusted,$untrusted); |
|
} |
|
|
|
sub will_trust { |
|
my ($cmdtype,$domain,$possdom) = @_; |
|
return 1 if ($domain eq $possdom); |
|
my ($trustedref,$untrustedref) = &trusted_domains($cmdtype,$possdom); |
|
my $willtrust; |
|
if ((ref($trustedref) eq 'ARRAY') && (@{$trustedref} > 0)) { |
|
if (grep(/^\Q$domain\E$/,@{$trustedref})) { |
|
$willtrust = 1; |
|
} |
|
} elsif ((ref($untrustedref) eq 'ARRAY') && (@{$untrustedref} > 0)) { |
|
unless (grep(/^\Q$domain\E$/,@{$untrustedref})) { |
|
$willtrust = 1; |
|
} |
|
} else { |
|
$willtrust = 1; |
|
} |
|
return $willtrust; |
|
} |
|
|
# ---------------------- 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 1830 sub get_dom {
|
Line 1941 sub get_dom {
|
} |
} |
} |
} |
if ($udom && $uhome && ($uhome ne 'no_host')) { |
if ($udom && $uhome && ($uhome ne 'no_host')) { |
my $rep=&reply("getdom:$udom:$namespace:$items",$uhome); |
my $rep; |
|
if ($namespace =~ /^enc/) { |
|
$rep=&reply("encrypt:egetdom:$udom:$namespace:$items",$uhome); |
|
} else { |
|
$rep=&reply("getdom:$udom:$namespace:$items",$uhome); |
|
} |
my %returnhash; |
my %returnhash; |
if ($rep eq '' || $rep =~ /^error: 2 /) { |
if ($rep eq '' || $rep =~ /^error: 2 /) { |
return %returnhash; |
return %returnhash; |
Line 1874 sub put_dom {
|
Line 1990 sub put_dom {
|
$items.=&escape($item).'='.&freeze_escape($$storehash{$item}).'&'; |
$items.=&escape($item).'='.&freeze_escape($$storehash{$item}).'&'; |
} |
} |
$items=~s/\&$//; |
$items=~s/\&$//; |
return &reply("putdom:$udom:$namespace:$items",$uhome); |
if ($namespace =~ /^enc/) { |
|
return &reply("encrypt:putdom:$udom:$namespace:$items",$uhome); |
|
} else { |
|
return &reply("putdom:$udom:$namespace:$items",$uhome); |
|
} |
} else { |
} else { |
&logthis("put_dom failed - no homeserver and/or domain"); |
&logthis("put_dom failed - no homeserver and/or domain"); |
} |
} |
Line 1971 sub inst_directory_query {
|
Line 2091 sub inst_directory_query {
|
&escape($srch->{'srchtype'}),$homeserver); |
&escape($srch->{'srchtype'}),$homeserver); |
my $host=&hostname($homeserver); |
my $host=&hostname($homeserver); |
if ($queryid !~/^\Q$host\E\_/) { |
if ($queryid !~/^\Q$host\E\_/) { |
&logthis('instituional directory search invalid queryid: '.$queryid.' for host: '.$homeserver.'in domain '.$udom); |
&logthis('institutional directory search invalid queryid: '.$queryid.' for host: '.$homeserver.' in domain '.$udom); |
return; |
return; |
} |
} |
my $response = &get_query_reply($queryid); |
my $response = &get_query_reply($queryid); |
Line 2245 sub get_domain_defaults {
|
Line 2365 sub get_domain_defaults {
|
'coursedefaults','usersessions', |
'coursedefaults','usersessions', |
'requestauthor','selfenrollment', |
'requestauthor','selfenrollment', |
'coursecategories','ssl','autoenroll', |
'coursecategories','ssl','autoenroll', |
'trust'],$domain); |
'trust','helpsettings'],$domain); |
my @coursetypes = ('official','unofficial','community','textbook','placement'); |
my @coursetypes = ('official','unofficial','community','textbook','placement'); |
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'}; |
Line 2254 sub get_domain_defaults {
|
Line 2374 sub get_domain_defaults {
|
$domdefaults{'timezone_def'} = $domconfig{'defaults'}{'timezone_def'}; |
$domdefaults{'timezone_def'} = $domconfig{'defaults'}{'timezone_def'}; |
$domdefaults{'datelocale_def'} = $domconfig{'defaults'}{'datelocale_def'}; |
$domdefaults{'datelocale_def'} = $domconfig{'defaults'}{'datelocale_def'}; |
$domdefaults{'portal_def'} = $domconfig{'defaults'}{'portal_def'}; |
$domdefaults{'portal_def'} = $domconfig{'defaults'}{'portal_def'}; |
|
$domdefaults{'intauth_cost'} = $domconfig{'defaults'}{'intauth_cost'}; |
|
$domdefaults{'intauth_switch'} = $domconfig{'defaults'}{'intauth_switch'}; |
|
$domdefaults{'intauth_check'} = $domconfig{'defaults'}{'intauth_check'}; |
} else { |
} else { |
$domdefaults{'lang_def'} = &domain($domain,'lang_def'); |
$domdefaults{'lang_def'} = &domain($domain,'lang_def'); |
$domdefaults{'auth_def'} = &domain($domain,'auth_def'); |
$domdefaults{'auth_def'} = &domain($domain,'auth_def'); |
Line 2375 sub get_domain_defaults {
|
Line 2498 sub get_domain_defaults {
|
if (ref($domconfig{'ssl'}{'replication'}) eq 'HASH') { |
if (ref($domconfig{'ssl'}{'replication'}) eq 'HASH') { |
$domdefaults{'replication'} = $domconfig{'ssl'}{'replication'}; |
$domdefaults{'replication'} = $domconfig{'ssl'}{'replication'}; |
} |
} |
if (ref($domconfig{'ssl'}{'connect'}) eq 'HASH') { |
if (ref($domconfig{'ssl'}{'connto'}) eq 'HASH') { |
$domdefaults{'connect'} = $domconfig{'ssl'}{'connect'}; |
$domdefaults{'connect'} = $domconfig{'ssl'}{'connto'}; |
|
} |
|
if (ref($domconfig{'ssl'}{'connfrom'}) eq 'HASH') { |
|
$domdefaults{'connect'} = $domconfig{'ssl'}{'connfrom'}; |
} |
} |
} |
} |
if (ref($domconfig{'trust'}) eq 'HASH') { |
if (ref($domconfig{'trust'}) eq 'HASH') { |
Line 2390 sub get_domain_defaults {
|
Line 2516 sub get_domain_defaults {
|
if (ref($domconfig{'autoenroll'}) eq 'HASH') { |
if (ref($domconfig{'autoenroll'}) eq 'HASH') { |
$domdefaults{'autofailsafe'} = $domconfig{'autoenroll'}{'autofailsafe'}; |
$domdefaults{'autofailsafe'} = $domconfig{'autoenroll'}{'autofailsafe'}; |
} |
} |
|
if (ref($domconfig{'helpsettings'}) eq 'HASH') { |
|
$domdefaults{'submitbugs'} = $domconfig{'helpsettings'}{'submitbugs'}; |
|
if (ref($domconfig{'helpsettings'}{'adhoc'}) eq 'HASH') { |
|
$domdefaults{'adhocroles'} = $domconfig{'helpsettings'}{'adhoc'}; |
|
} |
|
} |
&do_cache_new('domdefaults',$domain,\%domdefaults,$cachetime); |
&do_cache_new('domdefaults',$domain,\%domdefaults,$cachetime); |
return %domdefaults; |
return %domdefaults; |
} |
} |
Line 2917 sub repcopy {
|
Line 3049 sub repcopy {
|
mkdir($path,0777); |
mkdir($path,0777); |
} |
} |
} |
} |
my $ua=new LWP::UserAgent; |
|
my $request=new HTTP::Request('GET',"$remoteurl"); |
my $request=new HTTP::Request('GET',"$remoteurl"); |
my $response=$ua->request($request,$transname); |
my $response; |
|
if ($remoteurl =~ m{/raw/}) { |
|
$response=&LONCAPA::LWPReq::makerequest($home,$request,$transname,\%perlvar,'',0,1); |
|
} else { |
|
$response=&LONCAPA::LWPReq::makerequest($home,$request,$transname,\%perlvar,'',1); |
|
} |
if ($response->is_error()) { |
if ($response->is_error()) { |
unlink($transname); |
unlink($transname); |
my $message=$response->status_line; |
my $message=$response->status_line; |
Line 2929 sub repcopy {
|
Line 3065 sub repcopy {
|
} else { |
} else { |
if ($remoteurl!~/\.meta$/) { |
if ($remoteurl!~/\.meta$/) { |
my $mrequest=new HTTP::Request('GET',$remoteurl.'.meta'); |
my $mrequest=new HTTP::Request('GET',$remoteurl.'.meta'); |
my $mresponse=$ua->request($mrequest,$filename.'.meta'); |
my $mresponse; |
|
if ($remoteurl =~ m{/raw/}) { |
|
$mresponse = &LONCAPA::LWPReq::makerequest($home,$mrequest,$filename.'.meta',\%perlvar,'',0,1); |
|
} else { |
|
$mresponse = &LONCAPA::LWPReq::makerequest($home,$mrequest,$filename.'.meta',\%perlvar,'',1); |
|
} |
if ($mresponse->is_error()) { |
if ($mresponse->is_error()) { |
unlink($filename.'.meta'); |
unlink($filename.'.meta'); |
&logthis( |
&logthis( |
Line 2992 sub absolute_url {
|
Line 3133 sub absolute_url {
|
sub ssi { |
sub ssi { |
|
|
my ($fn,%form)=@_; |
my ($fn,%form)=@_; |
my $ua=new LWP::UserAgent; |
|
my $request; |
my $request; |
|
|
$form{'no_update_last_known'}=1; |
$form{'no_update_last_known'}=1; |
Line 3010 sub ssi {
|
Line 3150 sub ssi {
|
} |
} |
|
|
$request->header(Cookie => $ENV{'HTTP_COOKIE'}); |
$request->header(Cookie => $ENV{'HTTP_COOKIE'}); |
my $response= $ua->request($request); |
my $lonhost = $perlvar{'lonHostID'}; |
my $content = $response->content; |
my $response= &LONCAPA::LWPReq::makerequest($lonhost,$request,'',\%perlvar); |
|
|
|
|
if (wantarray) { |
if (wantarray) { |
return ($content, $response); |
return ($response->content, $response); |
} else { |
} else { |
return $content; |
return $response->content; |
} |
} |
} |
} |
|
|
sub externalssi { |
sub externalssi { |
my ($url)=@_; |
my ($url)=@_; |
my $ua=new LWP::UserAgent; |
|
my $request=new HTTP::Request('GET',$url); |
my $request=new HTTP::Request('GET',$url); |
my $response=$ua->request($request); |
my $response = &LONCAPA::LWPReq::makerequest('',$request,'',\%perlvar); |
if (wantarray) { |
if (wantarray) { |
return ($response->content, $response); |
return ($response->content, $response); |
} else { |
} else { |
Line 3171 sub can_edit_resource {
|
Line 3309 sub can_edit_resource {
|
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$cfile = $resurl; |
$cfile = $resurl; |
} elsif ($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/exttools?$}) { |
} elsif ($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/ext\.tool$}) { |
$incourse = 1; |
$incourse = 1; |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
$forceview = 1; |
$forceview = 1; |
Line 3203 sub can_edit_resource {
|
Line 3341 sub can_edit_resource {
|
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$cfile = $resurl; |
$cfile = $resurl; |
} elsif (($resurl =~ m{^/adm/wrapper/adm/$cdom/$cnum/\d+/exttools?$}) && ($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'}) { |
$forceview = 1; |
$forceview = 1; |
Line 3221 sub can_edit_resource {
|
Line 3359 sub can_edit_resource {
|
} else { |
} else { |
$cfile = $env{'form.suppurl'}; |
$cfile = $env{'form.suppurl'}; |
my $escfile = &unescape($cfile); |
my $escfile = &unescape($cfile); |
if ($escfile =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) { |
if ($escfile =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) { |
$cfile = '/adm/wrapper'.$escfile; |
$cfile = '/adm/wrapper'.$escfile; |
} else { |
} else { |
$escfile =~ s{^http://}{}; |
$escfile =~ s{^http://}{}; |
Line 3556 sub userfileupload {
|
Line 3694 sub userfileupload {
|
'_'.$env{'user.domain'}.'/pending'; |
'_'.$env{'user.domain'}.'/pending'; |
} elsif (($context eq 'existingfile') || ($context eq 'canceloverwrite')) { |
} elsif (($context eq 'existingfile') || ($context eq 'canceloverwrite')) { |
my ($docuname,$docudom); |
my ($docuname,$docudom); |
if ($destudom) { |
if ($destudom =~ /^$match_domain$/) { |
$docudom = $destudom; |
$docudom = $destudom; |
} else { |
} else { |
$docudom = $env{'user.domain'}; |
$docudom = $env{'user.domain'}; |
} |
} |
if ($destuname) { |
if ($destuname =~ /^$match_username$/) { |
$docuname = $destuname; |
$docuname = $destuname; |
} else { |
} else { |
$docuname = $env{'user.name'}; |
$docuname = $env{'user.name'}; |
Line 4108 sub flushcourselogs {
|
Line 4246 sub flushcourselogs {
|
} |
} |
} |
} |
# |
# |
# Reverse lookup of domain roles (dc, ad, li, sc, dh, au) |
# Reverse lookup of domain roles (dc, ad, li, sc, dh, da, au) |
# |
# |
my %domrolebuffer = (); |
my %domrolebuffer = (); |
foreach my $entry (keys(%domainrolehash)) { |
foreach my $entry (keys(%domainrolehash)) { |
Line 4255 sub userrolelog {
|
Line 4393 sub userrolelog {
|
{$trole.':'.$username.':'.$domain.':'.$env{'user.name'}.':'.$env{'user.domain'}.':'} |
{$trole.':'.$username.':'.$domain.':'.$env{'user.name'}.':'.$env{'user.domain'}.':'} |
=$tend.':'.$tstart; |
=$tend.':'.$tstart; |
} |
} |
if ($trole =~ /^(dc|ad|li|au|dg|sc|dh)/ ) { |
if ($trole =~ /^(dc|ad|li|au|dg|sc|dh|da)/ ) { |
my (undef,$rudom,$runame,$rsec)=split(/\//,$area); |
my (undef,$rudom,$runame,$rsec)=split(/\//,$area); |
$domainrolehash |
$domainrolehash |
{$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} |
{$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec} |
Line 4482 sub get_my_roles {
|
Line 4620 sub get_my_roles {
|
return %returnhash; |
return %returnhash; |
} |
} |
|
|
|
sub get_all_adhocroles { |
|
my ($dom) = @_; |
|
my @roles_by_num = (); |
|
my %domdefaults = &get_domain_defaults($dom); |
|
my (%description,%access_in_dom,%access_info); |
|
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
|
my $count = 0; |
|
my %domcurrent = %{$domdefaults{'adhocroles'}}; |
|
my %ordered; |
|
foreach my $role (sort(keys(%domcurrent))) { |
|
my ($order,$desc,$access_in_dom); |
|
if (ref($domcurrent{$role}) eq 'HASH') { |
|
$order = $domcurrent{$role}{'order'}; |
|
$desc = $domcurrent{$role}{'desc'}; |
|
$access_in_dom{$role} = $domcurrent{$role}{'access'}; |
|
$access_info{$role} = $domcurrent{$role}{$access_in_dom{$role}}; |
|
} |
|
if ($order eq '') { |
|
$order = $count; |
|
} |
|
$ordered{$order} = $role; |
|
if ($desc ne '') { |
|
$description{$role} = $desc; |
|
} else { |
|
$description{$role}= $role; |
|
} |
|
$count++; |
|
} |
|
foreach my $item (sort {$a <=> $b } (keys(%ordered))) { |
|
push(@roles_by_num,$ordered{$item}); |
|
} |
|
} |
|
return (\@roles_by_num,\%description,\%access_in_dom,\%access_info); |
|
} |
|
|
|
sub get_my_adhocroles { |
|
my ($cid,$checkreg) = @_; |
|
my ($cdom,$cnum,%info,@possroles,$description,$roles_by_num); |
|
if ($env{'request.course.id'} eq $cid) { |
|
$cdom = $env{'course.'.$cid.'.domain'}; |
|
$cnum = $env{'course.'.$cid.'.num'}; |
|
$info{'internal.coursecode'} = $env{'course.'.$cid.'.internal.coursecode'}; |
|
} elsif ($cid =~ /^($match_domain)_($match_courseid)$/) { |
|
$cdom = $1; |
|
$cnum = $2; |
|
%info = &Apache::lonnet::get('environment',['internal.coursecode'], |
|
$cdom,$cnum); |
|
} |
|
if (($info{'internal.coursecode'} ne '') && ($checkreg)) { |
|
my $user = $env{'user.name'}.':'.$env{'user.domain'}; |
|
my %rosterhash = &get('classlist',[$user],$cdom,$cnum); |
|
if ($rosterhash{$user} ne '') { |
|
my $type = (split(/:/,$rosterhash{$user}))[5]; |
|
return ([],{}) if ($type eq 'auto'); |
|
} |
|
} |
|
if (($cdom ne '') && ($cnum ne '')) { |
|
if (($env{"user.role.dh./$cdom/"}) || ($env{"user.role.da./$cdom/"})) { |
|
my $then=$env{'user.login.time'}; |
|
my $update=$env{'user.update.time'}; |
|
if (!$update) { |
|
$update = $then; |
|
} |
|
my @liveroles; |
|
foreach my $role ('dh','da') { |
|
if ($env{"user.role.$role./$cdom/"}) { |
|
my ($tstart,$tend)=split(/\./,$env{"user.role.$role./$cdom/"}); |
|
my $limit = $update; |
|
if ($env{'request.role'} eq "$role./$cdom/") { |
|
$limit = $then; |
|
} |
|
my $activerole = 1; |
|
if ($tstart && $tstart>$limit) { $activerole = 0; } |
|
if ($tend && $tend <$limit) { $activerole = 0; } |
|
if ($activerole) { |
|
push(@liveroles,$role); |
|
} |
|
} |
|
} |
|
if (@liveroles) { |
|
if (&homeserver($cnum,$cdom) ne 'no_host') { |
|
my ($accessref,$accessinfo,%access_in_dom); |
|
($roles_by_num,$description,$accessref,$accessinfo) = &get_all_adhocroles($cdom); |
|
if (ref($roles_by_num) eq 'ARRAY') { |
|
if (@{$roles_by_num}) { |
|
my %settings; |
|
if ($env{'request.course.id'} eq $cid) { |
|
foreach my $envkey (keys(%env)) { |
|
if ($envkey =~ /^\Qcourse.$cid.\E(internal\.adhoc.+)$/) { |
|
$settings{$1} = $env{$envkey}; |
|
} |
|
} |
|
} else { |
|
%settings = &dump('environment',$cdom,$cnum,'internal\.adhoc'); |
|
} |
|
my %setincrs; |
|
if ($settings{'internal.adhocaccess'}) { |
|
map { $setincrs{$_} = 1; } split(/,/,$settings{'internal.adhocaccess'}); |
|
} |
|
my @statuses; |
|
if ($env{'environment.inststatus'}) { |
|
@statuses = split(/,/,$env{'environment.inststatus'}); |
|
} |
|
my $user = $env{'user.name'}.':'.$env{'user.domain'}; |
|
if (ref($accessref) eq 'HASH') { |
|
%access_in_dom = %{$accessref}; |
|
} |
|
foreach my $role (@{$roles_by_num}) { |
|
my ($curraccess,@okstatus,@personnel); |
|
if ($setincrs{$role}) { |
|
($curraccess,my $rest) = split(/=/,$settings{'internal.adhoc.'.$role}); |
|
if ($curraccess eq 'status') { |
|
@okstatus = split(/\&/,$rest); |
|
} elsif (($curraccess eq 'exc') || ($curraccess eq 'inc')) { |
|
@personnel = split(/\&/,$rest); |
|
} |
|
} else { |
|
$curraccess = $access_in_dom{$role}; |
|
if (ref($accessinfo) eq 'HASH') { |
|
if ($curraccess eq 'status') { |
|
if (ref($accessinfo->{$role}) eq 'ARRAY') { |
|
@okstatus = @{$accessinfo->{$role}}; |
|
} |
|
} elsif (($curraccess eq 'exc') || ($curraccess eq 'inc')) { |
|
if (ref($accessinfo->{$role}) eq 'ARRAY') { |
|
@personnel = @{$accessinfo->{$role}}; |
|
} |
|
} |
|
} |
|
} |
|
if ($curraccess eq 'none') { |
|
next; |
|
} elsif ($curraccess eq 'all') { |
|
push(@possroles,$role); |
|
} elsif ($curraccess eq 'dh') { |
|
if (grep(/^dh$/,@liveroles)) { |
|
push(@possroles,$role); |
|
} else { |
|
next; |
|
} |
|
} elsif ($curraccess eq 'da') { |
|
if (grep(/^da$/,@liveroles)) { |
|
push(@possroles,$role); |
|
} else { |
|
next; |
|
} |
|
} elsif ($curraccess eq 'status') { |
|
if (@okstatus) { |
|
if (!@statuses) { |
|
if (grep(/^default$/,@okstatus)) { |
|
push(@possroles,$role); |
|
} |
|
} else { |
|
foreach my $status (@okstatus) { |
|
if (grep(/^\Q$status\E$/,@statuses)) { |
|
push(@possroles,$role); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} elsif (($curraccess eq 'exc') || ($curraccess eq 'inc')) { |
|
if (grep(/^\Q$user\E$/,@personnel)) { |
|
if ($curraccess eq 'exc') { |
|
push(@possroles,$role); |
|
} |
|
} elsif ($curraccess eq 'inc') { |
|
push(@possroles,$role); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
unless (ref($description) eq 'HASH') { |
|
if (ref($roles_by_num) eq 'ARRAY') { |
|
my %desc; |
|
map { $desc{$_} = $_; } (@{$roles_by_num}); |
|
$description = \%desc; |
|
} else { |
|
$description = {}; |
|
} |
|
} |
|
return (\@possroles,$description); |
|
} |
|
|
# ----------------------------------------------------- Frontpage Announcements |
# ----------------------------------------------------- Frontpage Announcements |
# |
# |
# |
# |
Line 4722 sub get_domain_roles {
|
Line 5049 sub get_domain_roles {
|
return %personnel; |
return %personnel; |
} |
} |
|
|
|
sub get_active_domroles { |
|
my ($dom,$roles) = @_; |
|
return () unless (ref($roles) eq 'ARRAY'); |
|
my $now = time; |
|
my %dompersonnel = &get_domain_roles($dom,$roles,$now,$now); |
|
my %domroles; |
|
foreach my $server (keys(%dompersonnel)) { |
|
foreach my $user (sort(keys(%{$dompersonnel{$server}}))) { |
|
my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); |
|
$domroles{$uname.':'.$udom} = $dompersonnel{$server}{$user}; |
|
} |
|
} |
|
return %domroles; |
|
} |
|
|
# ----------------------------------------------------------- Interval timing |
# ----------------------------------------------------------- Interval timing |
|
|
{ |
{ |
Line 5576 sub rolesinit {
|
Line 5918 sub rolesinit {
|
} |
} |
} |
} |
|
|
@userroles{'user.author', 'user.adv'} = &set_userprivs(\%userroles, |
@userroles{'user.author','user.adv','user.rar'} = &set_userprivs(\%userroles, |
\%allroles, \%allgroups); |
\%allroles, \%allgroups); |
$env{'user.adv'} = $userroles{'user.adv'}; |
$env{'user.adv'} = $userroles{'user.adv'}; |
|
$env{'user.rar'} = $userroles{'user.rar'}; |
|
|
return (\%userroles,\%firstaccenv,\%timerintenv); |
return (\%userroles,\%firstaccenv,\%timerintenv); |
} |
} |
Line 5614 sub custom_roleprivs {
|
Line 5957 sub custom_roleprivs {
|
$$allroles{$spec.'./'.$tdomain.'/'}.=':'.$dompriv; |
$$allroles{$spec.'./'.$tdomain.'/'}.=':'.$dompriv; |
} |
} |
if (($trest ne '') && (defined($coursepriv))) { |
if (($trest ne '') && (defined($coursepriv))) { |
|
if ($trole =~ m{^cr/$tdomain/$tdomain\Q-domainconfig\E/([^/]+)$}) { |
|
my $rolename = $1; |
|
$coursepriv = &course_adhocrole_privs($rolename,$tdomain,$trest,$coursepriv); |
|
} |
$$allroles{'cm.'.$area}.=':'.$coursepriv; |
$$allroles{'cm.'.$area}.=':'.$coursepriv; |
$$allroles{$spec.'.'.$area}.=':'.$coursepriv; |
$$allroles{$spec.'.'.$area}.=':'.$coursepriv; |
} |
} |
Line 5622 sub custom_roleprivs {
|
Line 5969 sub custom_roleprivs {
|
} |
} |
} |
} |
|
|
|
sub course_adhocrole_privs { |
|
my ($rolename,$cdom,$cnum,$coursepriv) = @_; |
|
my %overrides = &get('environment',["internal.adhocpriv.$rolename"],$cdom,$cnum); |
|
if ($overrides{"internal.adhocpriv.$rolename"}) { |
|
my (%currprivs,%storeprivs); |
|
foreach my $item (split(/:/,$coursepriv)) { |
|
my ($priv,$restrict) = split(/\&/,$item); |
|
$currprivs{$priv} = $restrict; |
|
} |
|
my (%possadd,%possremove,%full); |
|
foreach my $item (split(/\:/,$Apache::lonnet::pr{'cr:c'})) { |
|
my ($priv,$restrict)=split(/\&/,$item); |
|
$full{$priv} = $restrict; |
|
} |
|
foreach my $item (split(/,/,$overrides{"internal.adhocpriv.$rolename"})) { |
|
next if ($item eq ''); |
|
my ($rule,$rest) = split(/=/,$item); |
|
next unless (($rule eq 'off') || ($rule eq 'on')); |
|
foreach my $priv (split(/:/,$rest)) { |
|
if ($priv ne '') { |
|
if ($rule eq 'off') { |
|
$possremove{$priv} = 1; |
|
} else { |
|
$possadd{$priv} = 1; |
|
} |
|
} |
|
} |
|
} |
|
foreach my $priv (sort(keys(%full))) { |
|
if (exists($currprivs{$priv})) { |
|
unless (exists($possremove{$priv})) { |
|
$storeprivs{$priv} = $currprivs{$priv}; |
|
} |
|
} elsif (exists($possadd{$priv})) { |
|
$storeprivs{$priv} = $full{$priv}; |
|
} |
|
} |
|
$coursepriv = ':'.join(':',map { $_.'&'.$storeprivs{$_}; } sort(keys(%storeprivs))); |
|
} |
|
return $coursepriv; |
|
} |
|
|
sub group_roleprivs { |
sub group_roleprivs { |
my ($allgroups,$area,$group_privs,$tend,$tstart) = @_; |
my ($allgroups,$area,$group_privs,$tend,$tstart) = @_; |
my $access = 1; |
my $access = 1; |
Line 5656 sub set_userprivs {
|
Line 6045 sub set_userprivs {
|
my ($userroles,$allroles,$allgroups,$groups_roles) = @_; |
my ($userroles,$allroles,$allgroups,$groups_roles) = @_; |
my $author=0; |
my $author=0; |
my $adv=0; |
my $adv=0; |
|
my $rar=0; |
my %grouproles = (); |
my %grouproles = (); |
if (keys(%{$allgroups}) > 0) { |
if (keys(%{$allgroups}) > 0) { |
my @groupkeys; |
my @groupkeys; |
Line 5703 sub set_userprivs {
|
Line 6093 sub set_userprivs {
|
$thesepriv{$privilege}.=$restrictions; |
$thesepriv{$privilege}.=$restrictions; |
} |
} |
if ($thesepriv{'adv'} eq 'F') { $adv=1; } |
if ($thesepriv{'adv'} eq 'F') { $adv=1; } |
|
if ($thesepriv{'rar'} eq 'F') { $rar=1; } |
} |
} |
} |
} |
my $thesestr=''; |
my $thesestr=''; |
Line 5711 sub set_userprivs {
|
Line 6102 sub set_userprivs {
|
} |
} |
$userroles->{'user.priv.'.$role} = $thesestr; |
$userroles->{'user.priv.'.$role} = $thesestr; |
} |
} |
return ($author,$adv); |
return ($author,$adv,$rar); |
} |
} |
|
|
sub role_status { |
sub role_status { |
Line 5756 sub role_status {
|
Line 6147 sub role_status {
|
push(@rolecodes,$$role); |
push(@rolecodes,$$role); |
&standard_roleprivs(\%allroles,$$role,$tdomain,$spec,$trest,$$where); |
&standard_roleprivs(\%allroles,$$role,$tdomain,$spec,$trest,$$where); |
} |
} |
my ($author,$adv)= &set_userprivs(\%userroles,\%allroles,\%allgroups,\%groups_roles); |
my ($author,$adv,$rar)= &set_userprivs(\%userroles,\%allroles,\%allgroups, |
|
\%groups_roles); |
&appenv(\%userroles,\@rolecodes); |
&appenv(\%userroles,\@rolecodes); |
&log($env{'user.domain'},$env{'user.name'},$env{'user.home'},"Role ".$role); |
&log($env{'user.domain'},$env{'user.name'},$env{'user.home'},"Role ".$spec); |
} |
} |
} |
} |
$$tstatus = 'is'; |
$$tstatus = 'is'; |
Line 5865 sub set_adhoc_privileges {
|
Line 6257 sub set_adhoc_privileges {
|
my %userroles = &set_arearole($role,$area,'','',$env{'user.domain'}, |
my %userroles = &set_arearole($role,$area,'','',$env{'user.domain'}, |
$env{'user.name'},1); |
$env{'user.name'},1); |
my %rolehash = (); |
my %rolehash = (); |
if ($role =~ m{^cr/$dcdom/$dcdom\Q-domainconfig\E/}) { |
if ($role =~ m{^\Qcr/$dcdom/$dcdom\E\-domainconfig/(\w+)$}) { |
|
my $rolename = $1; |
&custom_roleprivs(\%rolehash,$role,$dcdom,$pickedcourse,$spec,$area); |
&custom_roleprivs(\%rolehash,$role,$dcdom,$pickedcourse,$spec,$area); |
|
my %domdef = &get_domain_defaults($dcdom); |
|
if (ref($domdef{'adhocroles'}) eq 'HASH') { |
|
if (ref($domdef{'adhocroles'}{$rolename}) eq 'HASH') { |
|
&appenv({'request.role.desc' => $domdef{'adhocroles'}{$rolename}{'desc'},}); |
|
} |
|
} |
} else { |
} else { |
&standard_roleprivs(\%rolehash,$role,$dcdom,$spec,$pickedcourse,$area); |
&standard_roleprivs(\%rolehash,$role,$dcdom,$spec,$pickedcourse,$area); |
} |
} |
my ($author,$adv)= &set_userprivs(\%userroles,\%rolehash); |
my ($author,$adv,$rar)= &set_userprivs(\%userroles,\%rolehash); |
&appenv(\%userroles,[$role,'cm']); |
&appenv(\%userroles,[$role,'cm']); |
&log($env{'user.domain'},$env{'user.name'},$env{'user.home'},"Role ".$role); |
&log($env{'user.domain'},$env{'user.name'},$env{'user.home'},"Role ".$spec); |
unless ($caller eq 'constructaccess' && $env{'request.course.id'}) { |
unless ($caller eq 'constructaccess' && $env{'request.course.id'}) { |
&appenv( {'request.role' => $spec, |
&appenv( {'request.role' => $spec, |
'request.role.domain' => $dcdom, |
'request.role.domain' => $dcdom, |
'request.course.sec' => '' |
'request.course.sec' => $sec, |
} |
} |
); |
); |
my $tadv=0; |
my $tadv=0; |
Line 6026 sub currentdump {
|
Line 6425 sub currentdump {
|
# |
# |
my %returnhash=(); |
my %returnhash=(); |
# |
# |
if ($rep eq "unknown_cmd") { |
if ($rep eq 'unknown_cmd') { |
# an old lond will not know currentdump |
# an old lond will not know currentdump |
# Do a dump and make it look like a currentdump |
# Do a dump and make it look like a currentdump |
my @tmp = &dumpstore($courseid,$sdom,$sname,'.'); |
my @tmp = &dumpstore($courseid,$sdom,$sname,'.'); |
Line 6960 sub allowed {
|
Line 7359 sub allowed {
|
|
|
if (defined($env{'allowed.'.$priv})) { return $env{'allowed.'.$priv}; } |
if (defined($env{'allowed.'.$priv})) { return $env{'allowed.'.$priv}; } |
# Free bre access to adm and meta resources |
# Free bre access to adm and meta resources |
if (((($uri=~/^adm\//) && ($uri !~ m{/(?:smppg|bulletinboard)$})) |
if (((($uri=~/^adm\//) && ($uri !~ m{/(?:smppg|bulletinboard|ext\.tool)$})) |
|| (($uri=~/\.meta$/) && ($uri!~m|^uploaded/|) )) |
|| (($uri=~/\.meta$/) && ($uri!~m|^uploaded/|) )) |
&& ($priv eq 'bre')) { |
&& ($priv eq 'bre')) { |
return 'F'; |
return 'F'; |
Line 8885 sub assignrole {
|
Line 9284 sub assignrole {
|
&courserolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag, |
&courserolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag, |
$selfenroll,$context); |
$selfenroll,$context); |
} elsif (($role eq 'li') || ($role eq 'dg') || ($role eq 'sc') || |
} elsif (($role eq 'li') || ($role eq 'dg') || ($role eq 'sc') || |
($role eq 'au') || ($role eq 'dc') || ($role eq 'dh')) { |
($role eq 'au') || ($role eq 'dc') || ($role eq 'dh') || |
|
($role eq 'da')) { |
&domainrolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag, |
&domainrolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag, |
$context); |
$context); |
} elsif (($role eq 'ca') || ($role eq 'aa')) { |
} elsif (($role eq 'ca') || ($role eq 'aa')) { |
Line 10667 sub get_domain_ltitools {
|
Line 11067 sub get_domain_ltitools {
|
my %domconfig = &get_dom('configuration',['ltitools'],$cdom); |
my %domconfig = &get_dom('configuration',['ltitools'],$cdom); |
if (ref($domconfig{'ltitools'}) eq 'HASH') { |
if (ref($domconfig{'ltitools'}) eq 'HASH') { |
%ltitools = %{$domconfig{'ltitools'}}; |
%ltitools = %{$domconfig{'ltitools'}}; |
|
my %encdomconfig = &get_dom('encconfig',['ltitools'],$cdom); |
|
if (ref($encdomconfig{'ltitools'}) eq 'HASH') { |
|
foreach my $id (keys(%ltitools)) { |
|
if (ref($encdomconfig{'ltitools'}{$id}) eq 'HASH') { |
|
foreach my $item ('key','secret') { |
|
$ltitools{$id}{$item} = $encdomconfig{'ltitools'}{$id}{$item}; |
|
} |
|
} |
|
} |
|
} |
} |
} |
my $cachetime = 24*60*60; |
my $cachetime = 24*60*60; |
&do_cache_new('ltitools',$cdom,\%ltitools,$cachetime); |
&do_cache_new('ltitools',$cdom,\%ltitools,$cachetime); |
Line 11176 sub metadata {
|
Line 11586 sub metadata {
|
# if it is a non metadata possible uri return quickly |
# if it is a non metadata possible uri return quickly |
if (($uri eq '') || |
if (($uri eq '') || |
(($uri =~ m|^/*adm/|) && |
(($uri =~ m|^/*adm/|) && |
($uri !~ m|^adm/includes|) && ($uri !~ m{/(smppg|bulletinboard|exttools?)$})) || |
($uri !~ m|^adm/includes|) && ($uri !~ m{/(smppg|bulletinboard|ext\.tool)$})) || |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ m{^/*uploaded/.+\.sequence$})) { |
($uri =~ m|/$|) || ($uri =~ m|/.meta$|) || ($uri =~ m{^/*uploaded/.+\.sequence$})) { |
return undef; |
return undef; |
} |
} |
Line 12452 sub repcopy_userfile {
|
Line 12862 sub repcopy_userfile {
|
} |
} |
# now the path exists for sure |
# now the path exists for sure |
# get a user agent |
# get a user agent |
my $ua=new LWP::UserAgent; |
|
my $transferfile=$file.'.in.transfer'; |
my $transferfile=$file.'.in.transfer'; |
# FIXME: this should flock |
# FIXME: this should flock |
if (-e $transferfile) { return 'ok'; } |
if (-e $transferfile) { return 'ok'; } |
Line 12462 sub repcopy_userfile {
|
Line 12871 sub repcopy_userfile {
|
my $protocol = $protocol{$homeserver}; |
my $protocol = $protocol{$homeserver}; |
$protocol = 'http' if ($protocol ne 'https'); |
$protocol = 'http' if ($protocol ne 'https'); |
$request=new HTTP::Request('GET',$protocol.'://'.&hostname($homeserver).'/raw/'.$uri); |
$request=new HTTP::Request('GET',$protocol.'://'.&hostname($homeserver).'/raw/'.$uri); |
my $response=$ua->request($request,$transferfile); |
my $response = &LONCAPA::LWPReq::makerequest($homeserver,$request,$transferfile,\%perlvar,'',0,1); |
# did it work? |
# did it work? |
if ($response->is_error()) { |
if ($response->is_error()) { |
unlink($transferfile); |
unlink($transferfile); |
Line 12506 sub getuploaded {
|
Line 12915 sub getuploaded {
|
my $protocol = $protocol{$homeserver}; |
my $protocol = $protocol{$homeserver}; |
$protocol = 'http' if ($protocol ne 'https'); |
$protocol = 'http' if ($protocol ne 'https'); |
$uri = $protocol.'://'.&hostname($homeserver).'/raw/'.$uri; |
$uri = $protocol.'://'.&hostname($homeserver).'/raw/'.$uri; |
my $ua=new LWP::UserAgent; |
|
my $request=new HTTP::Request($reqtype,$uri); |
my $request=new HTTP::Request($reqtype,$uri); |
my $response=$ua->request($request); |
my $response=&LONCAPA::LWPReq::makerequest($homeserver,$request,'',\%perlvar,'',0,1); |
$$rtncode = $response->code; |
$$rtncode = $response->code; |
if (! $response->is_success()) { |
if (! $response->is_success()) { |
return 'failed'; |
return 'failed'; |
Line 12709 sub clutter {
|
Line 13117 sub clutter {
|
# &logthis("Got a blank emb style"); |
# &logthis("Got a blank emb style"); |
} |
} |
} |
} |
} elsif ($thisfn =~ m{^/adm/$match_domain/$match_courseid/\d+/exttools?$}) { |
} elsif ($thisfn =~ m{^/adm/$match_domain/$match_courseid/\d+/ext\.tool$}) { |
$thisfn='/adm/wrapper'.$thisfn; |
$thisfn='/adm/wrapper'.$thisfn; |
} |
} |
return $thisfn; |
return $thisfn; |
Line 12796 sub get_dns {
|
Line 13204 sub get_dns {
|
} |
} |
while (%alldns) { |
while (%alldns) { |
my ($dns) = sort { $b cmp $a } keys(%alldns); |
my ($dns) = sort { $b cmp $a } keys(%alldns); |
my $ua=new LWP::UserAgent; |
|
$ua->timeout(30); |
|
my $request=new HTTP::Request('GET',"$alldns{$dns}://$dns$url"); |
my $request=new HTTP::Request('GET',"$alldns{$dns}://$dns$url"); |
my $response=$ua->request($request); |
my $response = &LONCAPA::LWPReq::makerequest('',$request,'',\%perlvar,30,0); |
delete($alldns{$dns}); |
delete($alldns{$dns}); |
next if ($response->is_error()); |
next if ($response->is_error()); |
my @content = split("\n",$response->content); |
my @content = split("\n",$response->content); |
Line 12981 sub fetch_dns_checksums {
|
Line 13387 sub fetch_dns_checksums {
|
&purge_remembered(); |
&purge_remembered(); |
&reset_domain_info(); |
&reset_domain_info(); |
&reset_hosts_ip_info(); |
&reset_hosts_ip_info(); |
|
undef(%internetdom); |
undef(%name_to_host); |
undef(%name_to_host); |
undef(%hostname); |
undef(%hostname); |
undef(%hostdom); |
undef(%hostdom); |
Line 13023 sub fetch_dns_checksums {
|
Line 13430 sub fetch_dns_checksums {
|
return %hostdom; |
return %hostdom; |
} |
} |
|
|
|
sub all_host_intdom { |
|
&load_hosts_tab() if (!$loaded); |
|
return %internetdom; |
|
} |
|
|
sub is_library { |
sub is_library { |
&load_hosts_tab() if (!$loaded); |
&load_hosts_tab() if (!$loaded); |
|
|