getfqdn passes a hostname to gethostbyaddr instead of an ip address
While I was debugging some salt issues I dug into the python code and found a
piece of code in the `socket.py` module that surprised my a bit:
In the `getfqdn` function the `gethostbyaddr` name function is being called with
a `hostname` instead of an `ipaddress`:
"""Get fully qualified domain name from name.
An empty argument is interpreted as meaning the local host.
First the hostname returned by gethostbyaddr() is checked, then
possibly existing aliases. In case no FQDN is available, hostname
from gethostname() is returned.
name = name.strip()
if not name or name == '0.0.0.0':
name = gethostname() # (1)
hostname, aliases, ipaddrs = gethostbyaddr(name) # (2)
for name in aliases:
if '.' in name:
name = hostname
The documentation states:
Return a string containing the hostname of the machine where the Python interpreter is currently executing.
If you want to know the current machine?s IP address, you may want to use gethostbyname(gethostname()).
Also from the documentation:
Return a triple (hostname, aliaslist, ipaddrlist) where hostname is the primary host name responding to the *given ip_address* (...)
As the documentation states it expects an `ip_address` and not a hostname,
but it is given a `hostname` instead.
I used the following two snippets to check the different behaviors:
python -c 'import socket; print(socket.gethostbyaddr(socket.gethostbyname(socket.gethostname())))'
python -c 'import socket; print(socket.gethostbyaddr(socket.gethostname()))'
Now on *most* of my machines the results are exactly the same, but on some it
differs (which I actually attribute to strange `/etc/hosts` configurations).
On the other hand I feel given the documentation, passing the `ip_address` would
be the right thing to do, so I am wondering if I am missing something very
obvious here (especially given that the code seems to be unchanged for 18 years).