version 1.887, 2007/06/11 19:31:41
|
version 1.896, 2007/07/13 18:35:39
|
Line 149 sub create_connection {
|
Line 149 sub create_connection {
|
Type => SOCK_STREAM, |
Type => SOCK_STREAM, |
Timeout => 10); |
Timeout => 10); |
return 0 if (!$client); |
return 0 if (!$client); |
print $client (join(':',$hostname,$lonid,&machine_ids($lonid))."\n"); |
print $client (join(':',$hostname,$lonid,&machine_ids($hostname))."\n"); |
my $result = <$client>; |
my $result = <$client>; |
chomp($result); |
chomp($result); |
return 1 if ($result eq 'done'); |
return 1 if ($result eq 'done'); |
Line 214 sub reply {
|
Line 214 sub reply {
|
# ----------------------------------------------------------- Send USR1 to lonc |
# ----------------------------------------------------------- Send USR1 to lonc |
|
|
sub reconlonc { |
sub reconlonc { |
|
my ($lonid) = @_; |
|
my $hostname = &hostname($lonid); |
|
if ($lonid) { |
|
my $peerfile="$perlvar{'lonSockDir'}/$hostname"; |
|
if ($hostname && -e $peerfile) { |
|
&logthis("Trying to reconnect lonc for $lonid ($hostname)"); |
|
my $client=IO::Socket::UNIX->new(Peer => $peerfile, |
|
Type => SOCK_STREAM, |
|
Timeout => 10); |
|
if ($client) { |
|
print $client ("reset_retries\n"); |
|
my $answer=<$client>; |
|
#reset just this one. |
|
} |
|
} |
|
return; |
|
} |
|
|
&logthis("Trying to reconnect lonc"); |
&logthis("Trying to reconnect lonc"); |
my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid"; |
my $loncfile="$perlvar{'lonDaemons'}/logs/lonc.pid"; |
if (open(my $fh,"<$loncfile")) { |
if (open(my $fh,"<$loncfile")) { |
Line 1378 sub ssi {
|
Line 1396 sub ssi {
|
my $request; |
my $request; |
|
|
$form{'no_update_last_known'}=1; |
$form{'no_update_last_known'}=1; |
|
&Apache::lonenc::check_encrypt(\$fn); |
if (%form) { |
if (%form) { |
$request=new HTTP::Request('POST',&absolute_url().$fn); |
$request=new HTTP::Request('POST',&absolute_url().$fn); |
$request->content(join('&',map { &escape($_).'='.&escape($form{$_}) } keys %form)); |
$request->content(join('&',map { &escape($_).'='.&escape($form{$_}) } keys %form)); |
Line 3786 sub customaccess {
|
Line 3804 sub customaccess {
|
$ucrs = &LONCAPA::clean_username($ucrs); |
$ucrs = &LONCAPA::clean_username($ucrs); |
my $access=0; |
my $access=0; |
foreach my $right (split(/\s*\,\s*/,&metadata($uri,'rule_rights'))) { |
foreach my $right (split(/\s*\,\s*/,&metadata($uri,'rule_rights'))) { |
my ($effect,$realm,$role)=split(/\:/,$right); |
my ($effect,$realm,$role,$type)=split(/\:/,$right); |
if ($role) { |
if ($type eq 'user') { |
if ($role ne $urole) { next; } |
foreach my $scope (split(/\s*\,\s*/,$realm)) { |
} |
my ($tdom,$tuname)=split(m{/},$scope); |
foreach my $scope (split(/\s*\,\s*/,$realm)) { |
if ($tdom) { |
my ($tdom,$tcrs,$tsec)=split(/\_/,$scope); |
if ($tdom ne $env{'user.domain'}) { next; } |
if ($tdom) { |
} |
if ($tdom ne $udom) { next; } |
if ($tuname) { |
} |
if ($tuname ne $env{'user.name'}) { next; } |
if ($tcrs) { |
} |
if ($tcrs ne $ucrs) { next; } |
$access=($effect eq 'allow'); |
} |
last; |
if ($tsec) { |
} |
if ($tsec ne $usec) { next; } |
} else { |
} |
if ($role) { |
$access=($effect eq 'allow'); |
if ($role ne $urole) { next; } |
last; |
} |
} |
foreach my $scope (split(/\s*\,\s*/,$realm)) { |
if ($realm eq '' && $role eq '') { |
my ($tdom,$tcrs,$tsec)=split(/\_/,$scope); |
$access=($effect eq 'allow'); |
if ($tdom) { |
|
if ($tdom ne $udom) { next; } |
|
} |
|
if ($tcrs) { |
|
if ($tcrs ne $ucrs) { next; } |
|
} |
|
if ($tsec) { |
|
if ($tsec ne $usec) { next; } |
|
} |
|
$access=($effect eq 'allow'); |
|
last; |
|
} |
|
if ($realm eq '' && $role eq '') { |
|
$access=($effect eq 'allow'); |
|
} |
} |
} |
} |
} |
return $access; |
return $access; |
Line 7066 sub getCODE {
|
Line 7098 sub getCODE {
|
sub rndseed { |
sub rndseed { |
my ($symb,$courseid,$domain,$username)=@_; |
my ($symb,$courseid,$domain,$username)=@_; |
my ($wsymb,$wcourseid,$wdomain,$wusername)=&whichuser(); |
my ($wsymb,$wcourseid,$wdomain,$wusername)=&whichuser(); |
if (!$symb) { |
if (!defined($symb)) { |
unless ($symb=$wsymb) { return time; } |
unless ($symb=$wsymb) { return time; } |
} |
} |
if (!$courseid) { $courseid=$wcourseid; } |
if (!$courseid) { $courseid=$wcourseid; } |
Line 7600 sub machine_ids {
|
Line 7632 sub machine_ids {
|
my ($hostname) = @_; |
my ($hostname) = @_; |
$hostname ||= &hostname($perlvar{'lonHostID'}); |
$hostname ||= &hostname($perlvar{'lonHostID'}); |
my @ids; |
my @ids; |
my %hostname = &all_hostnames(); |
my %name_to_host = &all_names(); |
while( my($id, $name) = each(%hostname)) { |
if (ref($name_to_host{$hostname}) eq 'ARRAY') { |
# &logthis("-$id-$name-$hostname-"); |
return @{ $name_to_host{$hostname} }; |
if ($hostname eq $name) { |
|
push(@ids,$id); |
|
} |
|
} |
} |
return @ids; |
return; |
} |
} |
|
|
sub additional_machine_domains { |
sub additional_machine_domains { |
Line 7835 sub get_dns {
|
Line 7864 sub get_dns {
|
my %hostdom; |
my %hostdom; |
my %libserv; |
my %libserv; |
my $loaded; |
my $loaded; |
|
my %name_to_host; |
|
|
sub parse_hosts_tab { |
sub parse_hosts_tab { |
my ($file) = @_; |
my ($file) = @_; |
Line 7846 sub get_dns {
|
Line 7876 sub get_dns {
|
$name=~s/\s//g; |
$name=~s/\s//g; |
if ($id && $domain && $role && $name) { |
if ($id && $domain && $role && $name) { |
$hostname{$id}=$name; |
$hostname{$id}=$name; |
|
push(@{$name_to_host{$name}}, $id); |
$hostdom{$id}=$domain; |
$hostdom{$id}=$domain; |
if ($role eq 'library') { $libserv{$id}=$name; } |
if ($role eq 'library') { $libserv{$id}=$name; } |
} |
} |
Line 7855 sub get_dns {
|
Line 7886 sub get_dns {
|
sub reset_hosts_info { |
sub reset_hosts_info { |
&reset_domain_info(); |
&reset_domain_info(); |
&reset_hosts_ip_info(); |
&reset_hosts_ip_info(); |
|
undef(%name_to_host); |
undef(%hostname); |
undef(%hostname); |
undef(%hostdom); |
undef(%hostdom); |
undef(%libserv); |
undef(%libserv); |
Line 7884 sub get_dns {
|
Line 7916 sub get_dns {
|
return %hostname; |
return %hostname; |
} |
} |
|
|
|
sub all_names { |
|
&load_hosts_tab() if (!$loaded); |
|
|
|
return %name_to_host; |
|
} |
|
|
sub is_library { |
sub is_library { |
&load_hosts_tab() if (!$loaded); |
&load_hosts_tab() if (!$loaded); |
|
|
Line 7940 sub get_dns {
|
Line 7978 sub get_dns {
|
my %name_to_ip; |
my %name_to_ip; |
my %lonid_to_ip; |
my %lonid_to_ip; |
|
|
my %valid_ip; |
|
sub valid_ip { |
|
my ($ip) = @_; |
|
if (exists($iphost{$ip}) || exists($valid_ip{$ip})) { |
|
return 1; |
|
} |
|
my $name = gethostbyip($ip); |
|
my $lonid = &hostname($name); |
|
if (defined($lonid)) { |
|
$valid_ip{$ip} = $lonid; |
|
return 1; |
|
} |
|
my %iphosts = &get_iphost(); |
|
if (ref($iphost{$ip})) { |
|
return 1; |
|
} |
|
} |
|
|
|
sub get_hosts_from_ip { |
sub get_hosts_from_ip { |
my ($ip) = @_; |
my ($ip) = @_; |
my %iphosts = &get_iphost(); |
my %iphosts = &get_iphost(); |
Line 7989 sub get_dns {
|
Line 8009 sub get_dns {
|
|
|
sub get_iphost { |
sub get_iphost { |
my ($ignore_cache) = @_; |
my ($ignore_cache) = @_; |
|
|
if (!$ignore_cache) { |
if (!$ignore_cache) { |
if (%iphost) { |
if (%iphost) { |
return %iphost; |
return %iphost; |
Line 8002 sub get_dns {
|
Line 8023 sub get_dns {
|
return %iphost; |
return %iphost; |
} |
} |
} |
} |
my %hostname = &all_hostnames(); |
|
foreach my $id (keys(%hostname)) { |
# get yesterday's info for fallback |
my $name=&hostname($id); |
my %old_name_to_ip; |
|
my ($ip_info,$cached)= |
|
&Apache::lonnet::is_cached_new('iphost','iphost'); |
|
if ($cached) { |
|
%old_name_to_ip = %{$ip_info->[1]}; |
|
} |
|
|
|
my %name_to_host = &all_names(); |
|
foreach my $name (keys(%name_to_host)) { |
my $ip; |
my $ip; |
if (!exists($name_to_ip{$name})) { |
if (!exists($name_to_ip{$name})) { |
$ip = gethostbyname($name); |
$ip = gethostbyname($name); |
if (!$ip || length($ip) ne 4) { |
if (!$ip || length($ip) ne 4) { |
&logthis("Skipping host $id name $name no IP found"); |
if (defined($old_name_to_ip{$name})) { |
next; |
$ip = $old_name_to_ip{$name}; |
|
&logthis("Can't find $name defaulting to old $ip"); |
|
} else { |
|
&logthis("Name $name no IP found"); |
|
next; |
|
} |
|
} else { |
|
$ip=inet_ntoa($ip); |
} |
} |
$ip=inet_ntoa($ip); |
|
$name_to_ip{$name} = $ip; |
$name_to_ip{$name} = $ip; |
} else { |
} else { |
$ip = $name_to_ip{$name}; |
$ip = $name_to_ip{$name}; |
} |
} |
$lonid_to_ip{$id} = $ip; |
foreach my $id (@{ $name_to_host{$name} }) { |
push(@{$iphost{$ip}},$id); |
$lonid_to_ip{$id} = $ip; |
|
} |
|
push(@{$iphost{$ip}},@{$name_to_host{$name}}); |
} |
} |
&Apache::lonnet::do_cache_new('iphost','iphost', |
&Apache::lonnet::do_cache_new('iphost','iphost', |
[\%iphost,\%name_to_ip,\%lonid_to_ip], |
[\%iphost,\%name_to_ip,\%lonid_to_ip], |
24*60*60); |
48*60*60); |
|
|
return %iphost; |
return %iphost; |
} |
} |