[issue20418] socket.getaddrinfo fails for hostname that is all digits 0-9

2014-01-29 Thread Ariel Glenn

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

2014-01-29 Thread Charles-François Natali

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

2014-01-28 Thread ariel-wikimedia

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

2014-01-28 Thread R. David Murray

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

2014-01-28 Thread Ariel Glenn

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

2014-01-28 Thread Charles-François Natali

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