Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Net::Domain->hostfqdn result is based on unecessarily flaky assumptions #10542

Closed
p5pRT opened this issue Aug 10, 2010 · 6 comments
Closed

Net::Domain->hostfqdn result is based on unecessarily flaky assumptions #10542

p5pRT opened this issue Aug 10, 2010 · 6 comments

Comments

@p5pRT
Copy link

p5pRT commented Aug 10, 2010

Migrated from rt.perl.org#77136 (status was 'rejected')

Searchable as RT77136$

@p5pRT
Copy link
Author

p5pRT commented Aug 10, 2010

From torge@husfeldt.info

Created by torge@husfeldt.info

On *nix systems, the result of​:

Net​::Domain->hostfqnd()

is always based on the assumption that the domain of localhost is
the first search-domain in the file /etc/resolv.conf, even if a
domain is explicitly given as "domain".
In this it differs from the result of

`hostname -f`

which correctly takes into account the value for "domain", if present
(as well as other information not necessarily accessible in a system-
independent way).

To reproduce​:
edit (as administrator) /etc/resolv.conf so that a domain name different
from your local domain is the first entry in search-domain.
use Net​::Domain;
print Net​::Domain->hostfqdn()

Perl Info

Flags:
    category=library
    severity=low
    module=Net::Domain

Site configuration information for perl 5.10.1:

Configured by Debian Project at Fri Apr 23 07:59:14 UTC 2010.

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:
   
  Platform:
    osname=linux, osvers=2.6.24-27-server, archname=i486-linux-gnu-thread-multi
    uname='linux vernadsky 2.6.24-27-server #1 smp fri mar 12 01:45:06 utc 2010 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des'
    hint=recommended, useposix=true, d_sigaction=define
    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='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.4.3', 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='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /usr/lib64
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.11.1.so, so=so, useshrplib=true, libperl=libperl.so.5.10.1
    gnulibc_version='2.11.1'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'

Locally applied patches:
    


@INC for perl 5.10.1:
    /home/thusfeldt/lib/
    /etc/perl
    /usr/local/lib/perl/5.10.1
    /usr/local/share/perl/5.10.1
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.10
    /usr/share/perl/5.10
    /usr/local/lib/site_perl
    .


Environment for perl 5.10.1:
    HOME=/home/thusfeldt
    LANG=de_DE.UTF-8
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/thusfeldt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    PERL5LIB=:/home/thusfeldt/lib/
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Aug 10, 2010

From torge@husfeldt.info

Actually, on taking a deeper look into this, I found that the situation
is even more convoluted.

The domain used in hostfqdn is the first "word" after the last
occurrence of either "domain" or "search" in the first column of the
/etc/resolv.conf file.

To make the default a bit more sensible it would be good to prefer the
"domain"-value over the "first search domain".

Proposed Patch attached

@p5pRT
Copy link
Author

p5pRT commented Aug 10, 2010

From torge@husfeldt.info

hostfqdn.patch
*** Domain.pm.bak	2010-08-10 16:06:02.000000000 +0200
--- Domain.pm	2010-08-10 16:15:09.000000000 +0200
***************
*** 127,139 ****
    local *RES;
    local ($_);
  
    if (open(RES, "/etc/resolv.conf")) {
      while (<RES>) {
!       $domain = $1
!         if (/\A\s*(?:domain|search)\s+(\S+)/);
      }
      close(RES);
  
      return $domain
        if (defined $domain);
    }
--- 127,147 ----
    local *RES;
    local ($_);
  
+   my $res_first_search_domain;
+ 
    if (open(RES, "/etc/resolv.conf")) {
      while (<RES>) {
!       if (/\A\s*domain\s+(\S+)/) {
!         $domain = $1;
!         last;
!       }
!       $res_first_search_domain = $1
!         if (/\A\s*search\s+(\S+)/);
      }
      close(RES);
  
+     $domain ||= $res_first_search_domain;
+ 
      return $domain
        if (defined $domain);
    }

@p5pRT
Copy link
Author

p5pRT commented Aug 10, 2010

torge@husfeldt.info - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Aug 25, 2010

From @iabyn

Note that Net​::Domain is part of the libnet CPAN distribution, and any
fixes should be applied by the CPAN author rather than to the copy
bundled with perl. I suggest you report the bug using the following link​:

https://rt.cpan.org/Public/Dist/Display.html?Name=libnet

I'm closing this ticket now in the perl queue.

@p5pRT
Copy link
Author

p5pRT commented Aug 25, 2010

@iabyn - Status changed from 'open' to 'rejected'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant