version 1.1075.2.127.2.1, 2017/06/21 16:26:43
|
version 1.1075.2.127.6.2, 2020/02/19 23:36:09
|
Line 4946 sub check_ip_acc {
|
Line 4946 sub check_ip_acc {
|
if (!defined($acc) || $acc =~ /^\s*$/ || $acc =~/^\s*no\s*$/i) { |
if (!defined($acc) || $acc =~ /^\s*$/ || $acc =~/^\s*no\s*$/i) { |
return 1; |
return 1; |
} |
} |
my $allowed=0; |
my ($ip,$allowed); |
my $ip=$ENV{'REMOTE_ADDR'} || $clientip || $env{'request.host'}; |
if (($ENV{'REMOTE_ADDR'} eq '127.0.0.1') || |
|
($ENV{'REMOTE_ADDR'} eq &Apache::lonnet::get_host_ip($Apache::lonnet::perlvar{'lonHostID'}))) { |
my $name; |
$ip = $env{'request.host'} || $ENV{'REMOTE_ADDR'} || $clientip; |
foreach my $pattern (split(',',$acc)) { |
} else { |
$pattern =~ s/^\s*//; |
$ip = $ENV{'REMOTE_ADDR'} || $env{'request.host'} || $clientip; |
$pattern =~ s/\s*$//; |
|
if ($pattern =~ /\*$/) { |
|
#35.8.* |
|
$pattern=~s/\*//; |
|
if ($ip =~ /^\Q$pattern\E/) { $allowed=1; } |
|
} elsif ($pattern =~ /(\d+\.\d+\.\d+)\.\[(\d+)-(\d+)\]$/) { |
|
#35.8.3.[34-56] |
|
my $low=$2; |
|
my $high=$3; |
|
$pattern=$1; |
|
if ($ip =~ /^\Q$pattern\E/) { |
|
my $last=(split(/\./,$ip))[3]; |
|
if ($last <=$high && $last >=$low) { $allowed=1; } |
|
} |
|
} elsif ($pattern =~ /^\*/) { |
|
#*.msu.edu |
|
$pattern=~s/\*//; |
|
if (!defined($name)) { |
|
use Socket; |
|
my $netaddr=inet_aton($ip); |
|
($name)=gethostbyaddr($netaddr,AF_INET); |
|
} |
|
if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } |
|
} elsif ($pattern =~ /\d+\.\d+\.\d+\.\d+/) { |
|
#127.0.0.1 |
|
if ($ip =~ /^\Q$pattern\E/) { $allowed=1; } |
|
} else { |
|
#some.name.com |
|
if (!defined($name)) { |
|
use Socket; |
|
my $netaddr=inet_aton($ip); |
|
($name)=gethostbyaddr($netaddr,AF_INET); |
|
} |
|
if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } |
|
} |
|
if ($allowed) { last; } |
|
} |
} |
return $allowed; |
|
} |
|
|
|
sub check_slotip_acc { |
|
my ($acc,$clientip)=@_; |
|
&Apache::lonxml::debug("acc is $acc"); |
|
if (!defined($acc) || $acc =~ /^\s*$/ || $acc =~/^\s*no\s*$/i) { |
|
return 1; |
|
} |
|
my $allowed; |
|
my $ip=$ENV{'REMOTE_ADDR'} || $clientip || $env{'request.host'}; |
|
|
|
my $name; |
my $name; |
my %access = ( |
my %access = ( |
Line 5011 sub check_slotip_acc {
|
Line 4964 sub check_slotip_acc {
|
foreach my $item (split(',',$acc)) { |
foreach my $item (split(',',$acc)) { |
$item =~ s/^\s*//; |
$item =~ s/^\s*//; |
$item =~ s/\s*$//; |
$item =~ s/\s*$//; |
my $pattern; |
|
if ($item =~ /^\!(.+)$/) { |
if ($item =~ /^\!(.+)$/) { |
push(@denies,$1); |
push(@denies,$1); |
} else { |
} else { |
push(@allows,$item); |
push(@allows,$item); |
} |
} |
} |
} |
my $numdenies = scalar(@denies); |
my $numdenies = scalar(@denies); |
my $numallows = scalar(@allows); |
my $numallows = scalar(@allows); |
my $count = 0; |
my $count = 0; |
foreach my $pattern (@denies,@allows) { |
foreach my $pattern (@denies,@allows) { |
$count ++; |
$count ++; |
my $acctype = 'allowfrom'; |
my $acctype = 'allowfrom'; |
if ($count <= $numdenies) { |
if ($count <= $numdenies) { |