/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2012 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
}
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 ) {
- len -= sprintf( s, "%s://%s%s%s:%d%n", u->lud_scheme,
+ sofar = sprintf( s, "%s://%s%s%s:%d", u->lud_scheme,
is_v6 ? "[" : "",
u->lud_host ? u->lud_host : "",
is_v6 ? "]" : "",
- u->lud_port, &sofar );
+ u->lud_port );
+ len -= sofar;
} else {
- len -= sprintf( s, "%s://%n", u->lud_scheme, &sofar );
+ sofar = sprintf( s, "%s://", u->lud_scheme );
+ len -= sofar;
if ( u->lud_host && u->lud_host[0] ) {
if ( is_v6 ) {
s[sofar++] = '[';
/* figure out how big the string is */
size = 1; /* nul-term */
for (ludp = ludlist; ludp != NULL; ludp = ludp->lud_next) {
+ if ( ludp->lud_host == NULL ) continue;
size += strlen(ludp->lud_host) + 1; /* host and space */
if (strchr(ludp->lud_host, ':')) /* will add [ ] below */
size += 2;
p = s;
for (ludp = ludlist; ludp != NULL; ludp = ludp->lud_next) {
+ if ( ludp->lud_host == NULL ) continue;
if (strchr(ludp->lud_host, ':')) {
p += sprintf(p, "[%s]", ludp->lud_host);
} else {
}
if (p != s)
p--; /* nuke that extra space */
- *p = 0;
+ *p = '\0';
return s;
}