int ipadb_ldap_deref_results(LDAP *lcontext, LDAPMessage *le, LDAPDerefRes **results) { LDAPControl **ctrls = NULL; LDAPControl *derefctrl = NULL; int ret; ret = ldap_get_entry_controls(lcontext, le, &ctrls); if (ret != LDAP_SUCCESS) { return EINVAL; } if (!ctrls) { return ENOENT; } derefctrl = ldap_control_find(LDAP_CONTROL_X_DEREF, ctrls, NULL); if (!derefctrl) { ret = ENOENT; goto done; } ret = ldap_parse_derefresponse_control(lcontext, derefctrl, results); if (ret) { ret = EINVAL; goto done; } ret = 0; done: ldap_controls_free(ctrls); return ret; }
int ldap_parse_deref_control( LDAP *ld, LDAPControl **ctrls, LDAPDerefRes **drp ) { LDAPControl *c; if ( drp == NULL ) { ld->ld_errno = LDAP_PARAM_ERROR; return ld->ld_errno; } *drp = NULL; if ( ctrls == NULL ) { ld->ld_errno = LDAP_CONTROL_NOT_FOUND; return ld->ld_errno; } c = ldap_control_find( LDAP_CONTROL_X_DEREF, ctrls, NULL ); if ( c == NULL ) { /* No deref control was found. */ ld->ld_errno = LDAP_CONTROL_NOT_FOUND; return ld->ld_errno; } ld->ld_errno = ldap_parse_derefresponse_control( ld, c, drp ); return ld->ld_errno; }