Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:paddg
dnswalk
dnswalk-my.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File dnswalk-my.patch of Package dnswalk
--- dnswalk.old/dnswalk 2018-07-11 12:35:36.893129681 +0200 +++ dnswalk.new/dnswalk 2018-07-11 12:36:40.846103490 +0200 @@ -17,12 +17,14 @@ # dnswalk has been run previously.) # -F Enable "facist" checking. (See man page) # -l Check lame delegations +# -p Check PTR existence for A and AAAA use Getopt::Std; use IO::Socket; use Net::DNS; use Net::IP; use Socket6; +use Net::IPv6Addr; getopts("D:rfiadmFl"); @@ -83,7 +85,7 @@ SERVER: foreach $server (@servers) { print STDERR "Getting zone transfer of $domain from $server..."; - my $res = new Net::DNS::Resolver; + my $res = new Net::DNS::Resolver( tcp_timeout=>2, udp_timeout=>1, retry=>1 ); $res->nameservers($server); @zone=$res->axfr($domain); unless (@zone) { @@ -125,7 +127,7 @@ my (%servhash); return if (!$master); # this is null if there is no SOA or not found return if (!$domain); - $res = new Net::DNS::Resolver; + $res = new Net::DNS::Resolver( tcp_timeout=>2, udp_timeout=>1, retry=>1 ); $ns_req = $res->query($domain, "NS"); &printerr("FAIL", "No nameservers found for $domain: " . $res->errorstring . "\n") @@ -148,7 +150,7 @@ # return 'master' server for zone sub getmaster { my ($zone)=$_[0]; - my ($res) = new Net::DNS::Resolver; + my ($res) = new Net::DNS::Resolver( tcp_timeout=>2, udp_timeout=>1, retry=>1 ); my ($packet) = new Net::DNS::Packet($zone, "SOA", "IN"); my ($soa_req) = $res->send($packet); unless (defined($soa_req)) { @@ -196,25 +198,25 @@ @keys = split(/\./, $rr->name); if (scalar(@keys) == 6 || scalar(@keys) == 34) { $af = (scalar(@keys) == 6) ? AF_INET : AF_INET6; + $t = ($af == AF_INET) ? "A" : "AAAA"; # check if forward name exists, but only if reverse is # a full IP addr ($name, $aliases, $addrtype, $length, @addrs) = - gethostbyname($rr->ptrdname); + mygethostbyname($rr->ptrdname, $t); if (!$name) { &printerr("WARN", $rr->name . " PTR " . $rr->ptrdname . ": unknown host\n"); } - elsif (!&equal($name,$rr->ptrdname)) { - &printerr("WARN", $rr->name . " PTR " . $rr->ptrdname . - ": CNAME (to $name)\n"); - } +# elsif (!&equal($name,$rr->ptrdname)) { +# &printerr("WARN", $rr->name . " PTR " . $rr->ptrdname . +# ": CNAME (to $name)\n"); +# } elsif (!&matchaddrlist($rr->name)) { - $t = ($af == AF_INET) ? "A" : "AAAA"; &printerr("WARN", $rr->name . " PTR " . $rr->ptrdname . ": $t record not found\n"); } } - } elsif ($rr->type eq "A" || $rr->type eq "AAAA") { + } elsif ($opt_p && ($rr->type eq "A" || $rr->type eq "AAAA")) { print STDERR 'a' if $opt_d; $af = ($rr->type eq "A") ? AF_INET : AF_INET6; # check to see that a reverse PTR record exists @@ -259,13 +261,13 @@ ": Nameserver must be a hostname\n"); } ($name, $aliases, $addrtype, $length, - @addrs)=gethostbyname($rr->nsdname); + @addrs)=mygethostbyname($rr->nsdname,"A"); if (!$name) { &printerr("BAD", $rr->name . " NS " . $rr->nsdname . ": unknown host\n"); - } elsif (!&equal($name,$rr->nsdname)) { - &printerr("BAD", $rr->name . " NS " . $rr->nsdname . - ": CNAME (to $name)\n"); +# } elsif (!&equal($name,$rr->nsdname)) { +# &printerr("BAD", $rr->name . " NS " . $rr->nsdname . +# ": CNAME (to $name)\n"); } } elsif ($rr->type eq "MX") { print STDERR 'm' if $opt_d; @@ -275,29 +277,36 @@ ": Mail exchange must be a hostname\n"); } ($name, $aliases, $addrtype, $length, - @addrs)=gethostbyname($rr->exchange); + @addrs)=mygethostbyname($rr->exchange, "A"); if (!$name) { &printerr("WARN", $rr->name . " MX " . $rr->exchange . ": unknown host\n"); } - elsif (!&equal($name,$rr->exchange)) { - &printerr("WARN", $rr->name . " MX " . $rr->exchange . - ": CNAME (to $name)\n"); - } +# elsif (!&equal($name,$rr->exchange)) { +# &printerr("WARN", $rr->name . " MX " . $rr->exchange . +# ": CNAME (to $name)\n"); +# } } elsif ($rr->type eq "CNAME") { print STDERR 'c' if $opt_d; +# ($name, $aliases, $addrtype, $length, +# @addrs)=mygethostbyname($rr->cname, "ANY"); ($name, $aliases, $addrtype, $length, - @addrs)=gethostbyname($rr->cname); + @addrs)=mygethostbyname($rr->cname, "A"); if (&isipaddr($rr->cname)) { &printerr("BAD", $rr->name . " CNAME " . $rr->cname . ": alias must be a hostname\n"); } if (!$name) { - &printerr("WARN", $rr->name . " CNAME " . $rr->cname . - ": unknown host\n"); - } elsif (!&equal($name,$rr->cname)) { - &printerr("WARN", $rr->name . " CNAME " . $rr->cname . - ": CNAME (to $name)\n"); + ($name, $aliases, $addrtype, $length, @addrs)=mygethostbyname($rr->cname, "NAPTR"); + if (!$name) { + ($name, $aliases, $addrtype, $length, @addrs)=mygethostbyname($rr->cname, "SRV"); + if (!$name) { + &printerr("WARN", $rr->name . " CNAME " . $rr->cname . ": unknown host\n"); + } + } +# } elsif (!&equal($name,$rr->cname)) { +# &printerr("WARN", $rr->name . " CNAME " . $rr->cname . +# ": CNAME (to $name)\n"); } } } @@ -341,18 +350,29 @@ return $ip->version; } sub matchaddrlist { - local(@x) = reverse( split(/\./, $_[0]) ); + my $name = shift; + #print "DEBUG: name=$name", $/; + local(@x) = reverse( split(/\./, $name) ); shift @x; local($arpatype) = shift @x; - if ($arpatype =~ /in-addr/i) { - $match = pack('C4', @x); - } - else { - $match = pack('H32', join('', @x)); - } local($found)=0; - foreach $i (@addrs) { - $found=1 if ($i eq $match); + if ($arpatype =~ /in-addr/i) { + $match = join(".", @x ); + foreach $i (@addrs) { + $found=1 if ($i->address eq $match); + } + } elsif ( $arpatype =~ /ip6/i) { + #print "DEBUG: arpatype=ip6", $/; + foreach $i (@addrs) { + $name .= '.'; + my $x = new Net::IPv6Addr($i->address); + my $arpa = $x->to_string_ip6_int(); + $arpa =~ s/INT/arpa/; + $arpa = lc( $arpa ); + #print "DEBUG: arpa=$arpa", $/; + $found=1 if ($name eq $arpa); + } + } return $found; } @@ -382,7 +402,7 @@ my ($zone,$nameserver)=@_; my ($packet) = new Net::DNS::Packet($zone, "SOA", "IN"); my ($soa_req); - my ($res) = new Net::DNS::Resolver; + my ($res) = new Net::DNS::Resolver( tcp_timeout=>2, udp_timeout=>1, retry=>1 ); unless ($res->nameservers($nameserver)) { &printerr("FAIL", "Cannot find address for nameserver: " . $res->errorstring . "\n"); @@ -398,3 +418,23 @@ unless ($soa_req->header->aa); return; } + +sub mygethostbyname { + my $qname = shift; + my $type = shift; + + #print "DEBUG: trying to resolve $qname|$type", $/; + my $res = Net::DNS::Resolver->new; + if ( my $dns_packet = $res->query($qname, $type) ) { + foreach my $question ( $dns_packet->question ) { + $name = $question->qname; + } + $length = $dns_packet->answersize; + @addrs = $dns_packet->answer; + + return ($name, "", $type, $length, @addrs); + } else { + # print "ERROR: unable to resolve $qname|$type", $/; + } + return (); +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor