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() produces different result from hostname -f #17135

Closed
p5pRT opened this issue Aug 21, 2019 · 4 comments
Closed

Net∷Domain∷hostfqdn() produces different result from hostname -f #17135

p5pRT opened this issue Aug 21, 2019 · 4 comments

Comments

@p5pRT
Copy link

p5pRT commented Aug 21, 2019

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

Searchable as RT134379$

@p5pRT
Copy link
Author

p5pRT commented Aug 21, 2019

From laurence.rochfort@oracle.com

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

@p5pRT
Copy link
Author

p5pRT commented Aug 22, 2019

From @jkeenan

On Wed, 21 Aug 2019 15​:45​:37 GMT, laurence.rochfort@​oracle.com wrote​:

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.
"

Thank you for this report. Net​::Domain is part of the libnet distribution which, while it is shipped with the Perl 5 core distribution, is maintained upstream on CPAN.

Could you please file this report in libnet's issue tracker by sending email to​:

bug-libnet@​rt.cpan.org

Thank you very much.
--
James E Keenan (jkeenan@​cpan.org)

@p5pRT
Copy link
Author

p5pRT commented Aug 22, 2019

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Aug 22, 2019

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

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

No branches or pull requests

1 participant