}
 
        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, [] */
                }
        }
 
        int             is_v6 = 0;
        int             is_ipc = 0;
        struct berval   scope = BER_BVNULL;
+       char            *ptr;
 
        if ( u == NULL ) {
                return -1;
                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 ) {