Skip Menu |

This queue is for tickets about the Net-DNS CPAN distribution.

Report information
The Basics
Id: 48246
Status: resolved
Priority: 0/
Queue: Net-DNS

People
Owner: Nobody in particular
Requestors: tlhackque [...] yahoo.com
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: 0.65
Fixed in: (no value)



Subject: Net::DNS::RR::name doesn't return final .
The attached small program demonstrates that Net::DNS::RR::name, applied to a DNSKEY record, does not return the trailing '.'. The program will display a query to dlv.isc.org. and its response, both of which have the trailing '.'. It will then walk the vector of answers and print those where the '.' is missing. You will see that string() does include the trailing '.', but name() does not. This is unexpected. Either the code needs to be fixed, or if this is intended, the documentation should reflect this behavior. Although compensation for the missing dot seems to be pervasive in the sources, I believe that the dot should be returned, as it is part of the proper name of the resource. The test code is a stripped-down version of a larger program; there's a small amount of residue remaining. Environment: perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.9-55.0.9.elsmp, archname=i386-linux-thread- multi uname='linux hs20-bc2-2.build.redhat.com 2.6.9-55.0.9.elsmp #1 smp tue sep 25 02:16:15 edt 2007 i686 i686 i386 gnulinux ' config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,- D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer- size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables - Dversion=5.8.8 -Dmyhostname=localhost -Dperladmin=root@localhost - Dcc=gcc -Dcf_by=Red Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr - Darchname=i386-linux -Dvendorprefix=/usr -Dsiteprefix=/usr - Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid - Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog - Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 - Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto - Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto - Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto - Dinc_version_list=5.8.7 5.8.6 5.8.5 -Dscriptdir=/usr/bin' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict- aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include - D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm', optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions - fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 - mtune=generic -fasynchronous-unwind-tables', cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe - Wdeclaration-after-statement -I/usr/local/include -I/usr/include/gdbm' ccversion='', gccversion='4.1.2 20070626 (Red Hat 4.1.2-13)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='gcc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread - lc perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=/lib/libc-2.5.so, so=so, useshrplib=true, libperl=libperl.so gnulibc_version='2.5' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E - Wl,-rpath,/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE' cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,- D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer- size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables - L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Built under linux Compiled at Nov 12 2007 21:36:08 @INC: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .
Subject: Net_DNS_bug
#!/usr/bin/perl use strict; use warnings; use Net::DNS; my $DLV = 'dlv.isc.org.'; my $q = Net::DNS::Resolver->new; $q->udppacketsize(4096); my $p = Net::DNS::Packet->new( $DLV, 'DNSKEY', 'IN' ); $p->header->ad(1); $p->header->cd(0); print( "Resolver:\n",$q->string, "\nPacket:\n", $p->string ); $p = $q->send($p); print( "\nDNS Reply:\n", $p->string ) if( $p ); die( "No data received from DNS\n" ) unless( $p && $p->header->rcode eq 'NOERROR' && $p->header->ancount && $p->header->ad ); for my $k ($p->answer) { next unless( $k->type eq 'DNSKEY' && $k->is_sep && $k->name =~ m/\Q$DLV\E?/ ); print( "Answer = ", $k->string, "\nname( ) = ", $k->name, "\n", ' ' x (9+length($DLV)), "^---Note missing .\n" ) if( $k->name ne $DLV ); }
In general domain names returned by methods will not have a trailing dot, whenever the string of an RR is printed the domain names are made fully qualified. In other words when using accessor methods to data elements you get them as close as that they are stored, that is, without trailing dots. I;'ve tried to document this in the string() method documentation for RR.pm: =head2 string print $rr->string, "\n"; Returns a string representation of the RR. Calls the B<rdatastr> method to get the RR-specific data. Domain names arereturned in RFC1035 format, i.e. all non letter, digit, hyphen characters are represented as \DDD. Besides, all domain names are expanded to fully qualified domain names, with trailing dot. This is in contrast to accessor methods of individual data elements in RR objects, like B<name>, that will not return the trailing dot.