[Bug 1154599] Re: getaddrinfo() returns -11 (EAI_SYSTEM) instead of -2

Thomas Hood 1154599 at bugs.launchpad.net
Tue Jul 30 06:58:07 UTC 2013


Running my test program I find that the new eglibc returns status -2
where the old one returned -11.

New situation: As with Debian 7.0 with libc6 2.17-7, with the default
nsswitch.conf, the returned status / errno is now -2 / 2 (EAI_NONAME /
ENOENT) if no nameserver can be reached or the name does not exist.

As before, shortening the value of "hosts:" in nsswitch.conf to just
"dns" changes errno from 2 to 111 (ECONNREFUSED) when resolv.conf is
empty, 110 (ETIMEDOUT) where the indicated external nameserver can't be
reached  and 101 (ENETUNREACH) where the external nameserver says that
name does not exist... although note that errno isn't supposed to be
significant for any return status except -11 (EAI_SYSTEM); returned
status / errno is always -3 / 11 (EAI_AGAIN / EAGAIN) if the external
interface is deconfigured, even if /etc/resolv.conf is empty — which
surprizes me a bit.

Here is the program output for the indicated values of "hosts:" in
/etc/nsswitch.conf. If you compare these results with earlier results I
posted, note that I changed the order of the tests in the program.

# # With "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4"
# ./a.out
Making resolv.conf empty
Results of looking up www.google.com: status = -2, errno = 2
Results of looking up a bogus name: status = -2, errno = 2
Writing incorrect nameserver option to resolv.conf
Results of looking up www.google.com: status = -2, errno = 2
Results of looking up a bogus name: status = -2, errno = 2
Making resolv.conf empty
Results of looking up www.google.com: status = -2, errno = 2
Results of looking up a bogus name: status = -2, errno = 2
Writing correct nameserver option to resolv.conf
Results of looking up www.google.com: status = 0, errno = 101
Results of looking up a bogus name: status = -2, errno = 2

# # With "hosts: dns"
# ./a.out
Making resolv.conf empty
Results of looking up www.google.com: status = -2, errno = 111
Results of looking up a bogus name: status = -2, errno = 111
Writing incorrect nameserver option to resolv.conf
Results of looking up www.google.com: status = -2, errno = 110
Results of looking up a bogus name: status = -2, errno = 110
Making resolv.conf empty
Results of looking up www.google.com: status = -2, errno = 111
Results of looking up a bogus name: status = -2, errno = 111
Writing correct nameserver option to resolv.conf
Results of looking up www.google.com: status = 0, errno = 101
Results of looking up a bogus name: status = -2, errno = 101

# # After taking down the external network interface
# ./a.out
Making resolv.conf empty
Results of looking up www.google.com: status = -3, errno = 11
Results of looking up a bogus name: status = -3, errno = 11
Writing incorrect nameserver option to resolv.conf
Results of looking up www.google.com: status = -3, errno = 11
Results of looking up a bogus name: status = -3, errno = 11
Making resolv.conf empty
Results of looking up www.google.com: status = -3, errno = 11
Results of looking up a bogus name: status = -3, errno = 11
Writing correct nameserver option to resolv.conf
Results of looking up www.google.com: status = -3, errno = 11
Results of looking up a bogus name: status = -3, errno = 11


# dpkg -l libc6:amd64 | grep ^ii
ii  libc6:amd64                               2.17-7ubuntu1


** Attachment added: "getaddrinfo() test program"
   https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1154599/+attachment/3754121/+files/x.c

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to eglibc in Ubuntu.
https://bugs.launchpad.net/bugs/1154599

Title:
  getaddrinfo() returns -11 (EAI_SYSTEM) instead of -2

Status in “eglibc” package in Ubuntu:
  Fix Released
Status in “python2.7” package in Ubuntu:
  Confirmed
Status in “eglibc” source package in Raring:
  New
Status in “python2.7” source package in Raring:
  New

Bug description:
  $ cat lookup.py
  #!/usr/bin/python
  import sys, socket
  names = ["slashdot.org", "foooooooooowhizzzzzzzz.com"]
  if len(sys.argv) > 1:
     names = sys.argv[1:]
  for iname in names:
      try:
          result = socket.getaddrinfo(iname, None, 0, 0, socket.SOCK_STREAM,
                                      socket.AI_CANONNAME)
          for (fam, stype, proto, cname, sockaddr) in result:
              sys.stdout.write("cname=%s, sockaddr=%s\n" % (cname, sockaddr))
      except socket.gaierror as error:
          sys.stderr.write("%s failed lookup" % iname)

  $ python2.7 lookup.py
  cname=slashdot.org, sockaddr=('216.34.181.45', 0)
  Traceback (most recent call last):
    File "/tmp/x.py", line 10, in <module>
      socket.AI_CANONNAME)
  socket.error: [Errno 2] No such file or directory

  shell returned 1

  $ dpkg -S /usr/bin/python2.7
  python2.7-minimal: /usr/bin/python2.7
  $ dpkg-query --show python2.7-minimal
  python2.7-minimal	2.7.3-16ubuntu1

  This is a behavioral change from quantal (2.7.3-5ubuntu4).

  ProblemType: Bug
  DistroRelease: Ubuntu 13.04
  Package: python 2.7.3-10ubuntu5
  ProcVersionSignature: Ubuntu 3.5.0-21.32-generic 3.5.7.1
  Uname: Linux 3.5.0-21-generic x86_64
  ApportVersion: 2.9.1-0ubuntu1
  Architecture: amd64
  Date: Wed Mar 13 09:52:55 2013
  EcryptfsInUse: Yes
  InstallationDate: Installed on 2011-10-19 (511 days ago)
  InstallationMedia: Ubuntu 11.10 "Oneiric Ocelot" - Release amd64 (20111012)
  MarkForUpload: True
  ProcEnviron:
   TERM=xterm
   PATH=(custom, no user)
   XDG_RUNTIME_DIR=<set>
   LANG=en_US.UTF-8
   SHELL=/bin/bash
  SourcePackage: python-defaults
  UpgradeStatus: Upgraded to raring on 2013-01-07 (64 days ago)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1154599/+subscriptions




More information about the foundations-bugs mailing list