From bddf05fbfeeff7da1361e2431209902d7ed650e3 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Mon, 10 Nov 2008 23:21:37 +0000
Subject: [PATCH] ITS#5739

---
 CHANGES                 |  1 +
 libraries/libldap/url.c | 12 ++++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/CHANGES b/CHANGES
index 83ddf32133..32a9b466c0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,7 @@ OpenLDAP 2.4.13 Engineering
 	Fixed liblutil hex conversion (ITS#5699)
 	Fixed liblutil returning undefined data (ITS#5748)
 	Fixed libldap error code return (ITS#5762)
+	Fixed libldap Ipv6 detection (ITS#5739)
 	Fixed slapd acl checks on ADD (ITS#4556,ITS#5723)
 	Added slapd keyword add_content_acl for add checks (ITS#4556,ITS#5723)
 	Fixed slapd config backend olcLogFile support (ITS#5765)
diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c
index b614965dd0..e672ea22c6 100644
--- a/libraries/libldap/url.c
+++ b/libraries/libldap/url.c
@@ -590,9 +590,11 @@ desc2str_len( LDAPURLDesc *u )
 	}
 
 	if ( u->lud_host && u->lud_host[0] ) {
+		char *ptr;
 		len += hex_escape_len( u->lud_host, URLESC_SLASH );
-		if ( !is_ipc && strchr( u->lud_host, ':' )) {
-			len += 2;	/* IPv6, [] */
+		if ( !is_ipc && ( ptr = strchr( u->lud_host, ':' ))) {
+			if ( strchr( ptr+1, ':' ))
+				len += 2;	/* IPv6, [] */
 		}
 	}
 
@@ -610,6 +612,7 @@ desc2str( LDAPURLDesc *u, char *s, int len )
 	int		is_v6 = 0;
 	int		is_ipc = 0;
 	struct berval	scope = BER_BVNULL;
+	char		*ptr;
 
 	if ( u == NULL ) {
 		return -1;
@@ -637,8 +640,9 @@ desc2str( LDAPURLDesc *u, char *s, int len )
 		sep = 1;
 	}
 
-	if ( !is_ipc && u->lud_host && strchr( u->lud_host, ':' )) {
-		is_v6 = 1;
+	if ( !is_ipc && u->lud_host && ( ptr = strchr( u->lud_host, ':' ))) {
+		if ( strchr( ptr+1, ':' ))
+			is_v6 = 1;
 	}
 
 	if ( u->lud_port ) {
-- 
GitLab