Fix display of CNAME/A records in log file.

print_dns_result() will show the number of records
found _and_ put a heading for this type of record
into the logfile.

So we can't get both right (short of changing
print_dns_result(), what I don't like to do
just now): either the count will be too high,
as we can't subtract wrong records from it, or
the "heading" will follow after the list of
records in the log. So we'll have to live with
the former, until print_dns_result() can be
fixed.

Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
Thomas Hochstein 2016-01-09 12:34:21 +01:00
parent d531f437f0
commit 136e4166ed
2 changed files with 10 additions and 8 deletions

View file

@ -1,3 +1,9 @@
Version 0.6.3 (unreleased)
* Fix display of CNAME/A records in log file.
Thomas Hochstein <thh@inter.net> Sat Jan 9 12:34:21 2016 +0100
Version 0.6.2 (2016-01-09) Version 0.6.2 (2016-01-09)
* Try to handle CNAMEs and resolve them to A records. * Try to handle CNAMEs and resolve them to A records.

View file

@ -9,7 +9,7 @@
# It can be redistributed and/or modified under the same terms under # It can be redistributed and/or modified under the same terms under
# which Perl itself is published. # which Perl itself is published.
our $VERSION = "0.6.2"; our $VERSION = "0.6.3 (unreleased)";
################################# Configuration ################################ ################################# Configuration ################################
# Please fill in a working configuration! # Please fill in a working configuration!
@ -154,27 +154,23 @@ sub gettargets {
# no MX record found; log and try A record(s) # no MX record found; log and try A record(s)
} else { } else {
print_dns_result($domain,'MX',undef,$resolver->errorstring,$logr); print_dns_result($domain,'MX',undef,$resolver->errorstring,$logr);
print(" Falling back to A record ...\n") if !($options{'q'}); print(" Falling back to A record(s) ...\n") if !($options{'q'});
# get A record(s) # get A record(s)
# may get CNAMEs instead ... # may get CNAMEs instead ...
if (my $query = $resolver->query($domain,'A','IN')) { if (my $query = $resolver->query($domain,'A','IN')) {
# save number of answers in a counter print_dns_result($domain,'A/CNAME',$query->header->ancount,undef,$logr);
my $acount = $query->header->ancount;
foreach my $rr ($query->answer) { foreach my $rr ($query->answer) {
if ($rr->type ne 'A') { if ($rr->type ne 'A') {
# decrease counter if it's not an A record
$acount--;
# report CNAMEs and don't add them to target list # report CNAMEs and don't add them to target list
if ($rr->type eq 'CNAME') { if ($rr->type eq 'CNAME') {
printf (" ~ '%s' is a CNAME for '%s' and will be resolved accordingly. \n",$rr->name,$rr->cname) if !($options{'q'}); printf (" ~ '%s' is a CNAME for '%s' and will be resolved accordingly. \n",$rr->name,$rr->cname) if !($options{'q'});
$$logr .= sprintf("CNAME resolved: %s -> %s\n",$rr->name,$rr->cname); $$logr .= sprintf("- CNAME resolved: %s -> %s\n",$rr->name,$rr->cname);
} }
next; next;
} }
$targets{$rr->address} = 0; $targets{$rr->address} = 0;
$$logr .= sprintf("- %s\n",$rr->address); $$logr .= sprintf("- %s\n",$rr->address);
}; };
print_dns_result($domain,'A',$acount,undef,$logr);
# no A record found either; log and fail # no A record found either; log and fail
} else { } else {
print_dns_result($domain,'A',undef,$resolver->errorstring,$logr); print_dns_result($domain,'A',undef,$resolver->errorstring,$logr);