Modify WebGUI IP fields to use CIDR format instead of a regular expression.

Multiple IPs are separated by commas, whitespace is ignored.
In groups, that affects the ipFilter field,  User::isInGroup.
In settings, that affects Settings::debugIp and Session::ErrorHandler::canShowDebug.

Fixed a bug in WebGUI::Utility::isInSubnet where Net::Subnets->check needs a scalar.

Modified t/User.t to use addresses in CIDR format.
This commit is contained in:
Colin Kuskie 2006-02-14 22:35:21 +00:00
parent c6bc09f79c
commit cd6759f311
7 changed files with 55 additions and 26 deletions

View file

@ -258,16 +258,10 @@ sub isInGroup {
### Check IP Address
if ($group->get("ipFilter")) {
my $ipFilter = $group->get("ipFilter");
$ipFilter =~ s/\s//g;
$ipFilter =~ s/\./\\\./g;
my @ips = split(";",$ipFilter);
foreach my $ip (@ips) {
if ($self->session->env->get("REMOTE_ADDR") =~ /^$ip/) {
$isInGroup->{$uid}{$gid} = 1;
$self->session->stow->set("isInGroup",$isInGroup);
return 1;
}
}
$ipFilter =~ s/\s+//g;
my @ips = split(",",$ipFilter);
my $ipMatch = WebGUI::Utility::isInSubnet($self->session->env->get("REMOTE_ADDR"), [ @ips ]);
return 1 if $ipMatch;
}
return 0 if ($uid eq '1'); #Visitor is in no other groups
return 1 if ($uid eq '3'); #Admin is in every group