[libnet-dns-perl] 04/06: New upstream version 0.80.2
Ondrej Sury
ondrej at moszumanska.debian.org
Sun Nov 2 12:28:36 UTC 2014
This is an automated email from the git hooks/post-receive script.
ondrej pushed a commit to annotated tag debian/0.80.2-1
in repository libnet-dns-perl.
commit 4ce15b910b8e9d55a827632f3ccfc0449921cbe1
Author: Ondřej Surý <ondrej at sury.org>
Date: Fri Oct 24 12:45:55 2014 +0200
New upstream version 0.80.2
---
Changes | 30 +++++++++++++++-
META.json | 4 +--
META.yml | 2 +-
lib/Net/DNS.pm | 77 +++++++++++++++++++----------------------
lib/Net/DNS/Domain.pm | 21 +++++------
lib/Net/DNS/DomainName.pm | 6 ++--
lib/Net/DNS/Nameserver.pm | 6 ++--
lib/Net/DNS/Packet.pm | 15 ++++----
lib/Net/DNS/RR.pm | 34 ++++++++----------
lib/Net/DNS/RR/A.pm | 9 +++--
lib/Net/DNS/RR/AAAA.pm | 11 +++---
lib/Net/DNS/RR/APL.pm | 14 ++++----
lib/Net/DNS/RR/LOC.pm | 9 +++--
lib/Net/DNS/RR/OPT.pm | 7 ++--
lib/Net/DNS/RR/TKEY.pm | 10 +++---
lib/Net/DNS/RR/TSIG.pm | 49 +++++++++++++++-----------
lib/Net/DNS/Resolver.pm | 7 ++--
lib/Net/DNS/Resolver/Base.pm | 36 ++++++++++---------
lib/Net/DNS/Resolver/Recurse.pm | 42 +++++++++++++---------
lib/Net/DNS/Text.pm | 12 +++----
lib/Net/DNS/Update.pm | 15 ++------
lib/Net/DNS/ZoneFile.pm | 6 ++--
t/05-TSIG.t | 9 ++---
23 files changed, 232 insertions(+), 199 deletions(-)
diff --git a/Changes b/Changes
index 8f2f2ba..fe0d58b 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,32 @@
-$Id: Changes 1267 2014-09-22 08:03:42Z willem $ -*-text-*-
+$Id: Changes 1277 2014-10-20 07:46:37Z willem $ -*-text-*-
+
+
+**** 0.81 [unreleased]
+
+Fix rt.cpan.org #99571
+
+ AXFR BADSIG failures
+
+Fix rt.cpan.org #99531
+
+ Resolver doc error - when is a 'bug' a 'bug'? [TSIG verification]
+
+Fix rt.cpan.org #99528
+
+ TSIG::create fails with some filenames
+
+Fix rt.cpan.org #99527
+
+ Random errors... [declaration with statement modifier]
+
+Fix rt.cpan.org #99429
+
+ Infinite recursion in Net::DNS::Resolver::Recurse::send when
+ following certain delegations with empty-non terminals.
+
+Fix rt.cpan.org #99320
+
+ Net::DNS::ZoneFile bug in "$ORIGIN ."
**** 0.80 Sep 22, 2014
diff --git a/META.json b/META.json
index b53b3fd..af7288f 100644
--- a/META.json
+++ b/META.json
@@ -42,6 +42,6 @@
}
}
},
- "release_status" : "stable",
- "version" : "0.80"
+ "release_status" : "testing",
+ "version" : "0.80_2"
}
diff --git a/META.yml b/META.yml
index e8115cf..cbeffb0 100644
--- a/META.yml
+++ b/META.yml
@@ -25,4 +25,4 @@ requires:
MIME::Base64: 2.11
Test::More: 0.52
perl: 5.00404
-version: 0.80
+version: 0.80_2
diff --git a/lib/Net/DNS.pm b/lib/Net/DNS.pm
index 93b9e28..f88fc46 100644
--- a/lib/Net/DNS.pm
+++ b/lib/Net/DNS.pm
@@ -1,11 +1,11 @@
package Net::DNS;
#
-# $Id: DNS.pm 1267 2014-09-22 08:03:42Z willem $
+# $Id: DNS.pm 1280 2014-10-24 08:15:06Z willem $
#
use vars qw($VERSION $SVNVERSION);
-$VERSION = '0.80';
-$SVNVERSION = (qw$LastChangedRevision: 1267 $)[1];
+$VERSION = '0.80_2';
+$SVNVERSION = (qw$LastChangedRevision: 1280 $)[1];
=head1 NAME
@@ -336,68 +336,63 @@ __END__
=head2 Resolver Objects
-A resolver object is an instance of the
-L<Net::DNS::Resolver|Net::DNS::Resolver> class. A program can have
-multiple resolver objects, each maintaining its own state information
-such as the nameservers to be queried, whether recursion is desired,
-etc.
+A resolver object is an instance of the L<Net::DNS::Resolver> class.
+A program can have multiple resolver objects, each maintaining its
+own state information such as the nameservers to be queried, whether
+recursion is desired, etc.
=head2 Packet Objects
-L<Net::DNS::Resolver|Net::DNS::Resolver> queries return
-L<Net::DNS::Packet|Net::DNS::Packet> objects. Packet objects have five
-sections:
+L<Net::DNS::Resolver> queries return L<Net::DNS::Packet> objects.
+Packet objects have five sections:
=over 3
=item *
-The header section, a L<Net::DNS::Header|Net::DNS::Header> object.
+The header section, a L<Net::DNS::Header> object.
=item *
-The question section, a list of L<Net::DNS::Question|Net::DNS::Question>
-objects.
+The question section, a list of L<Net::DNS::Question> objects.
=item *
-The answer section, a list of L<Net::DNS::RR|Net::DNS::RR> objects.
+The answer section, a list of L<Net::DNS::RR> objects.
=item *
-The authority section, a list of L<Net::DNS::RR|Net::DNS::RR> objects.
+The authority section, a list of L<Net::DNS::RR> objects.
=item *
-The additional section, a list of L<Net::DNS::RR|Net::DNS::RR> objects.
+The additional section, a list of L<Net::DNS::RR> objects.
=back
=head2 Update Objects
-The L<Net::DNS::Update|Net::DNS::Update> package is a subclass of
-L<Net::DNS::Packet|Net::DNS::Packet> for creating packet objects to be
-used in dynamic updates.
+L<Net::DNS::Update> is a subclass of L<Net::DNS::Packet>
+used to create dynamic update requests.
=head2 Header Objects
-L<Net::DNS::Header|Net::DNS::Header> objects represent the header
+L<Net::DNS::Header> objects represent the header
section of a DNS packet.
=head2 Question Objects
-L<Net::DNS::Question|Net::DNS::Question> objects represent the content
-of the question section of a DNS packet.
+L<Net::DNS::Question> objects represent the content of the question
+section of a DNS packet.
=head2 RR Objects
-L<Net::DNS::RR|Net::DNS::RR> is the base class for DNS resource record
-(RR) objects in the answer, authority, and additional sections of a DNS
-packet.
+L<Net::DNS::RR> is the base class for DNS resource record (RR) objects
+in the answer, authority, and additional sections of a DNS packet.
-Do not assume that RR objects will be of the type you requested -- always
-check the type of an RR object before calling any of its methods.
+Do not assume that RR objects will be of the type requested.
+The type of an RR object must be checked before calling any methods.
=head1 METHODS
@@ -412,7 +407,7 @@ Returns the version of Net::DNS.
=head2 mx
- # Use a default resolver -- can't get an error string this way.
+ # Use a default resolver -- can not get an error string this way.
use Net::DNS;
my @mx = mx("example.com");
@@ -421,12 +416,12 @@ Returns the version of Net::DNS.
my $res = Net::DNS::Resolver->new;
my @mx = mx($res, "example.com");
-Returns a list of L<Net::DNS::RR::MX|Net::DNS::RR::MX> objects
-representing the MX records for the specified name; the list will be
-sorted by preference. Returns an empty list if the query failed or no MX
-records were found.
+Returns a list of L<Net::DNS::RR::MX> objects representing the MX
+records for the specified name.
+The list will be sorted by preference.
+Returns an empty list if the query failed or no MX record was found.
-This method does not look up A records -- it only performs MX queries.
+This method does not look up A records; it only performs MX queries.
See L</EXAMPLES> for a more complete example.
@@ -455,7 +450,7 @@ exist.
Meaning: At least one RR with the specified name and type must
exist and must have matching data.
-Returns a C<Net::DNS::RR> object or C<undef> if the object couldn't
+Returns a C<Net::DNS::RR> object or C<undef> if the object could not
be created.
=head2 nxrrset
@@ -467,7 +462,7 @@ a dynamic update packet.
Meaning: No RRs with the specified name and type can exist.
-Returns a C<Net::DNS::RR> object or C<undef> if the object couldn't
+Returns a C<Net::DNS::RR> object or C<undef> if the object could not
be created.
=head2 yxdomain
@@ -479,7 +474,7 @@ update packet.
Meaning: At least one RR with the specified name must exist.
-Returns a C<Net::DNS::RR> object or C<undef> if the object couldn't
+Returns a C<Net::DNS::RR> object or C<undef> if the object could not
be created.
=head2 nxdomain
@@ -491,7 +486,7 @@ dynamic update packet.
Meaning: No RR with the specified name can exist.
-Returns a C<Net::DNS::RR> object or C<undef> if the object couldn't
+Returns a C<Net::DNS::RR> object or C<undef> if the object could not
be created.
=head2 rr_add
@@ -506,7 +501,7 @@ RR objects created by this method should be added to the "update"
section of a dynamic update packet. The TTL defaults to 86400
seconds (24 hours) if not specified.
-Returns a C<Net::DNS::RR> object or C<undef> if the object couldn't
+Returns a C<Net::DNS::RR> object or C<undef> if the object could not
be created.
=head2 rr_del
@@ -532,7 +527,7 @@ Meaning: Delete all RRs having the specified name, type, and data.
RR objects created by this method should be added to the "update"
section of a dynamic update packet.
-Returns a C<Net::DNS::RR> object or C<undef> if the object couldn't
+Returns a C<Net::DNS::RR> object or C<undef> if the object could not
be created.
@@ -663,7 +658,7 @@ dynamic updates.
print $rr->preference, " ", $rr->exchange, "\n";
}
} else {
- warn "Can't find MX records for $name: ", $res->errorstring, "\n";
+ warn "Can not find MX records for $name: ", $res->errorstring, "\n";
}
diff --git a/lib/Net/DNS/Domain.pm b/lib/Net/DNS/Domain.pm
index 2d6805b..d8d88b4 100644
--- a/lib/Net/DNS/Domain.pm
+++ b/lib/Net/DNS/Domain.pm
@@ -1,15 +1,15 @@
package Net::DNS::Domain;
#
-# $Id: Domain.pm 1222 2014-06-24 12:30:08Z willem $
+# $Id: Domain.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1222 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
=head1 NAME
-Net::DNS::Domain - Domain Name System domains
+Net::DNS::Domain - DNS domains
=head1 SYNOPSIS
@@ -59,9 +59,9 @@ use constant LIBIDN => eval {
} || 0;
-# perlcc: eddress of encoding objects must be determined at runtime
-my $ascii = Encode::find_encoding('ascii') if ASCII; # Osborn's Law:
-my $utf8 = Encode::find_encoding('utf8') if UTF8; # Variables won't; constants aren't.
+# perlcc: address of encoding objects must be determined at runtime
+my $ascii = ASCII ? Encode::find_encoding('ascii') : undef; # Osborn's Law:
+my $utf8 = UTF8 ? Encode::find_encoding('utf8') : undef; # Variables won't; constants aren't.
=head1 METHODS
@@ -151,7 +151,8 @@ sub name {
my $head = _decode_ascii( join chr(46), map _escape($_), @$lref );
my $tail = $self->{origin} || return $self->{name} = $head || $dot;
return $self->{name} = $tail->name unless length $head;
- return $self->{name} = join $dot, $head, $tail->name;
+ my $suffix = $tail->name;
+ return $self->{name} = $suffix eq $dot ? $head : join $dot, $head, $suffix;
}
@@ -243,10 +244,10 @@ where relative names become descendents of the specified $ORIGIN.
my $placebo = sub { my $constructor = shift; &$constructor; };
sub origin {
- my $class = shift;
- my $name = shift || return $placebo;
+ my ( $class, $name ) = @_;
- my $domain = new Net::DNS::Domain($name);
+ my $domain = defined $name ? new Net::DNS::Domain($name) : return $placebo;
+ $domain = undef unless scalar @{$domain->{label}};
return sub { # closure w.r.t. $domain
my $constructor = shift;
local $ORIGIN = $domain; # dynamically scoped $ORIGIN
diff --git a/lib/Net/DNS/DomainName.pm b/lib/Net/DNS/DomainName.pm
index 13c71cf..8dc8f72 100644
--- a/lib/Net/DNS/DomainName.pm
+++ b/lib/Net/DNS/DomainName.pm
@@ -1,15 +1,15 @@
package Net::DNS::DomainName;
#
-# $Id: DomainName.pm 1222 2014-06-24 12:30:08Z willem $
+# $Id: DomainName.pm 1272 2014-10-10 22:21:43Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1222 $)[1];
+$VERSION = (qw$LastChangedRevision: 1272 $)[1];
=head1 NAME
-Net::DNS::DomainName - DNS domain name wire representation
+Net::DNS::DomainName - DNS name representation
=head1 SYNOPSIS
diff --git a/lib/Net/DNS/Nameserver.pm b/lib/Net/DNS/Nameserver.pm
index 1984318..58aafee 100644
--- a/lib/Net/DNS/Nameserver.pm
+++ b/lib/Net/DNS/Nameserver.pm
@@ -1,10 +1,10 @@
package Net::DNS::Nameserver;
#
-# $Id: Nameserver.pm 1222 2014-06-24 12:30:08Z willem $
+# $Id: Nameserver.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1222 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
=head1 NAME
@@ -412,7 +412,7 @@ sub udp_connection {
};
my $reply = $self->make_reply( $query, $peerhost, $conn ) || return;
- my $max_len = $query->edns->size if $query && $self->{Truncate};
+ my $max_len = ( $query && $self->{Truncate} ) ? $query->edns->size : undef;
if ( $self->{Verbose} ) {
local $| = 1;
print "Maximum UDP size advertised by $peerhost:$peerport: $max_len\n" if $max_len;
diff --git a/lib/Net/DNS/Packet.pm b/lib/Net/DNS/Packet.pm
index fcdb09a..f79d26c 100644
--- a/lib/Net/DNS/Packet.pm
+++ b/lib/Net/DNS/Packet.pm
@@ -1,10 +1,10 @@
package Net::DNS::Packet;
#
-# $Id: Packet.pm 1246 2014-08-14 19:39:22Z willem $
+# $Id: Packet.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1246 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
=head1 NAME
@@ -39,7 +39,8 @@ BEGIN {
require Net::DNS::RR;
}
-my @dummy_header = ( header => {} ) if Net::DNS::RR->COMPATIBLE;
+use constant OLDDNSSEC => Net::DNS::RR->COMPATIBLE;
+my @dummy_header = OLDDNSSEC ? ( header => {} ) : ();
=head1 METHODS
@@ -227,7 +228,7 @@ represents the header section of the packet.
sub header {
my $self = shift;
- return bless \$self, q(Net::DNS::Header);
+ bless \$self, q(Net::DNS::Header);
}
@@ -237,7 +238,7 @@ sub header {
$version = $edns->version;
$size = $edns->size;
-Auxilliary function edns() provides access to EDNS extensions.
+Auxiliary function edns() provides access to EDNS extensions.
=cut
@@ -245,7 +246,7 @@ sub edns {
my $self = shift;
my $link = \$self->{xedns};
($$link) = grep $_->isa(qw(Net::DNS::RR::OPT)), @{$self->{additional}} unless $$link;
- return $$link ||= new Net::DNS::RR( type => 'OPT' );
+ $$link ||= new Net::DNS::RR( type => 'OPT' );
}
@@ -828,7 +829,7 @@ The minimum maximum length that is honoured is 512 octets.
# The TC bit should be set in responses only when an RRSet is required
# as a part of the response, but could not be included in its entirety.
# The TC bit should not be set merely because some extra information
-# could have been included, but there was insufficient room. This
+# could have been included, for which there was insufficient room. This
# includes the results of additional section processing. In such cases
# the entire RRSet that will not fit in the response should be omitted,
# and the reply sent as is, with the TC bit clear. If the recipient of
diff --git a/lib/Net/DNS/RR.pm b/lib/Net/DNS/RR.pm
index 7db1029..e8ed368 100644
--- a/lib/Net/DNS/RR.pm
+++ b/lib/Net/DNS/RR.pm
@@ -1,15 +1,15 @@
package Net::DNS::RR;
#
-# $Id: RR.pm 1260 2014-09-09 09:12:28Z willem $
+# $Id: RR.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1260 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
=head1 NAME
-Net::DNS::RR - DNS Resource Record base class
+Net::DNS::RR - DNS resource record base class
=head1 SYNOPSIS
@@ -203,11 +203,7 @@ sub _new_hash {
$self->ttl($ttl) if defined $ttl; # specify TTL
while ( my ( $attribute, $value ) = each %attribute ) {
- if ( UNIVERSAL::isa( $value, 'ARRAY' ) ) {
- $self->$attribute(@$value); # attribute => [ ... ]
- } else {
- $self->$attribute($value); # attribute => value
- }
+ $self->$attribute( ref($value) eq 'ARRAY' ? @$value : $value );
}
if ( COMPATIBLE && $self->{OLD} ) {
@@ -378,11 +374,10 @@ the trailing dot.
sub string {
my $self = shift;
- my $name = $self->name if COMPATIBLE;
+ my $name = COMPATIBLE ? $self->name : '';
my @core = ( $self->{owner}->string, $self->ttl, $self->class, $self->type );
my $rdata = $self->rdstring;
-
return join "\t", @core, '; no data' unless length $rdata;
chomp $rdata;
@@ -425,7 +420,6 @@ Returns the record type.
sub type {
my $self = shift;
-
croak 'not possible to change RR->type' if scalar @_;
return $self->{type} || 'A' if COMPATIBLE;
@@ -631,11 +625,11 @@ sub get_rrsort_func {
}
-###################################################################################
+################################################################################
##
## Default implementation for unknown RR type
##
-###################################################################################
+################################################################################
sub decode_rdata { ## decode rdata from wire-format octet string
my ( $self, $data, $offset ) = @_;
@@ -676,6 +670,8 @@ sub dump { ## print internal data structure
}
+################################################################################
+
#
# Net::DNS::RR->_subclass($rrtype)
# Net::DNS::RR->_subclass($rrtype, $default)
@@ -725,11 +721,11 @@ sub _subclass {
}
-###################################################################################
+################################################################################
## Compatibility interface to allow old and new RR architectures to coexist
##
## "new" modules inherit these methods to wrap themselves in "old" clothing.
-###################################################################################
+################################################################################
sub _new_from_rdata { ## decode rdata from wire-format byte string
my $class = shift;
@@ -779,7 +775,7 @@ sub _normalize_ownername { }
sub _normalize_dnames { }
-###################################################################################
+################################################################################
use vars qw($AUTOLOAD);
@@ -791,7 +787,7 @@ sub AUTOLOAD { ## Default method
confess 'undefined method ', $AUTOLOAD unless $oref;
confess 'unimplemented type ', $self->type if $oref eq __PACKAGE__;
- my $method = $1 if $AUTOLOAD =~ m/^.*::(.*)$/;
+ my $method = $AUTOLOAD =~ m/^.*::(.*)$/ ? $1 : '<undef>';
if (COMPATIBLE) {
return $self->{$method} = shift if @_;
@@ -804,7 +800,7 @@ sub AUTOLOAD { ## Default method
*** FATAL PROGRAM ERROR!! Unknown method '$method'
*** which the program has attempted to call for the object:
***
-*** $object
+ $object
***
*** This object does not have a method '$method'. THIS IS A BUG
*** IN THE CALLING SOFTWARE, which incorrectly assumes that the
@@ -816,7 +812,7 @@ END
}
-###################################################################################
+################################################################################
## Stub implementation of Net::DNS::RR::OPT to avoid a barrage of confusing failure
## reports if the subtype implementation module is absent or fails to load.
diff --git a/lib/Net/DNS/RR/A.pm b/lib/Net/DNS/RR/A.pm
index 9a77bf3..f092fbc 100644
--- a/lib/Net/DNS/RR/A.pm
+++ b/lib/Net/DNS/RR/A.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::A;
#
-# $Id: A.pm 1188 2014-04-03 18:54:34Z willem $
+# $Id: A.pm 1272 2014-10-10 22:21:43Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1188 $)[1];
+$VERSION = (qw$LastChangedRevision: 1272 $)[1];
use strict;
@@ -51,14 +51,17 @@ sub parse_rdata { ## populate RR from rdata in argument list
}
+my $pad = pack 'x4';
+
sub address {
my $self = shift;
- return join '.', unpack( 'C4', $self->{address} ) unless scalar @_;
+ return join '.', unpack 'C4', $self->{address} . $pad unless scalar @_;
# Note: pack masks overlarge values, mostly without warning
my @part = split /\./, shift || '';
my $last = pop(@part) || 0;
+ $self = {} unless ref($self);
$self->{address} = pack 'C4', @part, (0) x ( 3 - @part ), $last;
}
diff --git a/lib/Net/DNS/RR/AAAA.pm b/lib/Net/DNS/RR/AAAA.pm
index 7513a97..9f5fefb 100644
--- a/lib/Net/DNS/RR/AAAA.pm
+++ b/lib/Net/DNS/RR/AAAA.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::AAAA;
#
-# $Id: AAAA.pm 1235 2014-07-29 07:58:19Z willem $
+# $Id: AAAA.pm 1272 2014-10-10 22:21:43Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1235 $)[1];
+$VERSION = (qw$LastChangedRevision: 1272 $)[1];
use strict;
@@ -51,13 +51,15 @@ sub parse_rdata { ## populate RR from rdata in argument list
}
+my $pad = pack 'x16';
+
sub address_long {
- return sprintf '%x:%x:%x:%x:%x:%x:%x:%x', unpack 'n8', shift->{address};
+ sprintf '%x:%x:%x:%x:%x:%x:%x:%x', unpack 'n8', shift->{address} . $pad;
}
sub address_short {
- for ( sprintf ':%x:%x:%x:%x:%x:%x:%x:%x:', unpack 'n8', shift->{address} ) {
+ for ( sprintf ':%x:%x:%x:%x:%x:%x:%x:%x:', unpack 'n8', shift->{address} . $pad ) {
s/(:0[:0]+:)(?!.+:0\1)/::/; # squash longest zero sequence
s/^:// unless /^::/; # prune LH :
s/:$// unless /::$/; # prune RH :
@@ -73,6 +75,7 @@ sub address {
my $argument = shift || '';
my @parse = split /:/, "0$argument";
+ $self = {} unless ref($self);
if ( (@parse)[$#parse] =~ /\./ ) { # embedded IPv4
my @ip4 = split /\./, pop(@parse);
diff --git a/lib/Net/DNS/RR/APL.pm b/lib/Net/DNS/RR/APL.pm
index b7598ea..cdf783e 100644
--- a/lib/Net/DNS/RR/APL.pm
+++ b/lib/Net/DNS/RR/APL.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::APL;
#
-# $Id: APL.pm 1188 2014-04-03 18:54:34Z willem $
+# $Id: APL.pm 1272 2014-10-10 22:21:43Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1188 $)[1];
+$VERSION = (qw$LastChangedRevision: 1272 $)[1];
use strict;
@@ -137,11 +137,10 @@ sub prefix {
sub _address_1 {
my $self = shift;
- my $dummy = {address => pack( 'a* @4', $self->{address} || '' )};
- return Net::DNS::RR::A::address($dummy) unless scalar @_;
+ return bless( {%$self}, 'Net::DNS::RR::A' )->address unless scalar @_;
my $alength = ( $self->prefix + 7 ) >> 3; # mask non-prefix bits, suppress nulls
- my @address = unpack "C$alength", Net::DNS::RR::A::address( $dummy, shift );
+ my @address = unpack "C$alength", Net::DNS::RR::A->address(shift);
my $bitmask = 0xFF << ( 8 - $self->prefix & 7 );
push @address, ( $bitmask & pop(@address) ) if $alength;
for ( reverse @address ) { last if $_; pop @address }
@@ -152,11 +151,10 @@ sub prefix {
sub _address_2 {
my $self = shift;
- my $dummy = {address => pack( 'a* @16', $self->{address} || '' )};
- return Net::DNS::RR::AAAA::address_long($dummy) unless scalar @_;
+ return bless( {%$self}, 'Net::DNS::RR::AAAA' )->address_long unless scalar @_;
my $alength = ( $self->prefix + 7 ) >> 3; # mask non-prefix bits, suppress nulls
- my @address = unpack "C$alength", Net::DNS::RR::AAAA::address( $dummy, shift );
+ my @address = unpack "C$alength", Net::DNS::RR::AAAA->address(shift);
my $bitmask = 0xFF << ( 8 - $self->prefix & 7 );
push @address, ( $bitmask & pop(@address) ) if $alength;
for ( reverse @address ) { last if $_; pop @address }
diff --git a/lib/Net/DNS/RR/LOC.pm b/lib/Net/DNS/RR/LOC.pm
index 251d727..d4e1819 100644
--- a/lib/Net/DNS/RR/LOC.pm
+++ b/lib/Net/DNS/RR/LOC.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::LOC;
#
-# $Id: LOC.pm 1188 2014-04-03 18:54:34Z willem $
+# $Id: LOC.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1188 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
use strict;
@@ -44,7 +44,7 @@ sub format_rdata { ## format rdata portion of RR string.
my $self = shift;
return '' unless defined $self->{longitude};
- my @angular = ( $self->latitude, $self->longitude );
+ my @angular = ( $self->latitude, ' ', $self->longitude, ' ' );
my @linear = ( $self->altitude, $self->size, $self->hp, $self->vp );
join ' ', @angular, join 'm ', @linear, '';
}
@@ -172,8 +172,7 @@ sub _decode_lat {
sub _encode_lat {
my @ang = scalar @_ > 1 ? (@_) : ( split /[\s\260'"]+/, shift || '0' );
my $ang = ( 0 + shift @ang ) * 3600000;
- my $neg = pop(@ang) =~ /[SWsw]/ if scalar @ang;
- undef $neg if $ang < 0;
+ my $neg = ( @ang ? pop @ang : '' ) =~ /[SWsw]/ && $ang > 0;
$ang += ( @ang ? shift @ang : 0 ) * 60000;
$ang += ( @ang ? shift @ang : 0 ) * 1000;
return int( 0.5 + ( $neg ? $datum_loc - $ang : $datum_loc + $ang ) );
diff --git a/lib/Net/DNS/RR/OPT.pm b/lib/Net/DNS/RR/OPT.pm
index 6683d63..33cf44f 100644
--- a/lib/Net/DNS/RR/OPT.pm
+++ b/lib/Net/DNS/RR/OPT.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::OPT;
#
-# $Id: OPT.pm 1229 2014-07-09 07:07:42Z willem $
+# $Id: OPT.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1229 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
use strict;
@@ -121,9 +121,8 @@ sub class { ## overide RR method
sub ttl { ## overide RR method
my $self = shift;
- my $mods = shift || return if scalar @_;
carp qq[Usage: OPT has no "ttl" attribute, please use "flags()" and "rcode()"] unless $warned++;
- @{$self}{qw(rcode version flags)} = unpack 'C2 n', pack 'N', $mods if $mods;
+ @{$self}{qw(rcode version flags)} = unpack 'C2 n', pack 'N', shift || 0 if scalar @_;
return pack 'C2 n', @{$self}{qw(rcode version flags)} if defined wantarray;
}
diff --git a/lib/Net/DNS/RR/TKEY.pm b/lib/Net/DNS/RR/TKEY.pm
index e6ec52b..ded775a 100644
--- a/lib/Net/DNS/RR/TKEY.pm
+++ b/lib/Net/DNS/RR/TKEY.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::TKEY;
#
-# $Id: TKEY.pm 1188 2014-04-03 18:54:34Z willem $
+# $Id: TKEY.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1188 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
use strict;
@@ -156,7 +156,7 @@ __END__
=head1 DESCRIPTION
-Class for DNS Transaction Signature (TKEY) resource records.
+Class for DNS TSIG Key (TKEY) resource records.
=head1 METHODS
@@ -222,8 +222,8 @@ The meaning of this data depends on the mode.
$other = $rr->other;
$rr->other( $other );
-Not defined in [RFC2930] specification but may be used in future
-extensions.
+Content not defined in the [RFC2930] specification but may be used
+in future extensions.
=head1 COPYRIGHT
diff --git a/lib/Net/DNS/RR/TSIG.pm b/lib/Net/DNS/RR/TSIG.pm
index 331be04..7b6342a 100644
--- a/lib/Net/DNS/RR/TSIG.pm
+++ b/lib/Net/DNS/RR/TSIG.pm
@@ -1,10 +1,10 @@
package Net::DNS::RR::TSIG;
#
-# $Id: TSIG.pm 1188 2014-04-03 18:54:34Z willem $
+# $Id: TSIG.pm 1279 2014-10-24 08:12:21Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1188 $)[1];
+$VERSION = (qw$LastChangedRevision: 1279 $)[1];
use strict;
@@ -75,6 +75,7 @@ sub decode_rdata { ## decode rdata from wire-format octet string
my $self = shift;
my ( $data, $offset ) = @_;
+ my $eom = $offset - Net::DNS::RR->RRFIXEDSZ - length $self->{owner}->encode();
( $self->{algorithm}, $offset ) = decode Net::DNS::DomainName(@_);
# Design decision: Use 32 bits, which will work until the end of time()!
@@ -90,6 +91,11 @@ sub decode_rdata { ## decode rdata from wire-format octet string
my $other_size = unpack "\@$offset n", $$data;
$self->{other} = unpack "\@$offset xx a$other_size", $$data;
+ $offset += $other_size + 2;
+
+ croak('misplaced or corrupt TSIG') unless $offset == length $$data;
+ substr( $$data, $eom ) = '';
+ $self->{rawref} = $data;
}
@@ -267,18 +273,19 @@ sub sign_func { &sig_function; } ## historical
sub sig_data {
- my $self = shift;
- my $data = shift || '';
-
- if ( ref($data) ) {
- my $packet = $data if $data->isa('Net::DNS::Packet');
- die 'missing packet reference' unless $packet;
-
- my $original = $packet->{additional};
- my @unsigned = grep ref($_) ne ref($self), @$original;
- $packet->{additional} = \@unsigned; # strip TSIG RR
- $data = $packet->data;
- $packet->{additional} = $original; # reinstate TSIG RR
+ my ( $self, $message ) = @_;
+
+ if ( ref($message) ) {
+ die 'missing packet reference' unless $message->isa('Net::DNS::Packet');
+ my @unsigned = grep ref($_) ne ref($self), @{$message->{additional}};
+ local $message->{additional} = \@unsigned; # remake header image
+ my @part = qw(question answer authority additional);
+ my @size = map scalar( @{$message->{$_}} ), @part;
+ my $data = $self->{rawref};
+ delete $self->{rawref};
+ my $orig = $data ? $self->original_id : $message->{id};
+ my $hbin = pack 'n6', $orig, $message->{status}, @size;
+ $message = $hbin . substr $data ? $$data : $message->data, length $hbin;
}
# Design decision: Use 32 bits, which will work until the end of time()!
@@ -287,15 +294,14 @@ sub sig_data {
# Insert the prior MAC if present (multi-packet message).
$self->prior_macbin( $self->{link}->macbin ) if $self->{link};
if ( my $prior_mac = $self->prior_macbin ) {
- return pack 'na* a* a*', length($prior_mac), $prior_mac, $data, $time;
+ return pack 'na* a* a*', length($prior_mac), $prior_mac, $message, $time;
}
# Insert the request MAC if present (used to validate responses).
- my $sigdata = '';
my $req_mac = $self->request_macbin;
- $sigdata = pack 'na*', length($req_mac), $req_mac if $req_mac;
+ my $sigdata = $req_mac ? pack( 'na*', length($req_mac), $req_mac ) : '';
- $sigdata .= $data;
+ $sigdata .= $message || '';
my $kname = $self->{owner}->canonical; # canonical key name
$sigdata .= pack 'a* n N', $kname, ANY, 0;
@@ -339,8 +345,8 @@ sub create {
key => $key
);
- } elsif ( $karg =~ /K([^+]+)[+0-9]+\.private$/ ) { # ( keyfile, options )
- my $kname = $1;
+ } elsif ( $karg =~ /[+.0-9]+private$/ ) { # ( keyfile, options )
+ require File::Spec;
require Net::DNS::ZoneFile;
my $keyfile = new Net::DNS::ZoneFile($karg);
my ( $alg, $key, $junk );
@@ -350,6 +356,9 @@ sub create {
( $junk, $key ) = split if /Key:/;
}
}
+
+ my ( $vol, $dir, $file ) = File::Spec->splitpath( $keyfile->name );
+ my $kname = $file =~ /^K([^+]+)+.+private$/ ? $1 : undef;
return new Net::DNS::RR(
name => $kname,
type => 'TSIG',
diff --git a/lib/Net/DNS/Resolver.pm b/lib/Net/DNS/Resolver.pm
index cc5b672..b3f4113 100644
--- a/lib/Net/DNS/Resolver.pm
+++ b/lib/Net/DNS/Resolver.pm
@@ -1,10 +1,10 @@
package Net::DNS::Resolver;
#
-# $Id: Resolver.pm 1266 2014-09-22 08:00:05Z willem $
+# $Id: Resolver.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1266 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
=head1 NAME
@@ -771,9 +771,6 @@ For example, if we wanted to cache lookups:
=head1 BUGS
-The current implementation supports TSIG only on outgoing packets.
-No validation of server replies is performed.
-
bgsend() does not honour the usevc flag and only uses UDP for transport.
=head1 COPYRIGHT
diff --git a/lib/Net/DNS/Resolver/Base.pm b/lib/Net/DNS/Resolver/Base.pm
index 4c963f8..17d3a52 100644
--- a/lib/Net/DNS/Resolver/Base.pm
+++ b/lib/Net/DNS/Resolver/Base.pm
@@ -1,10 +1,10 @@
package Net::DNS::Resolver::Base;
#
-# $Id: Base.pm 1260 2014-09-09 09:12:28Z willem $
+# $Id: Base.pm 1277 2014-10-20 07:46:37Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1260 $)[1];
+$VERSION = (qw$LastChangedRevision: 1277 $)[1];
use strict;
@@ -18,7 +18,7 @@ use IO::Select;
use Net::DNS::RR;
use Net::DNS::Packet;
-use constant DNSSEC => eval { require Net::DNS::RR::DS; } || 0;
+use constant DNSSEC => eval { require Net::DNS::RR::DNSKEY; } || 0;
use constant INT16SZ => 2;
use constant PACKETSZ => 512;
@@ -154,7 +154,7 @@ my $initial;
sub new {
my $class = shift;
- my %args = @_ unless scalar(@_) % 2;
+ my %args = ( scalar(@_) % 2 ) ? () : @_;
my $self;
my $base = $class->defaults;
@@ -351,7 +351,7 @@ sub nameservers {
my $packet = $defres->search( $ns, 'A' );
$self->errorstring( $defres->errorstring );
- my @address = cname_addr( [@names], $packet ) if defined $packet;
+ my @address = $packet ? cname_addr( [@names], $packet ) : ();
if ($has_inet6) {
$packet = $defres->search( $ns, 'AAAA' );
@@ -372,8 +372,8 @@ sub nameservers {
return unless defined wantarray;
}
- my @ns4 = @{$self->{nameserver4}} unless $self->force_v6;
- my @ns6 = @{$self->{nameserver6}} if $has_inet6 && !$self->force_v4;
+ my @ns4 = $self->force_v6 ? () : @{$self->{nameserver4}};
+ my @ns6 = $has_inet6 && !$self->force_v4 ? @{$self->{nameserver6}} : ();
my @returnval = $self->prefer_v6 ? ( @ns6, @ns4 ) : ( @ns4, @ns6 );
return @returnval if scalar @returnval;
@@ -446,8 +446,8 @@ sub search {
my $self = shift;
my $name = shift || '.';
- my $defdomain = $self->{domain} if $self->{defnames};
- my @searchlist = @{$self->{'searchlist'}} if $self->{dnsrch};
+ my $defdomain = $self->{defnames} ? $self->{domain} : undef;
+ my @searchlist = $self->{dnsrch} ? @{$self->{'searchlist'}} : ();
# resolve name by trying as absolute name, then applying searchlist
my @list = ( undef, @searchlist );
@@ -483,7 +483,7 @@ sub query {
my $name = shift || '.';
# resolve name containing no dots or colons by appending domain
- my @suffix = ( $self->{domain} || () ) if $name !~ m/[:.]/ and $self->{defnames};
+ my @suffix = ( $name !~ m/[:.]/ && $self->{defnames} ) ? ( $self->{domain} || () ) : ();
my $fqname = join '.', $name, @suffix;
@@ -655,7 +655,7 @@ sub send_udp {
my $lastanswer;
- my $stop_time = time + $self->{'udp_timeout'} if $self->{'udp_timeout'};
+ my $stop_time = $self->{'udp_timeout'} ? time + $self->{'udp_timeout'} : undef;
$self->_reset_errorstring;
@@ -1094,7 +1094,7 @@ sub make_query_packet {
$header->ad(0);
$header->do(0);
- } elsif ( $self->{adflag} ) {
+ } elsif ( $self->{adflag} ) { # RFC6840, 5.7
print ";; Set AD flag\n" if $self->{debug};
$header->ad(1);
$header->cd(0);
@@ -1124,9 +1124,11 @@ sub axfr { ## zone transfer
my @null;
my $query = $self->_axfr_start(@_) || return $whole ? @null : sub {undef};
my $reply = $self->_axfr_next() || return $whole ? @null : sub {undef};
- my $verfy = $reply->verify($query) || croak $reply->verifyerr if $query->sigrr;
my @rr = $reply->answer;
my $soa = $rr[0];
+ my $verfy = $query->sigrr();
+ $verfy = $reply->verify($query) || croak $reply->verifyerr if $verfy;
+ print ';; ', $verfy ? '' : 'not ', "verified\n" if $self->{debug};
if ($whole) {
my @zone = shift @rr;
@@ -1135,7 +1137,8 @@ sub axfr { ## zone transfer
push @zone, @rr; # unpack non-terminal packet
@rr = @null;
$reply = $self->_axfr_next() || last;
- $verfy = $reply->verify($verfy) || croak $reply->verifyerr if $query->sigrr;
+ $verfy = $reply->verify($verfy) || croak $reply->verifyerr if $verfy;
+ print ';; ', $verfy ? '' : 'not ', "verified\n" if $self->{debug};
@rr = $reply->answer;
}
@@ -1160,7 +1163,8 @@ sub axfr { ## zone transfer
}
$reply = $self->_axfr_next() || return undef; # end of packet
- $verfy = $reply->verify($verfy) || croak $reply->verifyerr if $query->sigrr;
+ $verfy = $reply->verify($verfy) || croak $reply->verifyerr if $verfy;
+ print ';; ', $verfy ? '' : 'not ', "verified\n" if $self->{debug};
@rr = $reply->answer;
return $rr;
};
@@ -1560,7 +1564,7 @@ __END__
=head1 NAME
-Net::DNS::Resolver::Base - Common Resolver Class
+Net::DNS::Resolver::Base - DNS resolver base class
=head1 SYNOPSIS
diff --git a/lib/Net/DNS/Resolver/Recurse.pm b/lib/Net/DNS/Resolver/Recurse.pm
index 845d608..c998719 100644
--- a/lib/Net/DNS/Resolver/Recurse.pm
+++ b/lib/Net/DNS/Resolver/Recurse.pm
@@ -1,15 +1,15 @@
package Net::DNS::Resolver::Recurse;
#
-# $Id: Recurse.pm 1259 2014-09-08 10:33:49Z willem $
+# $Id: Recurse.pm 1274 2014-10-14 20:35:58Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1259 $)[1];
+$VERSION = (qw$LastChangedRevision: 1274 $)[1];
=head1 NAME
-Net::DNS::Resolver::Recurse - Perform recursive DNS lookups
+Net::DNS::Resolver::Recurse - DNS recursive resolver
=head1 SYNOPSIS
@@ -125,11 +125,12 @@ sub send {
return $packet;
}
- my $domain = $question->qtype ne 'NULL' ? $original->qname : join '.', @tail;
+ my $domain = lc join( '.', @tail ) || '.';
my $nslist = $res->{cache}->{$domain} ||= [];
if ( scalar @$nslist ) {
- print ";; using cached nameservers for $domain.\n" if $res->{debug};
+ print ";; using cached nameservers for $domain\n" if $res->{debug};
} else {
+ $domain = lc $question->qname if $question->qtype ne 'NULL';
my $packet = $res->send( $domain, 'NULL', 'ANY', $original ) || return;
return $packet unless $packet->header->rcode eq 'NOERROR';
@@ -137,17 +138,20 @@ sub send {
return $packet if $packet->header->aa && grep $_->name eq $original->qname, @answer;
my @auth = grep $_->type eq 'NS', $packet->answer, $packet->authority;
- print ";; cache nameservers for $domain.\n" if $res->{debug} && scalar(@auth);
- my %auth = map { lc $_->nsdname => 1 } @auth;
+ my %auth = map { lc $_->nsdname => lc $_->name } @auth;
my @glue = grep $auth{lc $_->name}, $packet->additional;
-
my %glue;
foreach ( grep $_->type eq 'A', @glue ) { push @{$glue{lc $_->name}}, $_->address }
foreach ( grep $_->type eq 'AAAA', @glue ) { push @{$glue{lc $_->name}}, $_->address }
- @$nslist = values %glue;
- my @noglue = grep !$glue{$_}, keys %auth;
- push @$nslist, @noglue;
+ my %zone = reverse %auth;
+ foreach my $zone ( keys %zone ) {
+ print ";; cache nameservers for $zone\n" if $res->{debug};
+ my @nsname = grep $auth{$_} eq $zone, keys %auth;
+ $nslist = $res->{cache}->{$zone} ||= [];
+ @$nslist = map $glue{$_} || $_, @nsname;
+ last if $zone eq $domain;
+ }
}
my $query = new Net::DNS::Packet();
@@ -158,18 +162,21 @@ sub send {
splice @a, 0, 0, splice( @a, int( rand scalar @a ) ); # cut deck
foreach (@a) {
+ $res->empty_nameservers();
$res->nameservers( map @$_, @a );
my $reply = $res->send($query) || last;
$res->{callback}->($reply) if $res->{callback};
return $reply;
}
- foreach my $ns ( grep !ref($_), @$nslist ) {
- print ";; find missing glue for $domain. ($ns)\n" if $res->{debug};
+ foreach my $ns (@$nslist) {
+ next if ref($ns);
+ my $name = $ns;
+ print ";; find missing glue for $name\n" if $res->{debug};
+ $ns = []; # substitute IP list in situ
$res->empty_nameservers();
- my @ip = $res->nameservers($ns);
- $ns = [@ip]; # substitute IP list in situ
- next unless @ip;
+ @$ns = $res->nameservers($name);
+ next unless @$ns;
my $reply = $res->send($query) || next;
$res->{callback}->($reply) if $res->{callback};
return $reply;
@@ -177,6 +184,7 @@ sub send {
return;
}
+
sub query_dorecursion { &send; } ## historical
@@ -206,7 +214,7 @@ for queries for missing glue records.
sub callback {
my ( $self, $sub ) = @_;
- $self->{callback} = $sub if $sub && UNIVERSAL::isa( $sub, 'CODE' );
+ $self->{callback} = $sub if defined $sub && ref($sub) eq 'CODE';
return $self->{callback};
}
diff --git a/lib/Net/DNS/Text.pm b/lib/Net/DNS/Text.pm
index d8b42d8..52e001e 100644
--- a/lib/Net/DNS/Text.pm
+++ b/lib/Net/DNS/Text.pm
@@ -1,15 +1,15 @@
package Net::DNS::Text;
#
-# $Id: Text.pm 1235 2014-07-29 07:58:19Z willem $
+# $Id: Text.pm 1276 2014-10-19 06:02:40Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1235 $)[1];
+$VERSION = (qw$LastChangedRevision: 1276 $)[1];
=head1 NAME
-Net::DNS::Text - Domain Name System text representation
+Net::DNS::Text - DNS text representation
=head1 SYNOPSIS
@@ -53,9 +53,9 @@ use constant UTF8 => eval {
} || 0;
-# perlcc: eddress of encoding objects must be determined at runtime
-my $ascii = Encode::find_encoding('ascii') if ASCII; # Osborn's Law:
-my $utf8 = Encode::find_encoding('utf8') if UTF8; # Variables won't; constants aren't.
+# perlcc: address of encoding objects must be determined at runtime
+my $ascii = ASCII ? Encode::find_encoding('ascii') : undef; # Osborn's Law:
+my $utf8 = UTF8 ? Encode::find_encoding('utf8') : undef; # Variables won't; constants aren't.
=head1 METHODS
diff --git a/lib/Net/DNS/Update.pm b/lib/Net/DNS/Update.pm
index 4f6a1ef..6012418 100644
--- a/lib/Net/DNS/Update.pm
+++ b/lib/Net/DNS/Update.pm
@@ -1,15 +1,15 @@
package Net::DNS::Update;
#
-# $Id: Update.pm 1171 2014-02-26 08:56:52Z willem $
+# $Id: Update.pm 1272 2014-10-10 22:21:43Z willem $
#
use vars qw($VERSION @ISA);
-$VERSION = (qw$LastChangedRevision: 1171 $)[1];
+$VERSION = (qw$LastChangedRevision: 1272 $)[1];
=head1 NAME
-Net::DNS::Update - Create a DNS update packet
+Net::DNS::Update - DNS dynamic update packet
=head1 SYNOPSIS
@@ -27,15 +27,10 @@ making DNS dynamic updates.
Programmers should refer to RFC2136 for dynamic update semantics.
-WARNING: This code is still under development. Please use with
-caution on production nameservers.
-
=cut
use strict;
-use integer;
-
use base 'Net::DNS::Packet';
@@ -179,10 +174,6 @@ subsequent examples show only the creation of the update packet .
$update->push( update => rr_add('foo.example.com A 10.1.2.3') );
$update->push( additional => $tsig );
-=head1 BUGS
-
-This code is still under development. Please use with caution on
-production nameservers.
=head1 COPYRIGHT
diff --git a/lib/Net/DNS/ZoneFile.pm b/lib/Net/DNS/ZoneFile.pm
index 2ff6460..3483502 100644
--- a/lib/Net/DNS/ZoneFile.pm
+++ b/lib/Net/DNS/ZoneFile.pm
@@ -1,10 +1,10 @@
package Net::DNS::ZoneFile;
#
-# $Id: ZoneFile.pm 1235 2014-07-29 07:58:19Z willem $
+# $Id: ZoneFile.pm 1277 2014-10-20 07:46:37Z willem $
#
use vars qw($VERSION);
-$VERSION = (qw$LastChangedRevision: 1235 $)[1];
+$VERSION = (qw$LastChangedRevision: 1277 $)[1];
=head1 NAME
@@ -548,7 +548,7 @@ sub _include { ## open $INCLUDE file
my $file = _filename(shift);
my $root = shift;
- my @discipline = ( join ':', '<', PerlIO::get_layers $self->{handle} ) if PERLIO;
+ my @discipline = PERLIO ? ( join ':', '<', PerlIO::get_layers $self->{handle} ) : ();
my $handle = new FileHandle( $file, @discipline ) or croak qq(open: "$file" $!);
delete $self->{latest}; # forbid empty owner field
diff --git a/t/05-TSIG.t b/t/05-TSIG.t
index 44088ac..109caa0 100644
--- a/t/05-TSIG.t
+++ b/t/05-TSIG.t
@@ -1,4 +1,4 @@
-# $Id: 05-TSIG.t 1136 2013-12-10 14:30:00Z willem $ -*-perl-*-
+# $Id: 05-TSIG.t 1279 2014-10-24 08:12:21Z willem $ -*-perl-*-
use strict;
@@ -59,11 +59,12 @@ my $hash = {};
my $null = new Net::DNS::RR("$name NULL")->encode;
my $empty = new Net::DNS::RR("$name $type")->encode;
- my $rxbin = decode Net::DNS::RR( \$empty )->encode;
+ my $buffer = $empty; ## Note: TSIG RR gets destroyed by decoder
+ my $rxbin = decode Net::DNS::RR( \$buffer )->encode;
my $packet = Net::DNS::Packet->new( $name, 'TKEY', 'IN' );
$packet->header->id(1234); # fix packet id
- my $encoded = $rr->encode( 0, {}, $packet );
- my $decoded = decode Net::DNS::RR( \$encoded );
+ my $encoded = $buffer = $rr->encode( 0, {}, $packet );
+ my $decoded = decode Net::DNS::RR( \$buffer );
my $hex1 = unpack 'H*', $encoded;
my $hex2 = unpack 'H*', $decoded->encode;
my $hex3 = unpack 'H*', substr( $encoded, length $null );
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libnet-dns-perl.git
More information about the Pkg-perl-cvs-commits
mailing list