develooper Front page | perl.perl5.porters | Postings from August 2019

[perl #134379] Net∷Domain∷hostfqdn() produces different result from hostname -f

From:
Laurence Rochfort
Date:
August 25, 2019 06:05
Subject:
[perl #134379] Net∷Domain∷hostfqdn() produces different result from hostname -f
Message ID:
rt-4.0.24-29093-1566402337-1081.134379-75-0@perl.org
# New Ticket Created by  Laurence Rochfort 
# Please include the string:  [perl #134379]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=134379 >


This is a bug report for perl from laurence.rochfort@oracle.com,
generated with the help of perlbug 1.39 running under perl 5.16.3.

The function Net∷Domain∷hostfqdn() provides different results from hostname -f

Obvervations:

1) It doesn't respect hosts/DNS resolution ordering in nsswitch.conf and resolv.conf
2) Whether there's a shortname or FQDN in /etc/hostname alters the result
3) It looks to behave as if it assumes FQDNs should end in ".com" and will append .com if the hostname doesn't end with .com
4) It uses the search directive in /etc/resolv.conf as if it were a domain directive 
5) It sometimes returns the shortname


Example:

$ cat /etc/hostname
spacewalk-27

$ cat /etc/hosts
127.0.0.1   spacewalk-27 spacewalk-27.vagrant.test
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

x.x.x.x     spacewalk-27 spacewalk-27.vagrant.test

$ cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search uk.oracle.com vagrant.test
nameserver x.x.x.x

$ grep hosts /etc/nsswitch.conf
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

$ hostname -f
spacewalk-27.vagrant.test

$ perl -le 'use Socket; use POSIX; print ((gethostbyname((POSIX::uname)[1]))[0])'
spacewalk-27.vagrant.test

$ perl -le 'use Net::Domain (); print Net::Domain::hostfqdn'
spacewalk-27.vagrant.test.com




For reference:

man 1 hostname:
"
       The  function  gethostname(2)  is used to get the
       hostname.  When the hostname -a, -d, -f or -i  is
       called will gethostbyname(3) be called.  The dif‐
       ference in gethostname(2) and gethostbyname(3) is
       that  gethostbyname(3)  is  network  aware, so it
       consults /etc/nsswitch.conf and /etc/host.conf to
       decide  whether to read information in /etc/host‐
       name or /etc/hosts

       The recommended method of setting the FQDN is  to
       make the hostname be an alias for the fully qual‐
       ified name using /etc/hosts,  DNS,  or  NIS.  For
       example,  if the hostname was "ursula", one might
       have a line in /etc/hosts which reads

              127.0.1.1    ursula.example.com ursula

       Technically: The FQDN is the name  getaddrinfo(3)
       returns  for  the  host name returned by gethost‐
       name(2).  The DNS domain name is the  part  after
       the first dot.

       Therefore  it depends on the configuration of the
       resolver (usually in /etc/host.conf) how you  can
       change  it.  Usually  the  hosts  file  is parsed
       before DNS or NIS, so it is most common to change
       the FQDN in /etc/hosts.
"

man 5 resolv.conf:
"
       domain Local domain name.
              Most  queries  for names within this domain
              can use short names relative to  the  local
              domain.   If set to '.', the root domain is
              considered.  If no domain entry is present,
              the  domain  is  determined  from the local
              hostname returned  by  gethostname(2);  the
              domain part is taken to be everything after
              the first '.'.  Finally,  if  the  hostname
              does  not  contain  a domain part, the root
              domain is assumed.

       search Search list for host-name lookup.
"
---
Flags:
    category=library
    severity=medium
---
Site configuration information for perl 5.16.3:

Configured by Red Hat, Inc. at Mon Jan 21 09:25:23 PST 2019.

Summary of my perl5 (revision 5 version 16 subversion 3) configuration:
   
  Platform:
    osname=linux, osvers=4.1.12-94.3.5.el7uek.x86_64, archname=x86_64-linux-thread-multi
    uname='linux x86-ol7-builder-01.us.oracle.com 4.1.12-94.3.5.el7uek.x86_64 #2 smp wed may 24 08:36:18 pdt 2017 x86_64 x86_64 x86_64 gnulinux '
    config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Dccdlflags=-Wl,--enable-new-dtags -Dlddlflags=-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Wl,-z,relro  -DDEBUGGING=-g -Dversion=5.16.3 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5 -Dsitearch=/usr/local/lib64/perl5 -Dprivlib=/usr/share/perl5 -Dvendorlib=/usr/share/perl5/vendor_perl -Darchlib=/usr/lib64/perl5 -Dvendorarch=/usr/lib64/perl5/vendor_perl -Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithreads -Dusedtrace=/usr/bin/dtrace -Duselargefiles -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 -Dscriptdir=/usr/bin -Dusesitecustomize'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.8.5 20150623 (Red Hat 4.8.5-36.0.1)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -fstack-protector'
    libpth=/usr/local/lib64 /lib64 /usr/lib64
    libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc -lgdbm_compat
    perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.17'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wl,-z,relro '

