[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9
Ariel Glenn added the comment: Verified that with AF_INET instead of AF_UNSPEC I get the error from my c program. I'll take this to the glibc folks and see what's up. Thanks. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue20418 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9
Changes by Charles-François Natali cf.nat...@gmail.com: -- resolution: - invalid stage: - committed/rejected status: open - closed ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue20418 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9
New submission from ariel-wikimedia: With python 2.7.5 (running on fedora 20 with all updates), socket.getaddrinfo for a hostname such as 836937931829 will fail. Docker produces these sorts of hostnames (really random hex strings, but some hex strings only contain digits 0-9). How to reproduce: Add the lines 172.17.10.53blobber 172.17.10.54836937931829 to /etc/hosts run the following: import socket print socket.getaddrinfo('172.17.10.53',80,socket.AF_INET,0,socket.SOL_TCP) print socket.getaddrinfo('blobber',80,socket.AF_INET,0,socket.SOL_TCP) print socket.getaddrinfo('172.17.10.54',80,socket.AF_INET,0,socket.SOL_TCP) print socket.getaddrinfo('836937931829',80,socket.AF_INET,0,socket.SOL_TCP) Expected output: [(2, 1, 6, '', ('172.17.10.53', 80))] [(2, 1, 6, '', ('172.17.10.53', 80))] [(2, 1, 6, '', ('172.17.10.54', 80))] [(2, 1, 6, '', ('172.17.10.54', 80))] Actual output: [(2, 1, 6, '', ('172.17.10.53', 80))] [(2, 1, 6, '', ('172.17.10.53', 80))] [(2, 1, 6, '', ('172.17.10.54', 80))] Traceback (most recent call last): File ./test-getaddrinfo.py, line 6, in module print socket.getaddrinfo('836937931829',80,socket.AF_INET,0,socket.SOL_TCP) socket.gaierror: [Errno -2] Name or service not known -- components: Library (Lib) messages: 209539 nosy: ariel-wikimedia priority: normal severity: normal status: open title: socket.getaddrinfo fails for hostname that is all digits 0-9 type: behavior versions: Python 2.7 ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue20418 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9
R. David Murray added the comment: getaddrinfo is a thin wrapper around the system call. Have you tried the same thing in a C program and had it work? My guess would be that the all-numeric 'hostname' is being treated as the integer form of an IP address. I can't immediately find any documentation that addresses this for getaddrinfo, but the impression I get from googling is that turning numbers into ip addresses is not specified behavior but is what (most?) libc implementations do. -- nosy: +r.david.murray ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue20418 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9
Ariel Glenn added the comment: Yes, I had checked that just in case; getaddrinfo(3) works for the all-digit hostname, returning no error. I'm using these hints: memset(hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; hints.ai_protocol = 0; hints.ai_canonname = NULL; hints.ai_addr = NULL; hints.ai_next = NULL; Tested on glibc-2.18. -- nosy: +ariel ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue20418 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9
Charles-François Natali added the comment: The culprint isn't Python, but the libc: $ ./python -c import socket; print(socket.getaddrinfo('836937931829', 80, socket.AF_INET, 0, socket.SOL_TCP)) Traceback (most recent call last): File string, line 1, in module socket.gaierror: [Errno -2] Name or service not known But with AF_UNSPEC: $ ./python -c import socket; print(socket.getaddrinfo('836937931829', 80, socket.AF_UNSPEC, 0, socket.SOL_TCP)) [(2, 1, 6, '', ('172.17.10.54', 80))] And gdb confirms that the arguments are correctly passed to the libc: $ gdb --args ./python -c import socket; print(socket.getaddrinfo('836937931829', 80, socket.AF_INET, 0, socket.SOL_TCP)) Breakpoint 1, __GI_getaddrinfo (name=0xb7cc9c84 836937931829, service=0xb24e 80, hints=0xb278, pai=0xb274) at ../sysdeps/posix/getaddrinfo.c:2379 (gdb) p *hints $4 = {ai_flags = 0, ai_family = 2, ai_socktype = 0, ai_protocol = 6, ai_addrlen = 0, ai_addr = 0x0, ai_canonname = 0x0, ai_next = 0x0} You can also check directly with getaddrinfo(3). -- nosy: +neologix ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue20418 ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com