Index: head/usr.sbin/ypldap/aldap.c =================================================================== --- head/usr.sbin/ypldap/aldap.c +++ head/usr.sbin/ypldap/aldap.c @@ -716,12 +716,19 @@ return NULL; for (a = elm, i = 0; a != NULL && a->be_type == BER_TYPE_OCTETSTRING; - a = a->be_next, i++) { + a = a->be_next) { ber_get_string(a, &s); ret[i] = utoa(s); + if (ret[i] != NULL) + i++; + } - ret[i + 1] = NULL; + if (i == 0) { + free(ret); + return NULL; + } + ret[i] = NULL; return ret; } Index: head/usr.sbin/ypldap/ber.c =================================================================== --- head/usr.sbin/ypldap/ber.c +++ head/usr.sbin/ypldap/ber.c @@ -621,7 +621,6 @@ return (ber); fail: - ber_free_elements(ber); return (NULL); } Index: head/usr.sbin/ypldap/ldapclient.c =================================================================== --- head/usr.sbin/ypldap/ldapclient.c +++ head/usr.sbin/ypldap/ldapclient.c @@ -475,8 +475,6 @@ } else { if (aldap_match_attr(m, idm->idm_attrs[i], &ldap_attrs) == -1) return (-1); - if (ldap_attrs[0] == NULL) - return (-1); if (strlcat(ir->ir_line, ldap_attrs[0], sizeof(ir->ir_line)) >= sizeof(ir->ir_line)) { aldap_free_attr(ldap_attrs);