From: Luke Howard Date: Fri, 27 Aug 2004 17:12:01 +0000 (+0000) Subject: Fix a SLAPI bug where slapd could crash if a preop plugin changed the mods X-Git-Tag: OPENLDAP_REL_ENG_2_3_0ALPHA~626 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8c764e8d630cca4b2554ec5442675553564a03af;p=openldap Fix a SLAPI bug where slapd could crash if a preop plugin changed the mods list and a subsequent plugin aborted the operation -- regardless of the preop result the frontend must refetch the array of LDAPMods --- diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c index 083ba72120..bfb2842108 100644 --- a/servers/slapd/modify.c +++ b/servers/slapd/modify.c @@ -422,6 +422,18 @@ fe_op_modify( Operation *op, SlapReply *rs ) rs->sr_err = slapi_int_call_plugins( op->o_bd, SLAPI_PLUGIN_PRE_MODIFY_FN, pb ); + + /* + * It's possible that the preoperation plugin changed the + * modification array, so we need to convert it back to + * a Modification list. + * + * Calling slapi_int_modifications2ldapmods() destroyed modlist so + * we don't need to free it. + */ + slapi_pblock_get( pb, SLAPI_MODIFY_MODS, (void **)&modv ); + modlist = slapi_int_ldapmods2modifications( modv ); + if ( rs->sr_err < 0 ) { /* * A preoperation plugin failure will abort the @@ -445,17 +457,6 @@ fe_op_modify( Operation *op, SlapReply *rs ) modv = NULL; goto cleanup; } - - /* - * It's possible that the preoperation plugin changed the - * modification array, so we need to convert it back to - * a Modification list. - * - * Calling slapi_int_modifications2ldapmods() destroyed modlist so - * we don't need to free it. - */ - slapi_pblock_get( pb, SLAPI_MODIFY_MODS, (void **)&modv ); - modlist = slapi_int_ldapmods2modifications( modv ); } /*