mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-06 23:19:59 -05:00
ITS#6758 config_build_entry, avoid SlapReply reuse
Do not use the 'SlapReply *rs' passed to config_build_entry(). Instead pass a new one to op->o_bd->be_add() and copy the output sr_err to rs. This takes care of most SlapReply reuse in bconfig.c.
This commit is contained in:
parent
ab1bc728fa
commit
b120b2a05b
1 changed files with 8 additions and 3 deletions
|
|
@ -6402,6 +6402,8 @@ config_build_attrs( Entry *e, AttributeType **at, AttributeDescription *ad,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* currently (2010) does not access rs except possibly writing rs->sr_err */
|
||||
|
||||
Entry *
|
||||
config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
|
||||
ConfigArgs *c, struct berval *rdn, ConfigOCs *main, ConfigOCs *extra )
|
||||
|
|
@ -6499,9 +6501,12 @@ fail:
|
|||
op->ora_modlist = NULL;
|
||||
slap_add_opattrs( op, NULL, NULL, 0, 0 );
|
||||
if ( !op->o_noop ) {
|
||||
op->o_bd->be_add( op, rs );
|
||||
if ( ( rs->sr_err != LDAP_SUCCESS )
|
||||
&& (rs->sr_err != LDAP_ALREADY_EXISTS) ) {
|
||||
SlapReply rs2 = {REP_RESULT};
|
||||
op->o_bd->be_add( op, &rs2 );
|
||||
rs->sr_err = rs2.sr_err;
|
||||
rs_assert_done( &rs2 );
|
||||
if ( ( rs2.sr_err != LDAP_SUCCESS )
|
||||
&& (rs2.sr_err != LDAP_ALREADY_EXISTS) ) {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue