Apache-DBILogger
view release on metacpan or search on metacpan
bin/webstat_resolver.pl view on Meta::CPAN
#!/usr/bin/perl
use strict;
use DBI;
use Getopt::Std;
use vars qw($dbh %opts);
use Net::DNS;
getopts("dc:m", \%opts);
#
# Moves rows from 'requests_insert' to 'requests' in the database
# $Id: webstat_resolver.pl,v 1.1 1998/08/23 10:31:03 ask Exp $
my $conffile = $opts{c} || "./webstat.conf";
require $conffile;
sub sqldo {
my $sqlcommand = shift;
# print "$sqlcommand\n";
# return;
my $sth = $dbh->prepare($sqlcommand);
die "Could not prepare [$DBI::errstr] ($sqlcommand)" unless $sth;
my $rv = $sth->execute;
die "Could not execute [$DBI::errstr] ($sqlcommand)" unless $rv;
$sth->finish;
}
$dbh = DBI->connect("DBI:$WebStat::Config::database{driver}:$WebStat::Config::database{database}:$WebStat::Config::database{host}", "$WebStat::Config::database{user}", "$WebStat::Config::database{password}" );
die "Cannot connect to database: $DBI::errstr ($!)" unless $dbh;
my $table = "requests_insert";
my $sth = $dbh->prepare(qq[select remoteip from $table \
where remotehost = '' group by remoteip]);
die "Could not prepare [$DBI::errstr]" unless $sth;
my $rv = $sth->execute;
die "Could not execute [$DBI::errstr]" unless $rv;
while (my ($remoteip) = $sth->fetchrow) {
my $res = new Net::DNS::Resolver;
print "$remoteip ";
my $query = $res->search($remoteip, "PTR");
if ($query) {
foreach my $rr ($query->answer) {
next unless $rr->type eq "PTR";
my $name = $rr->rdatastr;
$name =~ s/\.$//;
print "= $name\n";
sqldo(qq[update $table set remotehost="$name"
where remoteip="$remoteip"]);
last;
}
}
else {
print "failed: ", $res->errorstring, "\n";
next unless ($res->errorstring eq "NXDOMAIN");
sqldo(qq[update $table set remotehost='unresolved'
where remoteip="$remoteip"]);
}
}
$sth->finish;
$dbh->disconnect;
( run in 0.665 second using v1.01-cache-2.11-cpan-99c4e6809bf )