Since when did the lack of reverse mean that forward lookups were broken?
Why you don’t quote completely the message. You find this normal ?
svg% host cancer.org
cancer.org has address 0.0.0.0
cancer.org has address 209.135.47.118
svg%
sigh No, that’s not normal, but you then demonstrated that it had no
reverse – seemingly to make your point. My apologies if I misunderstood,
but the fact remains that Ruby’s gethostbyname is seriously broken and
won’t look up hostnames that have no reverse, “broken” or not.
For example, rotten.com can’t be looked up using Ruby and isn’t “broken”.
host rotten.com
rotten.com has address 216.218.248.174
host 216.218.248.174
Host not found.
irb
irb(main):001:0> require ‘socket’
=> true
irb(main):002:0> Socket::gethostbyname(‘rotten.com’)
SocketError: host not found
from (irb):2:in `gethostbyname’
from (irb):2
We already know that the “broken” cancer.org doesn’t work.
irb(main):003:0> Socket::gethostbyname(‘cancer.org’)
SocketError: host not found
from (irb):3:in `gethostbyname’
from (irb):3
But getaddrinfo does work, though requires you to specify a service name.
irb(main):007:0> Socket::getaddrinfo(‘rotten.com’, ‘http’)
=> [[“AF_INET”, 80, “216.218.248.174”, “216.218.248.174”, 2, 2, 17],
[“AF_INET”, 80, “216.218.248.174”, “216.218.248.174”, 2, 1, 6]]
Broken it might be, but Ruby is still able to look up cancer.org’s A records
with no trouble if you use getaddrinfo.
irb(main):009:0> Socket::getaddrinfo(‘cancer.org’, ‘http’)
=> [[“AF_INET”, 80, “0.0.0.0”, “0.0.0.0”, 2, 2, 17], [“AF_INET”, 80,
“209.135.47.118”, “209.135.47.118”, 2, 2, 17], [“AF_INET”, 80,
“209.135.47.118”, “209.135.47.118”, 2, 1, 6], [“AF_INET”, 80, “0.0.0.0”,
“0.0.0.0”, 2, 1, 6]]
Lest you think it’s not Ruby’s fault, both work fine with Perl.
perl -e ‘print join(“.”, unpack(“C4”, (gethostbyname(“rotten.com”))[4]))’
216.218.248.174
perl -e ‘print join(“.”, unpack(“C4”, (gethostbyname(“cancer.org”))[4])),“\n”’
209.135.47.118
They also work fine in Python.
import socket
socket.gethostbyname(“rotten.com”)
‘216.218.248.174’
socket.gethostbyname(“cancer.org”)
‘209.135.47.118’
Why does Ruby persist in this nonsense? People will expect gethostbyname to
Just Work since it does everywhere else. I posted RCR#46 about this bug
almost two years ago now and, it seems, people are still having problems
with it. Maybe it’s time to fix it finally?
RCR#46 lives at http://www.rubygarden.org/article.php?sid=118
···
On Sat, 27 Sep 2003 23:34:54 +0900, ts decoux@moulon.inra.fr wrote: