equal
deleted
inserted
replaced
98 } |
98 } |
99 |
99 |
100 sub serial { |
100 sub serial { |
101 my $domain = shift; |
101 my $domain = shift; |
102 my %resflags = (nameservers => \@extns, @_); |
102 my %resflags = (nameservers => \@extns, @_); |
|
103 my $aa = delete $resflags{aa}; |
103 my $nameservers = join ',' => @{$resflags{nameservers}}; |
104 my $nameservers = join ',' => @{$resflags{nameservers}}; |
104 |
105 |
105 my $r = Net::DNS::Resolver->new(%resflags); |
106 my $r = Net::DNS::Resolver->new(%resflags); |
106 my $q; |
107 my $q; |
107 |
108 |
108 for (my $i = 3; $i; --$i) { |
109 for (my $i = 3; $i; --$i) { |
109 $q = $r->query($domain, 'SOA') and last; |
110 $q = $r->query($domain, 'SOA') and last; |
110 } |
111 } |
111 die $r->errorstring, "\@$nameservers\n" if not $q; |
112 die $r->errorstring, "\@$nameservers\n" if not $q; |
|
113 die "no aa \@$nameservers\n" if $aa and not $q->header->aa; |
112 |
114 |
113 return (map { $_->serial } grep { $_->type eq 'SOA' } $q->answer)[0]; |
115 return (map { $_->serial } grep { $_->type eq 'SOA' } $q->answer)[0]; |
114 } |
116 } |
115 |
117 |
116 # - the nameservers known from the ns records |
118 # - the nameservers known from the ns records |
124 |
126 |
125 sub ns_ok { |
127 sub ns_ok { |
126 my ($domain, $reference, $override) = @_; |
128 my ($domain, $reference, $override) = @_; |
127 |
129 |
128 my (@errs, @ns); |
130 my (@errs, @ns); |
|
131 # obtain an authoritive list of nameservers from the reference server |
129 my @our = eval { sort +ns($domain, nameservers => [$reference], aa => 1, override => $override) }; |
132 my @our = eval { sort +ns($domain, nameservers => [$reference], aa => 1, override => $override) }; |
130 if (chomp $@) { |
133 if (chomp $@) { |
131 push @errs, $@; |
134 push @errs, $@; |
132 push @our, $@; |
135 push @our, $@; |
133 } |
136 } |
134 |
137 |
135 my @their = eval { sort +ns($domain) }; |
138 # obtain a list of nameservers from some public nameserver |
|
139 my @public = eval { sort +ns($domain) }; |
136 if (chomp $@) { |
140 if (chomp $@) { |
137 push @errs, $@; |
141 push @errs, $@; |
138 push @their, $@; |
142 push @public, $@; |
139 } |
143 } |
140 |
144 |
141 if (@errs or "@our" ne "@their") { |
145 if (@errs or "@our" ne "@public") { |
142 local $" = ', '; |
146 local $" = ', '; |
143 die sprintf "NS differ (%s: @our) vs (public: @their)\n", |
147 die sprintf "NS differ (%s: @our) vs (public: @public)\n", |
144 $override->{$domain} ? 'override' : 'our'; |
148 $override->{$domain} ? 'override' : 'our'; |
145 |
149 |
146 } |
150 } |
147 |
151 |
148 @ns = uniq sort @our, @their; |
152 @ns = uniq sort @our, @public; |
149 ### @ns |
153 ### @ns |
150 return @ns; |
154 return @ns; |
151 } |
155 } |
152 |
156 |
153 sub serial_ok { |
157 sub serial_ok { |