[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