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;
|
||||
int rc = LDAP_SUCCESS;
|
||||
char *newSup = NULL;
|
||||
struct berval newrdn = BER_BVNULL;
|
||||
|
||||
if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
|
||||
return rs->sr_err;
|
||||
@ -72,6 +73,13 @@ ldap_back_modrdn(
|
||||
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:
|
||||
ctrls = op->o_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,
|
||||
op->orr_newrdn.bv_val, newSup,
|
||||
newrdn.bv_val, newSup,
|
||||
op->orr_deleteoldrdn, ctrls, NULL, &msgid );
|
||||
rc = ldap_back_op_result( lc, op, rs, msgid,
|
||||
li->li_timeout[ SLAP_OP_MODRDN ],
|
||||
@ -99,6 +107,10 @@ retry:
|
||||
cleanup:
|
||||
(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 ) {
|
||||
ldap_back_release_conn( li, lc );
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ meta_back_modrdn( Operation *op, SlapReply *rs )
|
||||
int msgid;
|
||||
int do_retry = 1;
|
||||
LDAPControl **ctrls = NULL;
|
||||
struct berval newrdn = BER_BVNULL;
|
||||
|
||||
mc = meta_back_getconn( op, rs, &candidate, 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;
|
||||
}
|
||||
|
||||
/* 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:;
|
||||
ctrls = op->o_ctrls;
|
||||
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,
|
||||
mdn.bv_val, op->orr_newrdn.bv_val,
|
||||
mdn.bv_val, newrdn.bv_val,
|
||||
mnewSuperior.bv_val, op->orr_deleteoldrdn,
|
||||
ctrls, NULL, &msgid );
|
||||
rs->sr_err = meta_back_op_result( mc, op, rs, candidate, msgid,
|
||||
@ -156,6 +164,10 @@ cleanup:;
|
||||
BER_BVZERO( &mnewSuperior );
|
||||
}
|
||||
|
||||
if ( newrdn.bv_val != op->orr_newrdn.bv_val ) {
|
||||
op->o_tmpfree( newrdn.bv_val, op->o_tmpmemctx );
|
||||
}
|
||||
|
||||
if ( mc ) {
|
||||
meta_back_release_conn( mi, mc );
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user