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:
		
							parent
							
								
									d531f437f0
								
							
						
					
					
						commit
						136e4166ed
					
				
					 2 changed files with 10 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
 | 
			
		||||
* Try to handle CNAMEs and resolve them to A records.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								checkmail.pl
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								checkmail.pl
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
# It can be redistributed and/or modified under the same terms under 
 | 
			
		||||
# which Perl itself is published.
 | 
			
		||||
 | 
			
		||||
our $VERSION = "0.6.2";
 | 
			
		||||
our $VERSION = "0.6.3 (unreleased)";
 | 
			
		||||
 | 
			
		||||
################################# Configuration ################################
 | 
			
		||||
# Please fill in a working configuration!
 | 
			
		||||
| 
						 | 
				
			
			@ -154,27 +154,23 @@ sub gettargets {
 | 
			
		|||
  # no MX record found; log and try A record(s)
 | 
			
		||||
  } else {
 | 
			
		||||
    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)
 | 
			
		||||
    # may get CNAMEs instead ...
 | 
			
		||||
    if (my $query = $resolver->query($domain,'A','IN')) {
 | 
			
		||||
      # save number of answers in a counter
 | 
			
		||||
      my $acount = $query->header->ancount;
 | 
			
		||||
      print_dns_result($domain,'A/CNAME',$query->header->ancount,undef,$logr);
 | 
			
		||||
      foreach my $rr ($query->answer) {
 | 
			
		||||
        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
 | 
			
		||||
          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'});
 | 
			
		||||
            $$logr .= sprintf("CNAME resolved: %s -> %s\n",$rr->name,$rr->cname);
 | 
			
		||||
            $$logr .= sprintf("- CNAME resolved: %s -> %s\n",$rr->name,$rr->cname);
 | 
			
		||||
          }
 | 
			
		||||
          next;
 | 
			
		||||
        }
 | 
			
		||||
        $targets{$rr->address} = 0;
 | 
			
		||||
        $$logr .= sprintf("- %s\n",$rr->address);
 | 
			
		||||
      };
 | 
			
		||||
      print_dns_result($domain,'A',$acount,undef,$logr);
 | 
			
		||||
    # no A record found either; log and fail
 | 
			
		||||
    } else {
 | 
			
		||||
      print_dns_result($domain,'A',undef,$resolver->errorstring,$logr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue