On Mon, Mar 16, 2009 at 12:53:18AM -0700, Howard Chu wrote:
You need to make sure that your overlays are configured such that your nops executes before accesslog, to prevent accesslog from attempting to log anything.
Also, in your cancel code, you need to set op->o_callback to NULL before calling send_ldap_error, to make sure that no other overlays run. Then set it back to whatever it was, before returning.
Without modifying the code, configuring nops after accesslog in slapd.conf does prevent it from crashing.
Setting o_callback to NULL fixes the crash. And it seems to fix it regardless of overlay order: whether nops is configured before or after accesslog, it works fine with that cancel code:
if ((m = op->orm_modlist) == NULL) { slap_callback *cb = op->o_callback;
op->o_bd->bd_info = (BackendInfo *)(on->on_info); op->o_callback = NULL; send_ldap_error(op, rs, LDAP_SUCCESS, ""); op->o_callback = cb;
return (rs->sr_err); }