[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#5251) getaddrinfo might return duplicate results
Ralf Haferkamp wrote:
> On Donnerstag, 29. November 2007, hyc@symas.com wrote:
>> rhafer@suse.de wrote:
>>> Full_Name: Ralf Haferkamp
>>> Version: All
>>> OS: Linux, glibc 2.7
>>> URL: ftp://ftp.openldap.org/incoming/
>>> Submission from: (NULL) (89.166.161.148)
>>>
>>>
>>> Newer versions of glibc (2.7) in my case might return duplicate addrinfo
>>> structs in the results under certain circumstances. According to the
>>> friendly glibc maintainer ;) this is not a bug:
>>> http://sources.redhat.com/bugzilla/show_bug.cgi?id=4980
>>> Unfortunately he doesn't give a reason for this change in behavior.
>> Interesting. In that bug report the /etc/hosts file has 127.0.0.1 once and
>> ::1 once, so why is 127.0.0.1 being returned twice? That is clearly bogus.
> The glibc code explicitly checks the /etc/hosts entry for IN6_IS_ADDR_LOOPBACK
> and returns the the in_attr_t for INADDR_LOOPBACK in that case. For reasons
> that the glibc author seemingly doesn't want to share with the outer world.
We're calling getaddrinfo with hints.ai_family = AF_UNSPEC, so we should be
getting both IPv4 and IPv6 addresses back. In this case, converting the V6
address to V4 format is obviously not desired.
Also RFC2553 pretty much forbids this: (Page 25)
Also note that the
IPv6 hex addresses "::" and "::1" MUST NOT be treated as IPv4-
compatible addresses, and if the address is "::", HOST_NOT_FOUND MUST
be returned and a query of the address not performed.
Also for the macro in section 6.7 IN6_IS_ADDR_V4COMPAT MUST return
false for "::" and "::1".
>>> BTW, I didn't find any reference in the related RFCs that state that the
>>> getaddrinfo results need to be unique (nor the opposite).
>>> In my current builds I simply patched slapd to check the getaddrinfo()
>>> results for uniqueness in the slap_get_listner_addresses() function. Has
>>> anybody a better idea how to fix this?
>> I'm sure there's nothing that states that the returned info is required to
>> be unique. The returned data must accurately reflect the host databases
>> being queried though. If you put "127.0.0.1 localhost" twice in /etc/hosts,
>> then it's reasonable to get it returned twice. But if it's only in there
>> once, then returning it twice is a bug.
>
--
-- Howard Chu
Chief Architect, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/