1package DNS::LDNS::RRList; 2 3use 5.008008; 4use strict; 5use warnings; 6 7use DNS::LDNS; 8 9our $VERSION = '0.61'; 10 11sub new { 12 my ($class, %args) = @_; 13 14 if ($args{hosts_filename} or $args{hosts_file}) { 15 my $file = $args{hosts_file}; 16 if ($args{hosts_filename}) { 17 unless (open FILE, $args{hosts_filename}) { 18 $DNS::LDNS::last_status = &LDNS_STATUS_FILE_ERR; 19 $DNS::LDNS::line_nr = 0; 20 return; 21 } 22 $file = \*FILE; 23 } 24 my $list = _new_hosts_from_file($file, $DNS::LDNS::line_nr); 25 if ($args{hosts_filename}) { 26 close $file; 27 } 28 return $list; 29 } 30 31 return _new(); 32} 33 34sub rr { 35 my ($self, $index) = @_; 36 return DNS::LDNS::GC::own($self->_rr($index), $self); 37} 38 39sub push { 40 my ($self, @rrs) = @_; 41 42 for my $rr (@rrs) { 43 # Push a copy of the rr in case it is already owned 44 $self->_push(my $copy = $rr->clone); 45 DNS::LDNS::GC::own($copy, $self); 46 } 47} 48 49sub push_list { 50 my ($self, $list) = @_; 51 52 $self->_push_list(my $copy = $list->clone); 53 DNS::LDNS::GC::own($copy, $self); 54} 55 56sub verify { 57 my ($self, $sig, $keys) = @_; 58 my $goodkeys = new DNS::LDNS::RRList; 59 my $s = _verify($self, $sig, $keys, $goodkeys); 60 $DNS::LDNS::last_status = $s; 61 return wantarray ? ($s, $goodkeys) : $s; 62} 63 64sub verify_time { 65 my ($self, $sig, $keys, $checktime) = @_; 66 my $goodkeys = new DNS::LDNS::RRList; 67 my $s = _verify_time($self, $sig, $keys, $checktime, $goodkeys); 68 $DNS::LDNS::last_status = $s; 69 return wantarray ? ($s, $goodkeys) : $s; 70} 71 72sub verify_notime { 73 my ($self, $sig, $keys) = @_; 74 my $goodkeys = new DNS::LDNS::RRList; 75 my $s = _verify_notime($self, $sig, $keys, $goodkeys); 76 $DNS::LDNS::last_status = $s; 77 return wantarray ? ($s, $goodkeys) : $s; 78} 79 80sub verify_rrsig_keylist { 81 my ($self, $sig, $keys) = @_; 82 my $goodkeys = new DNS::LDNS::RRList; 83 my $s = _verify_rrsig_keylist($self, $sig, $keys, $goodkeys); 84 $DNS::LDNS::last_status = $s; 85 return wantarray ? ($s, $goodkeys) : $s; 86} 87 88sub verify_rrsig_keylist_notime { 89 my ($self, $sig, $keys, $check_time) = @_; 90 my $goodkeys = new DNS::LDNS::RRList; 91 my $s = _verify_rrsig_keylist_notime($self, $sig, $keys, $goodkeys); 92 $DNS::LDNS::last_status = $s; 93 return wantarray ? ($s, $goodkeys) : $s; 94} 95 96sub get_dnskey_for_rrsig { 97 my ($self, $rrsig) = @_; 98 return DNS::LDNS::GC::own(_get_dnskey_for_rrsig($rrsig, $self), $self); 99} 100 101sub get_rrsig_for_name_and_type { 102 my ($self, $name, $type) = @_; 103 return DNS::LDNS::GC::own( 104 _get_dnskey_for_name_and_type($name, $type, $self), $self); 105} 106 107sub DESTROY { 108 DNS::LDNS::GC::free($_[0]); 109} 110 1111; 112__END__ 113 114=head1 NAME 115 116DNS::LDNS::RRList - List of rrs 117 118=head1 SYNOPSIS 119 120 use DNS::LDNS ':all' 121 122 my l = new DNS::LDNS::RRList 123 my l = new DNS::LDNS::RRList(hosts_file => \*FILE) 124 my l = new DNS::LDNS::RRList(hosts_filename => fname) 125 my l2 = l->clone 126 127 l->to_string 128 129 l->print(\*FILE) 130 count = l->rr_count 131 132 rr = l->rr(index) 133 l->push(@rr) 134 rr = l->pop 135 136 l->push_list(l2) 137 l2 = l->pop_list(count) 138 l2 = l->pop_rrset 139 140 l->compare(l2) 141 142 l2 = l->subtype_by_rdata(rdata, pos) 143 144 bool = l->is_rrset 145 146 bool = l->contains_rr(rr) 147 148 (status, goodkeys) = l->verify(sig, keys) 149 (status, goodkeys) = l->verify_time(sig, keys, checktime) 150 (status, goodkeys) = l->verify_notime(sig, keys) 151 (status, goodkeys) = l->verify_rrsig_keylist(sig, keys) 152 (status, goodkeys) = l->verify_rrsig_keylist_time(sig, keys, checktime) 153 (status, goodkeys) = l->verify_rrsig_keylist_notime(sig, keys) 154 status = l->verify_rrsig(sig, keys) 155 status = l->verify_rrsig_time(sig, keys, checktime) 156 157 rr = l->create_empty_rrsig(key) 158 rrlist = l->sign_public(keylist) 159 160 rrlist->canonicalize 161 rrlist->sort 162 rrlist->sort_nsec3 # the list must contain only nsec3 rrs 163 164 rr = keylist->get_dnskey_for_rrsig(rrsig) 165 rr = keylist->get_rrsig_for_name_and_type(name, type) 166 167=head1 SEE ALSO 168 169http://www.nlnetlabs.nl/projects/ldns 170 171=head1 AUTHOR 172 173Erik Pihl Ostlyngen, E<lt>erik.ostlyngen@uninett.noE<gt> 174 175=head1 COPYRIGHT AND LICENSE 176 177Copyright (C) 2013 by UNINETT Norid AS 178 179This library is free software; you can redistribute it and/or modify 180it under the same terms as Perl itself, either Perl version 5.14.2 or, 181at your option, any later version of Perl 5 you may have available. 182 183=cut 184