Major bug fixed in enkeys.pl
Marten Terpstra
Wed Nov 2 19:18:30 CET 1994
Folks,
please replace your version of enkeys in the RIPE DB software with the
one below, it has a major (and I do mean major) bug. It appears when
indexing non cidr blocks in the database. Basically the split into
cidr blocks does not work ... That is fixed now.
-Marten
# enkeys - extract keys from entry
#
# $RCSfile: enkeys.pl,v $
# $Revision: 0.18 $
# $Author: marten $
# $Date: 1994/11/02 18:12:49 $
#
require "misc.pl";
require "cldb.pl";
sub enkeys {
local(*e) = @_;
local(@keys);
$type = &entype(*e);
foreach (split(/\s+/, $KEYS{$type})) {
$value = $e{$_};
if ($value =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
@keys = (@keys, &getipkeys($value));
}
else {
@keys = (@keys, &getalkeys($value));
}
}
return @keys;
}
sub getalkeys {
local ($value) = @_;
local ($i, @result);
@result = split(/\s+/, $value);
$i = $#result;
while ($i >= 0) {
$result[$i] =~ tr/A-Z/a-z/;
$result[$i] =~ tr/a-z0-9\-,\._'\///cd;
#' quote to fool emacs perl mode
if (length($result[$i])<2) {
splice(@result, "$i", 1);
}
$i--;
}
return @result;
}
sub getipkeys {
local($value) = @_;
local(@ipkeys) = ();
local($counter) = 0;
foreach (split(/\n/, $value)) {
foreach (&old_to_new($_)) {
$ipkeys[$counter++] = $_;
}
}
return @ipkeys;
}
#
# Old routine, before cldb era.
#
#sub getipkeys {
# local ($value) = @_;
# local ($i, $inc, @result);
#
# @result = split(/\s+/, $value);
# if ($#result == 0) {
# $result[0] = &trailzero($result[0]);
# return @result;
# }
#
# local($lo, $hi) = (&quad2int($result[0]), &quad2int($result[2]));
# $result[0] = &trailzero($result[0]) . "-" . &trailzero($result[2]);
#
# $inc = 256 if ($lo < &quad2int("224.0.0.0"));
# $inc = 256**2 if ($lo < &quad2int("192.0.0.0"));
# $inc = 256**3 if ($lo < &quad2int("128.0.0.0"));
#
#
# for ($i=$lo; $i<=$hi; $i+=$inc) {
# @result = (@result, &trailzero(&int2quad($i)));
# }
# splice(@result,1,2);
# return @result;
#}
1;
-------- Logged at Wed Nov 2 19:48:43 MET 1994 ---------
[ rr-impl Archive ]