Ralf Haferkamp wrote:
On Donnerstag, 29. November 2007, hyc(a)symas.com wrote:
> rhafer(a)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/