X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Fextended.c;h=5008de7acc2e33ec2fb7bdcb848227ca41cf0090;hb=374cd32eb6b8c01fd41a11b1f949025fa863a5b6;hp=2661150224394265ef18a81f4fccd36423ae27ea;hpb=d611a4b49a00238ed32ae84c68f27c6a0ef2273a;p=openldap diff --git a/servers/slapd/back-ldap/extended.c b/servers/slapd/back-ldap/extended.c index 2661150224..5008de7acc 100644 --- a/servers/slapd/back-ldap/extended.c +++ b/servers/slapd/back-ldap/extended.c @@ -100,6 +100,7 @@ ldap_back_exop_passwd( LDAPMessage *res; ber_int_t msgid; int rc, isproxy; + int do_retry = 1; dncookie dc; lc = ldap_back_getconn(op, rs); @@ -128,15 +129,12 @@ ldap_back_exop_passwd( } } +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); @@ -166,6 +164,10 @@ ldap_back_exop_passwd( } 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); @@ -173,5 +175,9 @@ ldap_back_exop_passwd( rs->sr_text = NULL; rc = -1; } + if (mdn.bv_val != op->o_req_dn.bv_val) { + free(mdn.bv_val); + } + return rc; }