Locally applied patches:
    Fedora Patch1: Removes date check, Fedora/RHEL specific
    Fedora Patch3: support for libdir64
    Fedora Patch4: use libresolv instead of libbind
    Fedora Patch5: USE_MM_LD_RUN_PATH
    Fedora Patch6: Skip hostname tests, due to builders not being network capable
    Fedora Patch7: Dont run one io test due to random builder failures
    Fedora Patch9: Fix find2perl to translate ? glob properly (RT#113054)
    Fedora Patch10: Fix broken atof (RT#109318)
    Fedora Patch13: Clear $@ before \"do\" I/O error (RT#113730)
    Fedora Patch14: Do not truncate syscall() return value to 32 bits (RT#113980)
    Fedora Patch15: Override the Pod::Simple::parse_file (CPANRT#77530)
    Fedora Patch16: Do not leak with attribute on my variable (RT#114764)
    Fedora Patch17: Allow operator after numeric keyword argument (RT#105924)
    Fedora Patch18: Extend stack in File::Glob::glob, (RT#114984)
    Fedora Patch19: Do not crash when vivifying $|
    Fedora Patch20: Fix misparsing of maketext strings (CVE-2012-6329)
    Fedora Patch21: Add NAME headings to CPAN modules (CPANRT#73396)
    Fedora Patch22: Fix leaking tied hashes (RT#107000) [1]
    Fedora Patch23: Fix leaking tied hashes (RT#107000) [2]
    Fedora Patch24: Fix leaking tied hashes (RT#107000) [3]
    Fedora Patch25: Fix dead lock in PerlIO after fork from thread (RT#106212)
    Fedora Patch26: Make regexp safe in a signal handler (RT#114878)
    Fedora Patch27: Update h2ph(1) documentation (RT#117647)
    Fedora Patch28: Update pod2html(1) documentation (RT#117623)
    Fedora Patch29: Document Math::BigInt::CalcEmu requires Math::BigInt (CPAN RT#85015)
    RHEL Patch30: Use stronger algorithm needed for FIPS in t/op/crypt.t (RT#121591)
    RHEL Patch31: Make *DBM_File desctructors thread-safe (RT#61912)
    RHEL Patch32: Use stronger algorithm needed for FIPS in t/op/taint.t (RT#123338)
    RHEL Patch33: Remove CPU-speed-sensitive test in Benchmark test
    RHEL Patch34: Make File::Glob work with threads again
    RHEL Patch35: Fix CRLF conversion in ASCII FTP upload (CPAN RT#41642)
    RHEL Patch36: Do not leak the temp utf8 copy of namepv (CPAN RT#123786)
    RHEL Patch37: Fix duplicating PerlIO::encoding when spawning threads (RT#31923)
    RHEL Patch38: Add SSL support to Net::SMTP (CPAN RT#93823) [1]
    RHEL Patch39: Add SSL support to Net::SMTP (CPAN RT#93823) [2]
    RHEL Patch40: Add SSL support to Net::SMTP (CPAN RT#93823) [3]
    RHEL Patch41: Add SSL support to Net::SMTP (CPAN RT#93823) [4]
    RHEL Patch42: Do not overload \"..\" in Math::BigInt (CPAN RT#80182)
    RHEL Patch43: Fix CVE-2018-18311 Integer overflow leading to buffer overflow

---
@INC for perl 5.16.3:
    /usr/local/lib64/perl5
    /usr/local/share/perl5
    /usr/lib64/perl5/vendor_perl
    /usr/share/perl5/vendor_perl
    /usr/lib64/perl5
    /usr/share/perl5
    .

---
Environment for perl 5.16.3:
    HOME=/home/vagrant
    LANG=en_US.utf-8
    LANGUAGE (unset)
    LC_ALL=en_US.utf-8
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
    PERL_BADLANG (unset)
    SHELL=/bin/bash




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About