[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#5937) Apparent mistake in ipv6 address handling in tls.c
On Feb 10, 2009, at 4:27 AM, hyc@symas.com wrote:
> nick.hudson@isode.com wrote:
>> Full_Name: nick hudson
>> Version: 2.3.38
>> OS: linux
>> URL:
>> Submission from: (NULL) (62.3.217.250)
>>
>>
>> I think there is a bug in libraries/libldap/tls.c - specifically in
>> this
>> section:
>>
>> #ifdef LDAP_PF_INET6
>> if (name[0] == '['&& strchr(name, ']')) {
>> char *n2 = ldap_strdup(name+1);
>> *strchr(n2, ']') = 2;
>> if (inet_pton(AF_INET6, n2,&addr))
>> ntype = IS_IP6;
>> LDAP_FREE(n2);
>> } else
>> #endif
>>
>> the code is attempting to detect whether part of an LDAP URL
>> represents an IPv6
>> address; it passes the string to inet_pton(), after removing square
>> brackets.
>> But I think this line:
>>
>> *strchr(n2, ']') = 2;
>>
>> is wrong: shouldn't it be using 0 instead of 2?
>>
>> When testing on my local system, using the code above always
>> results in
>> inet_pton returning 0 (not an IPv6 address) - if I modify the
>> strchr line to use
>> zero instead, then inet_pton returns 1 for valid IPv6 addresses.
>>
>> I may be missing something - "2" seems a peculiar value to use so
>> perhaps it
>> does have some special significance - but I think the code as it
>> stands is
>> incorrect.
>
> Nice catch, that's been in there since 2002. Fixed in HEAD.
I counted 5 occurs in HEAD tls*.c...
-- Kurt