diff --git a/config/cfgroot/geoip-functions.pl b/config/cfgroot/geoip-functions.pl
index 623169eaf..be50d5e14 100644
--- a/config/cfgroot/geoip-functions.pl
+++ b/config/cfgroot/geoip-functions.pl
@@ -23,8 +23,23 @@
package GeoIP;
+use Geo::IP::PurePerl;
use Locale::Codes::Country;
+my $database;
+
+sub lookup($) {
+ my $address = shift;
+
+ # Load the database into memory if not already done
+ if (!$database) {
+ $database = Geo::IP::PurePerl->new(GEOIP_MEMORY_CACHE);
+ }
+
+ # Return the name of the country
+ return $database->country_code_by_name($address);
+}
+
# Function to get the flag icon for a specified country code.
sub get_flag_icon($) {
my ($input) = @_;
diff --git a/html/cgi-bin/country.cgi b/html/cgi-bin/country.cgi
index f2ae81300..8df2427a9 100644
--- a/html/cgi-bin/country.cgi
+++ b/html/cgi-bin/country.cgi
@@ -60,7 +60,7 @@ foreach my $country (@countries) {
$lines++;
# Convert country code into upper case.
- my $country_uc = uc($country);
+ $country = uc($country);
# Get flag icon for of the country.
my $flag_icon = &GeoIP::get_flag_icon($country);
@@ -69,8 +69,8 @@ foreach my $country (@countries) {
my $name = &GeoIP::get_full_country_name($country);
if ($lines % 2) {
- print "
 | ";
- print "$country_uc | ";
+ print " | ";
+ print "$country | ";
print "$name | \n";
} else {
$lines2++;
@@ -80,8 +80,8 @@ foreach my $country (@countries) {
$col="style='background-color:${Header::table1colour};'";
}
print "";
- print " | ";
- print "$country_uc | ";
+ print " | ";
+ print "$country | ";
print "$name | ";
print " | ";
diff --git a/html/cgi-bin/logs.cgi/firewalllog.dat b/html/cgi-bin/logs.cgi/firewalllog.dat
index 5c9722b85..e67a40a9f 100644
--- a/html/cgi-bin/logs.cgi/firewalllog.dat
+++ b/html/cgi-bin/logs.cgi/firewalllog.dat
@@ -13,7 +13,6 @@
#
use strict;
-use Geo::IP::PurePerl;
use Getopt::Std;
# enable only the following on debugging purpose
@@ -352,9 +351,7 @@ foreach $_ (@log)
$srcport=$1 if $packet =~ /SPT=(\d+)/;
$dstport=$1 if $packet =~ /DPT=(\d+)/;
- my $gi = Geo::IP::PurePerl->new();
- my $ccode = $gi->country_code_by_name($srcaddr);
- my $fcode = lc($ccode);
+ my $ccode = &GeoIP::lookup($srcaddr);
my $servi = uc(getservbyport($srcport, lc($proto)));
if ($servi ne '' && $srcport < 1024) {
@@ -386,10 +383,10 @@ foreach $_ (@log)
END
;
# Get flag icon for of the country.
- my $flag_icon = &GeoIP::get_flag_icon($fcode);
+ my $flag_icon = &GeoIP::get_flag_icon($ccode);
if ( $flag_icon) {
- print " | ";
+ print " | ";
} else {
print " | ";
}
diff --git a/html/cgi-bin/logs.cgi/firewalllogcountry.dat b/html/cgi-bin/logs.cgi/firewalllogcountry.dat
index f2b6048f7..949f2599d 100644
--- a/html/cgi-bin/logs.cgi/firewalllogcountry.dat
+++ b/html/cgi-bin/logs.cgi/firewalllogcountry.dat
@@ -11,7 +11,6 @@
# and Michael Tremer (www.ipfire.org)
use strict;
-use Geo::IP::PurePerl;
use Getopt::Std;
# enable only the following on debugging purpose
@@ -287,7 +286,6 @@ print "$Lang::tr{'firewall hits'} $longmonthstr $daystr: $lines
";
my $red_interface = &General::get_red_interface();
my $linesjc = 0;
my %tabjc;
-my $gi = Geo::IP::PurePerl->new();
if ($pienumber == -1 || $pienumber > $lines || $sortcolumn == 2) { $pienumber = $lines; };
$lines = 0;
@@ -310,7 +308,7 @@ foreach $_ (@log)
# Traffic from red
if($srcaddr ne '') {
# srcaddr is set
- my $ccode = $gi->country_code_by_name($srcaddr);
+ my $ccode = &GeoIP::lookup($srcaddr);
if ($ccode eq '') {
$ccode = 'unknown';
}
diff --git a/html/cgi-bin/logs.cgi/firewalllogip.dat b/html/cgi-bin/logs.cgi/firewalllogip.dat
index 9e366745d..c73d24fd6 100644
--- a/html/cgi-bin/logs.cgi/firewalllogip.dat
+++ b/html/cgi-bin/logs.cgi/firewalllogip.dat
@@ -11,7 +11,6 @@
# and Michael Tremer (www.ipfire.org)
use strict;
-use Geo::IP::PurePerl;
use Getopt::Std;
# enable only the following on debugging purpose
@@ -436,9 +435,7 @@ for($s=0;$s<$lines;$s++)
$col="bgcolor='$color{\"color$colorIndex\"}'";
print "
";
- my $gi = Geo::IP::PurePerl->new();
- my $ccode = $gi->country_code_by_name($key[$s]);
- my $fcode = lc($ccode);
+ my $ccode = &GeoIP::lookup($key[$s]);
$color++;
print " | ";
@@ -448,7 +445,7 @@ for($s=0;$s<$lines;$s++)
my $flag_icon = &GeoIP::get_flag_icon($ccode);
if ( $flag_icon ) {
- print " | ";
+ print " | ";
} else {
print " | ";
}
diff --git a/html/cgi-bin/logs.cgi/showrequestfromcountry.dat b/html/cgi-bin/logs.cgi/showrequestfromcountry.dat
index b6383ed59..605873ac0 100644
--- a/html/cgi-bin/logs.cgi/showrequestfromcountry.dat
+++ b/html/cgi-bin/logs.cgi/showrequestfromcountry.dat
@@ -13,9 +13,9 @@
#use CGI::Carp 'fatalsToBrowser';
#use strict;
-use Geo::IP::PurePerl;
require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/geoip-functions.pl";
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
@@ -152,7 +152,6 @@ if (!(open (FILE,($filestr =~ /.gz$/ ? "gzip -dc $filestr |" : $filestr)))) {
my $lines = 0;
my @log=();
my $country = $cgiparams{country};
-my $gi = Geo::IP::PurePerl->new();
if (!$skip)
{
@@ -179,7 +178,7 @@ if (!$skip)
}
elsif($srcaddr ne '') {
# or srcaddr matches country code
- my $ccode = $gi->country_code_by_name($srcaddr);
+ my $ccode = &GeoIP::lookup($srcaddr);
if($ccode eq uc($country)){
$log[$lines] = $_;
$lines++;