1package DNS::LDNS::Zone; 2 3use 5.008008; 4use strict; 5use warnings; 6 7use DNS::LDNS ':all'; 8 9our $VERSION = '0.61'; 10 11sub new { 12 my ($class, %args) = @_; 13 14 my $line_nr = 0; 15 my $status = &LDNS_STATUS_OK; 16 my $zone; 17 my $file; 18 19 if ($args{filename}) { 20 unless (open FILE, $args{filename}) { 21 $DNS::LDNS::last_status = &LDNS_STATUS_FILE_ERR; 22 $DNS::LDNS::line_nr = 0; 23 return; 24 } 25 26 $file = \*FILE; 27 } 28 elsif ($args{file}) { 29 $file = $args{file}; 30 } 31 32 if ($file) { 33 $zone = _new_from_file($file, 34 $args{origin}, 35 $args{default_ttl} || 0, 36 $args{class} || 0, 37 $status, $line_nr); 38 } 39 else { 40 $zone = _new(); 41 } 42 43 if ($args{filename}) { 44 close $file; 45 } 46 47 $DNS::LDNS::last_status = $status; 48 $DNS::LDNS::line_nr = $line_nr; 49 if (!defined $zone) { 50 return; 51 } 52 53 return $zone; 54} 55 56sub to_string { 57 my $self = shift; 58 59 return join('', map { $self->$_ ? $self->$_->to_string : '' } qw/soa rrs/); 60} 61 62sub soa { 63 my $self = shift; 64 return DNS::LDNS::GC::own($self->_soa, $self); 65} 66 67sub set_soa { 68 my ($self, $soa) = @_; 69 DNS::LDNS::GC::disown(my $old = $self->soa); 70 $self->_set_soa(my $copy = $soa->clone); 71 return DNS::LDNS::GC::own($copy, $self); 72} 73 74sub rrs { 75 my $self = shift; 76 return DNS::LDNS::GC::own($self->_rrs, $self); 77} 78 79sub set_rrs { 80 my ($self, $list) = @_; 81 DNS::LDNS::GC::disown(my $old = $self->rrs); 82 $self->_set_rrs(my $copy = $list->clone); 83 return DNS::LDNS::GC::own($copy, $self); 84} 85 86sub DESTROY { 87 DNS::LDNS::GC::free($_[0]); 88} 89 901; 91__END__ 92 93=head1 NAME 94 95DNS::LDNS::Zone - Parsed zonefile 96 97=head1 SYNOPSIS 98 99 use DNS::LDNS ':all' 100 101 my z = new DNS::LDNS::Zone( 102 filename => '/path/to/myzone', 103 origin => new DNS::LDNS::RData(LDNS_RDF_TYPE_DNAME, 'myzone'), #optional 104 default_ttl => 3600, #optional 105 class => LDNS_RR_CLASS_IN, #optional 106 ) 107 my z = new DNS::LDNS::Zone( 108 file => \*FILE, 109 origin => ..., default_ttl => ..., class => ... 110 ) 111 my z = new DNS::LDNS::Zone 112 113 z->to_string 114 z->print(\*FILE) 115 z->canonicalize 116 z->sort 117 rr = z->soa 118 z->set_soa(rr) 119 rrlist = z->rrs 120 z->set_rrs(rrlist) 121 z->sign(keylist) 122 z->sign_nsec3(keylist, algorithm, flags, iterations, salt) 123 124=head1 SEE ALSO 125 126http://www.nlnetlabs.nl/projects/ldns 127 128=head1 AUTHOR 129 130Erik Pihl Ostlyngen, E<lt>erik.ostlyngen@uninett.noE<gt> 131 132=head1 COPYRIGHT AND LICENSE 133 134Copyright (C) 2013 by UNINETT Norid AS 135 136This library is free software; you can redistribute it and/or modify 137it under the same terms as Perl itself, either Perl version 5.14.2 or, 138at your option, any later version of Perl 5 you may have available. 139 140=cut 141