LDAPMessage *res;
ber_int_t msgid;
int rc, isproxy;
+ int do_retry = 1;
dncookie dc;
lc = ldap_back_getconn(op, rs);
}
}
+retry:
rc = ldap_passwd(lc->ld, isproxy ? &mdn : NULL,
qpw->rs_old.bv_val ? &qpw->rs_old : NULL,
qpw->rs_new.bv_val ? &qpw->rs_new : NULL,
op->o_ctrls, NULL, &msgid);
- if (mdn.bv_val != op->o_req_dn.bv_val) {
- free(mdn.bv_val);
- }
-
if (rc == LDAP_SUCCESS) {
if (ldap_result(lc->ld, msgid, 1, NULL, &res) == -1) {
ldap_get_option(lc->ld, LDAP_OPT_ERROR_NUMBER, &rc);
}
if (rc != LDAP_SUCCESS) {
rs->sr_err = slap_map_api2result( rs );
+ if ( rs->sr_err == LDAP_UNAVAILABLE && do_retry ) {
+ do_retry = 0;
+ if ( ldap_back_retry (lc, op, rs )) goto retry;
+ }
send_ldap_result(op, rs);
if (rs->sr_matched) free((char *)rs->sr_matched);
if (rs->sr_text) free((char *)rs->sr_text);
rs->sr_text = NULL;
rc = -1;
}
+ if (mdn.bv_val != op->o_req_dn.bv_val) {
+ free(mdn.bv_val);
+ }
+
return rc;
}