Blame lib/Net/DNS/RR/TKEY.pm

Packit Service f6e53a
package Net::DNS::RR::TKEY;
Packit Service f6e53a
Packit Service f6e53a
#
Packit Service f6e53a
# $Id: TKEY.pm 1528 2017-01-18 21:44:58Z willem $
Packit Service f6e53a
#
Packit Service f6e53a
our $VERSION = (qw$LastChangedRevision: 1528 $)[1];
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
use strict;
Packit Service f6e53a
use warnings;
Packit Service f6e53a
use base qw(Net::DNS::RR);
Packit Service f6e53a
Packit Service f6e53a
=head1 NAME
Packit Service f6e53a
Packit Service f6e53a
Net::DNS::RR::TKEY - DNS TKEY resource record
Packit Service f6e53a
Packit Service f6e53a
=cut
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
use integer;
Packit Service f6e53a
Packit Service f6e53a
use Carp;
Packit Service f6e53a
Packit Service f6e53a
use Net::DNS::Parameters;
Packit Service f6e53a
use Net::DNS::DomainName;
Packit Service f6e53a
Packit Service f6e53a
use constant ANY  => classbyname qw(ANY);
Packit Service f6e53a
use constant TKEY => typebyname qw(TKEY);
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub _decode_rdata {			## decode rdata from wire-format octet string
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
	my ( $data, $offset ) = @_;
Packit Service f6e53a
Packit Service f6e53a
	my $limit = $offset + $self->{rdlength};
Packit Service f6e53a
Packit Service f6e53a
	( $self->{algorithm}, $offset ) = decode Net::DNS::DomainName(@_);
Packit Service f6e53a
Packit Service f6e53a
	@{$self}{qw(inception expiration mode error)} = unpack "\@$offset N2n2", $$data;
Packit Service f6e53a
	$offset += 12;
Packit Service f6e53a
Packit Service f6e53a
	my $key_size = unpack "\@$offset n", $$data;
Packit Service f6e53a
	$self->{key} = substr $$data, $offset + 2, $key_size;
Packit Service f6e53a
	$offset += $key_size + 2;
Packit Service f6e53a
Packit Service f6e53a
	my $other_size = unpack "\@$offset n", $$data;
Packit Service f6e53a
	$self->{other} = substr $$data, $offset + 2, $other_size;
Packit Service f6e53a
	$offset += $other_size + 2;
Packit Service f6e53a
Packit Service f6e53a
	croak('corrupt TKEY data') unless $offset == $limit;	# more or less FUBAR
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub _encode_rdata {			## encode rdata as wire-format octet string
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	return '' unless defined $self->{algorithm};
Packit Service f6e53a
	my $rdata = $self->{algorithm}->encode;
Packit Service f6e53a
Packit Service f6e53a
	$rdata .= pack 'N2n2', $self->inception, $self->expiration, $self->mode, $self->error;
Packit Service f6e53a
Packit Service f6e53a
	my $key = $self->key;					# RFC2930(2.7)
Packit Service f6e53a
	$rdata .= pack 'na*', length $key, $key;
Packit Service f6e53a
Packit Service f6e53a
	my $other = $self->other;				# RFC2930(2.8)
Packit Service f6e53a
	$rdata .= pack 'na*', length $other, $other;
Packit Service f6e53a
	return $rdata;
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub class {				## overide RR method
Packit Service f6e53a
	return 'ANY';
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
sub encode {				## overide RR method
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	my $owner = $self->{owner}->encode();
Packit Service f6e53a
	my $rdata = eval { $self->_encode_rdata() } || '';
Packit Service f6e53a
	return pack 'a* n2 N n a*', $owner, TKEY, ANY, 0, length $rdata, $rdata;
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub algorithm {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{algorithm} = new Net::DNS::DomainName(shift) if scalar @_;
Packit Service f6e53a
	$self->{algorithm}->name if $self->{algorithm};
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub inception {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{inception} = 0 + shift if scalar @_;
Packit Service f6e53a
	$self->{inception} || 0;
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub expiration {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{expiration} = 0 + shift if scalar @_;
Packit Service f6e53a
	$self->{expiration} || 0;
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub mode {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{mode} = 0 + shift if scalar @_;
Packit Service f6e53a
	$self->{mode} || 0;
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub error {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{error} = 0 + shift if scalar @_;
Packit Service f6e53a
	$self->{error} || 0;
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub key {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{key} = shift if scalar @_;
Packit Service f6e53a
	$self->{key} || "";
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub other {
Packit Service f6e53a
	my $self = shift;
Packit Service f6e53a
Packit Service f6e53a
	$self->{other} = shift if scalar @_;
Packit Service f6e53a
	$self->{other} || "";
Packit Service f6e53a
}
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
sub other_data { &other; }					# uncoverable pod
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
1;
Packit Service f6e53a
__END__
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
=head1 SYNOPSIS
Packit Service f6e53a
Packit Service f6e53a
    use Net::DNS;
Packit Service f6e53a
Packit Service f6e53a
=head1 DESCRIPTION
Packit Service f6e53a
Packit Service f6e53a
Class for DNS TSIG Key (TKEY) resource records.
Packit Service f6e53a
Packit Service f6e53a
=head1 METHODS
Packit Service f6e53a
Packit Service f6e53a
The available methods are those inherited from the base class augmented
Packit Service f6e53a
by the type-specific methods defined in this package.
Packit Service f6e53a
Packit Service f6e53a
Use of undocumented package features or direct access to internal data
Packit Service f6e53a
structures is discouraged and could result in program termination or
Packit Service f6e53a
other unpredictable behaviour.
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
=head2 algorithm
Packit Service f6e53a
Packit Service f6e53a
    $algorithm = $rr->algorithm;
Packit Service f6e53a
    $rr->algorithm( $algorithm );
Packit Service f6e53a
Packit Service f6e53a
The algorithm name is in the form of a domain name with the same
Packit Service f6e53a
meaning as in [RFC 2845].  The algorithm determines how the secret
Packit Service f6e53a
keying material agreed to using the TKEY RR is actually used to derive
Packit Service f6e53a
the algorithm specific key.
Packit Service f6e53a
Packit Service f6e53a
=head2 inception
Packit Service f6e53a
Packit Service f6e53a
    $inception = $rr->inception;
Packit Service f6e53a
    $rr->inception( $inception );
Packit Service f6e53a
Packit Service f6e53a
Time expressed as the number of non-leap seconds modulo 2**32 since the
Packit Service f6e53a
beginning of January 1970 GMT.
Packit Service f6e53a
Packit Service f6e53a
=head2 expiration
Packit Service f6e53a
Packit Service f6e53a
    $expiration = $rr->expiration;
Packit Service f6e53a
    $rr->expiration( $expiration );
Packit Service f6e53a
Packit Service f6e53a
Time expressed as the number of non-leap seconds modulo 2**32 since the
Packit Service f6e53a
beginning of January 1970 GMT.
Packit Service f6e53a
Packit Service f6e53a
=head2 mode
Packit Service f6e53a
Packit Service f6e53a
    $mode = $rr->mode;
Packit Service f6e53a
    $rr->mode( $mode );
Packit Service f6e53a
Packit Service f6e53a
The mode field specifies the general scheme for key agreement or the
Packit Service f6e53a
purpose of the TKEY DNS message, as defined in [RFC2930(2.5)].
Packit Service f6e53a
Packit Service f6e53a
=head2 error
Packit Service f6e53a
Packit Service f6e53a
    $error = $rr->error;
Packit Service f6e53a
    $rr->error( $error );
Packit Service f6e53a
Packit Service f6e53a
The error code field is an extended RCODE.
Packit Service f6e53a
Packit Service f6e53a
=head2 key
Packit Service f6e53a
Packit Service f6e53a
    $key = $rr->key;
Packit Service f6e53a
    $rr->key( $key );
Packit Service f6e53a
Packit Service f6e53a
Sequence of octets representing the key exchange data.
Packit Service f6e53a
The meaning of this data depends on the mode.
Packit Service f6e53a
Packit Service f6e53a
=head2 other
Packit Service f6e53a
Packit Service f6e53a
    $other = $rr->other;
Packit Service f6e53a
    $rr->other( $other );
Packit Service f6e53a
Packit Service f6e53a
Content not defined in the [RFC2930] specification but may be used
Packit Service f6e53a
in future extensions.
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
=head1 COPYRIGHT
Packit Service f6e53a
Packit Service f6e53a
Copyright (c)2000 Andrew Tridgell. 
Packit Service f6e53a
Packit Service f6e53a
All rights reserved.
Packit Service f6e53a
Packit Service f6e53a
Package template (c)2009,2012 O.M.Kolkman and R.W.Franks.
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
=head1 LICENSE
Packit Service f6e53a
Packit Service f6e53a
Permission to use, copy, modify, and distribute this software and its
Packit Service f6e53a
documentation for any purpose and without fee is hereby granted, provided
Packit Service f6e53a
that the above copyright notice appear in all copies and that both that
Packit Service f6e53a
copyright notice and this permission notice appear in supporting
Packit Service f6e53a
documentation, and that the name of the author not be used in advertising
Packit Service f6e53a
or publicity pertaining to distribution of the software without specific
Packit Service f6e53a
prior written permission.
Packit Service f6e53a
Packit Service f6e53a
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit Service f6e53a
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit Service f6e53a
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
Packit Service f6e53a
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Packit Service f6e53a
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Packit Service f6e53a
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Packit Service f6e53a
DEALINGS IN THE SOFTWARE.
Packit Service f6e53a
Packit Service f6e53a
Packit Service f6e53a
=head1 SEE ALSO
Packit Service f6e53a
Packit Service f6e53a
L<perl>, L<Net::DNS>, L<Net::DNS::RR>, RFC2930
Packit Service f6e53a
Packit Service f6e53a
=cut