ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/DNS.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/DNS.pm (file contents):
Revision 1.86 by root, Fri Mar 27 10:49:50 2009 UTC vs.
Revision 1.96 by root, Mon Jun 29 21:00:32 2009 UTC

35 35
36use AnyEvent (); 36use AnyEvent ();
37use AnyEvent::Handle (); 37use AnyEvent::Handle ();
38use AnyEvent::Util qw(AF_INET6); 38use AnyEvent::Util qw(AF_INET6);
39 39
40our $VERSION = 4.35; 40our $VERSION = 4.45;
41 41
42our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222); 42our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222);
43 43
44=item AnyEvent::DNS::a $domain, $cb->(@addrs) 44=item AnyEvent::DNS::a $domain, $cb->(@addrs)
45 45
295C<$ENV{PERL_ANYEVENT_EDNS0}>, but when set to C<1>, AnyEvent::DNS will use 295C<$ENV{PERL_ANYEVENT_EDNS0}>, but when set to C<1>, AnyEvent::DNS will use
296EDNS0 in all requests. 296EDNS0 in all requests.
297 297
298=cut 298=cut
299 299
300our $EDNS0 = $ENV{PERL_ANYEVENT_EDNS0} * 1; # set to 1 to enable (partial) edns0 300our $EDNS0 = $ENV{PERL_ANYEVENT_EDNS0}*1; # set to 1 to enable (partial) edns0
301 301
302our %opcode_id = ( 302our %opcode_id = (
303 query => 0, 303 query => 0,
304 iquery => 1, 304 iquery => 1,
305 status => 2, 305 status => 2,
352 mx => 15, 352 mx => 15,
353 txt => 16, 353 txt => 16,
354 aaaa => 28, 354 aaaa => 28,
355 srv => 33, 355 srv => 33,
356 naptr => 35, # rfc2915 356 naptr => 35, # rfc2915
357 dname => 39, # rfc2672
357 opt => 41, 358 opt => 41,
358 spf => 99, 359 spf => 99,
359 tkey => 249, 360 tkey => 249,
360 tsig => 250, 361 tsig => 250,
361 ixfr => 251, 362 ixfr => 251,
511 # requires perl 5.10, sorry 512 # requires perl 5.10, sorry
512 my ($order, $preference, $flags, $service, $regexp, $offset) = unpack "nn C/a* C/a* C/a* .", $_; 513 my ($order, $preference, $flags, $service, $regexp, $offset) = unpack "nn C/a* C/a* C/a* .", $_;
513 local $ofs = $ofs + $offset - length; 514 local $ofs = $ofs + $offset - length;
514 ($order, $preference, $flags, $service, $regexp, _dec_name) 515 ($order, $preference, $flags, $service, $regexp, _dec_name)
515 }, 516 },
517 39 => sub { local $ofs = $ofs - length; _dec_name }, # dname
516 99 => sub { unpack "(C/a*)*", $_ }, # spf 518 99 => sub { unpack "(C/a*)*", $_ }, # spf
517); 519);
518 520
519sub _dec_rr { 521sub _dec_rr {
520 my $name = _dec_name; 522 my $name = _dec_name;
653 655
654our $RESOLVER; 656our $RESOLVER;
655 657
656sub resolver() { 658sub resolver() {
657 $RESOLVER || do { 659 $RESOLVER || do {
658 $RESOLVER = new AnyEvent::DNS; 660 $RESOLVER = new AnyEvent::DNS untaint => 1;
659 $RESOLVER->os_config; 661 $RESOLVER->os_config;
660 $RESOLVER 662 $RESOLVER
661 } 663 }
662} 664}
663 665
701=item reuse => $seconds 703=item reuse => $seconds
702 704
703The number of seconds (default: C<300>) that a query id cannot be re-used 705The number of seconds (default: C<300>) that a query id cannot be re-used
704after a timeout. If there was no time-out then query ids can be reused 706after a timeout. If there was no time-out then query ids can be reused
705immediately. 707immediately.
708
709=item untaint => $boolean
710
711When true, then the resolver will automatically untaint results, and might
712also ignore certain environment variables.
706 713
707=back 714=back
708 715
709=cut 716=cut
710 717
820 $self->_compile; 827 $self->_compile;
821} 828}
822 829
823=item $resolver->os_config 830=item $resolver->os_config
824 831
825Tries so load and parse F</etc/resolv.conf> on portable operating systems. Tries various 832Tries so load and parse F</etc/resolv.conf> on portable operating
826egregious hacks on windows to force the DNS servers and searchlist out of the system. 833systems. Tries various egregious hacks on windows to force the DNS servers
834and searchlist out of the system.
827 835
828=cut 836=cut
829 837
830sub os_config { 838sub os_config {
831 my ($self) = @_; 839 my ($self) = @_;
937} 945}
938 946
939sub _feed { 947sub _feed {
940 my ($self, $res) = @_; 948 my ($self, $res) = @_;
941 949
950 ($res) = $res =~ /^(.*)$/s
951 if AnyEvent::TAINT && $self->{untaint};
952
942 $res = dns_unpack $res 953 $res = dns_unpack $res
943 or return; 954 or return;
944 955
945 my $id = $self->{id}{$res->{id}}; 956 my $id = $self->{id}{$res->{id}};
946 957

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines