Fix caching bug with PTR records
Attempt to fix callback occurring immediately by calling it via AddTimer git-svn-id: https://svn.perl.org/qpsmtpd/trunk@590 958fd67b-6ff1-0310-b445-bb7760255be9
This commit is contained in:
parent
7cc114edd5
commit
9c8df69be1
@ -73,9 +73,12 @@ sub _query {
|
|||||||
$asker->run_callback("NXDNS", $host);
|
$asker->run_callback("NXDNS", $host);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (exists $self->{cache}{$type}{$host}) {
|
if (exists($self->{cache}{$type}{$host}) &&
|
||||||
|
$self->{cache_timeout}{$type}{$host} >= $now) {
|
||||||
# print "CACHE HIT!\n";
|
# print "CACHE HIT!\n";
|
||||||
|
$self->AddTimer(0, sub {
|
||||||
$asker->run_callback($self->{cache}{$type}{$host}, $host);
|
$asker->run_callback($self->{cache}{$type}{$host}, $host);
|
||||||
|
});
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,8 +212,11 @@ sub event_read {
|
|||||||
foreach my $rr ($packet->answer) {
|
foreach my $rr ($packet->answer) {
|
||||||
if (my $host_method = $type_to_host{$rr->type}) {
|
if (my $host_method = $type_to_host{$rr->type}) {
|
||||||
my $host = $rr->$host_method;
|
my $host = $rr->$host_method;
|
||||||
$self->{cache}{$rr->type}{$query} = $host;
|
my $type = $rr->type;
|
||||||
$self->{cache_timeout}{$rr->type}{$query} = $now + $rr->ttl;
|
$type = 'A' if $type eq 'PTR';
|
||||||
|
# print "DNS Lookup $type $query = $host; TTL = ", $rr->ttl, "\n";
|
||||||
|
$self->{cache}{$type}{$query} = $host;
|
||||||
|
$self->{cache_timeout}{$type}{$query} = $now + $rr->ttl;
|
||||||
$qobj->run_callback($host);
|
$qobj->run_callback($host);
|
||||||
}
|
}
|
||||||
elsif ($rr->type eq "MX") {
|
elsif ($rr->type eq "MX") {
|
||||||
|
Loading…
Reference in New Issue
Block a user