mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
make sure orr_newrdn is passed correctly to libldap (ITS#5397)
This commit is contained in:
parent
b3e5e04595
commit
b23e4f15a9
@ -44,6 +44,7 @@ ldap_back_modrdn(
|
|||||||
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
ldap_back_send_t retrying = LDAP_BACK_RETRYING;
|
||||||
int rc = LDAP_SUCCESS;
|
int rc = LDAP_SUCCESS;
|
||||||
char *newSup = NULL;
|
char *newSup = NULL;
|
||||||
|
struct berval newrdn = BER_BVNULL;
|
||||||
|
|
||||||
if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
|
if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
|
||||||
return rs->sr_err;
|
return rs->sr_err;
|
||||||
@ -72,6 +73,13 @@ ldap_back_modrdn(
|
|||||||
newSup = op->orr_newSup->bv_val;
|
newSup = op->orr_newSup->bv_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NOTE: we need to copy the newRDN in case it was formed
|
||||||
|
* from a DN by simply changing the length (ITS#5397) */
|
||||||
|
newrdn = op->orr_newrdn;
|
||||||
|
if ( newrdn.bv_val[ newrdn.bv_len ] != '\0' ) {
|
||||||
|
ber_dupbv_x( &newrdn, &op->orr_newrdn, op->o_tmpmemctx );
|
||||||
|
}
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
ctrls = op->o_ctrls;
|
ctrls = op->o_ctrls;
|
||||||
rc = ldap_back_controls_add( op, rs, lc, &ctrls );
|
rc = ldap_back_controls_add( op, rs, lc, &ctrls );
|
||||||
@ -82,7 +90,7 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
rs->sr_err = ldap_rename( lc->lc_ld, op->o_req_dn.bv_val,
|
rs->sr_err = ldap_rename( lc->lc_ld, op->o_req_dn.bv_val,
|
||||||
op->orr_newrdn.bv_val, newSup,
|
newrdn.bv_val, newSup,
|
||||||
op->orr_deleteoldrdn, ctrls, NULL, &msgid );
|
op->orr_deleteoldrdn, ctrls, NULL, &msgid );
|
||||||
rc = ldap_back_op_result( lc, op, rs, msgid,
|
rc = ldap_back_op_result( lc, op, rs, msgid,
|
||||||
li->li_timeout[ SLAP_OP_MODRDN ],
|
li->li_timeout[ SLAP_OP_MODRDN ],
|
||||||
@ -99,6 +107,10 @@ retry:
|
|||||||
cleanup:
|
cleanup:
|
||||||
(void)ldap_back_controls_free( op, rs, &ctrls );
|
(void)ldap_back_controls_free( op, rs, &ctrls );
|
||||||
|
|
||||||
|
if ( newrdn.bv_val != op->orr_newrdn.bv_val ) {
|
||||||
|
op->o_tmpfree( newrdn.bv_val, op->o_tmpmemctx );
|
||||||
|
}
|
||||||
|
|
||||||
if ( lc != NULL ) {
|
if ( lc != NULL ) {
|
||||||
ldap_back_release_conn( li, lc );
|
ldap_back_release_conn( li, lc );
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ meta_back_modrdn( Operation *op, SlapReply *rs )
|
|||||||
int msgid;
|
int msgid;
|
||||||
int do_retry = 1;
|
int do_retry = 1;
|
||||||
LDAPControl **ctrls = NULL;
|
LDAPControl **ctrls = NULL;
|
||||||
|
struct berval newrdn = BER_BVNULL;
|
||||||
|
|
||||||
mc = meta_back_getconn( op, rs, &candidate, LDAP_BACK_SENDERR );
|
mc = meta_back_getconn( op, rs, &candidate, LDAP_BACK_SENDERR );
|
||||||
if ( !mc || !meta_back_dobind( op, rs, mc, LDAP_BACK_SENDERR ) ) {
|
if ( !mc || !meta_back_dobind( op, rs, mc, LDAP_BACK_SENDERR ) ) {
|
||||||
@ -118,6 +119,13 @@ meta_back_modrdn( Operation *op, SlapReply *rs )
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NOTE: we need to copy the newRDN in case it was formed
|
||||||
|
* from a DN by simply changing the length (ITS#5397) */
|
||||||
|
newrdn = op->orr_newrdn;
|
||||||
|
if ( newrdn.bv_val[ newrdn.bv_len ] != '\0' ) {
|
||||||
|
ber_dupbv_x( &newrdn, &op->orr_newrdn, op->o_tmpmemctx );
|
||||||
|
}
|
||||||
|
|
||||||
retry:;
|
retry:;
|
||||||
ctrls = op->o_ctrls;
|
ctrls = op->o_ctrls;
|
||||||
if ( meta_back_controls_add( op, rs, mc, candidate, &ctrls ) != LDAP_SUCCESS )
|
if ( meta_back_controls_add( op, rs, mc, candidate, &ctrls ) != LDAP_SUCCESS )
|
||||||
@ -127,7 +135,7 @@ retry:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
rs->sr_err = ldap_rename( mc->mc_conns[ candidate ].msc_ld,
|
rs->sr_err = ldap_rename( mc->mc_conns[ candidate ].msc_ld,
|
||||||
mdn.bv_val, op->orr_newrdn.bv_val,
|
mdn.bv_val, newrdn.bv_val,
|
||||||
mnewSuperior.bv_val, op->orr_deleteoldrdn,
|
mnewSuperior.bv_val, op->orr_deleteoldrdn,
|
||||||
ctrls, NULL, &msgid );
|
ctrls, NULL, &msgid );
|
||||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||||
@ -156,6 +164,10 @@ cleanup:;
|
|||||||
BER_BVZERO( &mnewSuperior );
|
BER_BVZERO( &mnewSuperior );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( newrdn.bv_val != op->orr_newrdn.bv_val ) {
|
||||||
|
op->o_tmpfree( newrdn.bv_val, op->o_tmpmemctx );
|
||||||
|
}
|
||||||
|
|
||||||
if ( mc ) {
|
if ( mc ) {
|
||||||
meta_back_release_conn( mi, mc );
|
meta_back_release_conn( mi, mc );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user