diff --git a/CHANGES b/CHANGES index ed677b988750c470d1390434ff909ecaffc81aa6..f170c2e5eed9c3ef7606339552164562fe4b460e 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ OpenLDAP 2.4.24 Engineering Fixed liblber to not close invalid sockets (ITS#6585) Fixed libldap dnssrv port format specifier (ITS#6644) Fixed libldap sasl partial write handling (ITS#6639) + Fixed libldap url parsing with NULL host (ITS#6653) Fixed ldapsearch segfault with deref (ITS#6638) Fixed slapd acl parsing overflow (ITS#6611) Fixed slapd modify to return actual error (ITS#6581) diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c index 2c4094cb9c67f466295e94f1bb985ce017e74ceb..4e641a37063b75eb0a681323fe4ec39f45113432 100644 --- a/libraries/libldap/url.c +++ b/libraries/libldap/url.c @@ -1425,6 +1425,7 @@ ldap_url_list2hosts (LDAPURLDesc *ludlist) /* 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; @@ -1437,6 +1438,7 @@ ldap_url_list2hosts (LDAPURLDesc *ludlist) 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 { @@ -1449,7 +1451,7 @@ ldap_url_list2hosts (LDAPURLDesc *ludlist) } if (p != s) p--; /* nuke that extra space */ - *p = 0; + *p = '\0'; return s; }