mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
Don't discard plugin status code
This commit is contained in:
parent
48d1046a35
commit
eec4651913
@ -218,11 +218,9 @@ slapi_over_result( Operation *op, SlapReply *rs, int type )
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
slapi_op_bind_callback( Operation *op, SlapReply *rs )
|
slapi_op_bind_callback( Operation *op, SlapReply *rs, int prc )
|
||||||
{
|
{
|
||||||
int rc = rs->sr_err;
|
switch ( prc ) {
|
||||||
|
|
||||||
switch ( rc ) {
|
|
||||||
case SLAPI_BIND_SUCCESS:
|
case SLAPI_BIND_SUCCESS:
|
||||||
/* Continue with backend processing */
|
/* Continue with backend processing */
|
||||||
break;
|
break;
|
||||||
@ -241,7 +239,7 @@ slapi_op_bind_callback( Operation *op, SlapReply *rs )
|
|||||||
* Plugin will have called slapi_pblock_set(LDAP_CONN_DN) which
|
* Plugin will have called slapi_pblock_set(LDAP_CONN_DN) which
|
||||||
* will have set conn->c_dn and conn->c_ndn
|
* will have set conn->c_dn and conn->c_ndn
|
||||||
*/
|
*/
|
||||||
if ( BER_BVISNULL( &op->o_conn->c_ndn ) && rc == 1 ) {
|
if ( BER_BVISNULL( &op->o_conn->c_ndn ) && prc == 1 ) {
|
||||||
/* No plugins were called; continue processing */
|
/* No plugins were called; continue processing */
|
||||||
return LDAP_SUCCESS;
|
return LDAP_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -266,17 +264,16 @@ slapi_op_bind_callback( Operation *op, SlapReply *rs )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rs->sr_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
slapi_op_search_callback( Operation *op, SlapReply *rs )
|
slapi_op_search_callback( Operation *op, SlapReply *rs, int prc )
|
||||||
{
|
{
|
||||||
Slapi_PBlock *pb = SLAPI_OPERATION_PBLOCK( op );
|
Slapi_PBlock *pb = SLAPI_OPERATION_PBLOCK( op );
|
||||||
|
|
||||||
/* check preoperation result code */
|
/* check preoperation result code */
|
||||||
if ( rs->sr_err < 0 ) {
|
if ( prc < 0 ) {
|
||||||
slapi_pblock_get( pb, SLAPI_RESULT_CODE, (void **)&rs->sr_err );
|
|
||||||
return rs->sr_err;
|
return rs->sr_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +296,7 @@ struct slapi_op_info {
|
|||||||
int soi_postop; /* postoperation plugin parameter */
|
int soi_postop; /* postoperation plugin parameter */
|
||||||
int soi_internal_preop; /* internal preoperation plugin parameter */
|
int soi_internal_preop; /* internal preoperation plugin parameter */
|
||||||
int soi_internal_postop; /* internal postoperation plugin parameter */
|
int soi_internal_postop; /* internal postoperation plugin parameter */
|
||||||
slap_response *soi_callback; /* preoperation result handler */
|
int (*soi_callback)(Operation *, SlapReply *, int); /* preoperation result handler */
|
||||||
} slapi_op_dispatch_table[] = {
|
} slapi_op_dispatch_table[] = {
|
||||||
{
|
{
|
||||||
SLAPI_PLUGIN_PRE_BIND_FN,
|
SLAPI_PLUGIN_PRE_BIND_FN,
|
||||||
@ -570,23 +567,19 @@ slapi_op_func( Operation *op, SlapReply *rs )
|
|||||||
|
|
||||||
if ( preop_type == 0 ) {
|
if ( preop_type == 0 ) {
|
||||||
/* no SLAPI plugin types for this operation */
|
/* no SLAPI plugin types for this operation */
|
||||||
if ( !internal_op ) {
|
rc = SLAP_CB_CONTINUE;
|
||||||
slapi_pblock_destroy(pb);
|
goto cleanup;
|
||||||
cb.sc_private = NULL;
|
|
||||||
}
|
|
||||||
op->o_callback = cb.sc_next;
|
|
||||||
return SLAP_CB_CONTINUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pb = SLAPI_OPERATION_PBLOCK( op );
|
pb = SLAPI_OPERATION_PBLOCK( op );
|
||||||
|
|
||||||
rs->sr_err = slapi_int_call_plugins( op->o_bd, preop_type, pb );
|
rc = slapi_int_call_plugins( op->o_bd, preop_type, pb );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* soi_callback is responsible for examining the result code
|
* soi_callback is responsible for examining the result code
|
||||||
* of the preoperation plugin and determining whether to
|
* of the preoperation plugin and determining whether to
|
||||||
* abort. This is needed because of special SLAPI behaviour
|
* abort. This is needed because of special SLAPI behaviour
|
||||||
* with bind preoperation plugins.
|
e with bind preoperation plugins.
|
||||||
*
|
*
|
||||||
* The soi_callback function is also used to reset any values
|
* The soi_callback function is also used to reset any values
|
||||||
* returned from the preoperation plugin before calling the
|
* returned from the preoperation plugin before calling the
|
||||||
@ -594,12 +587,12 @@ slapi_op_func( Operation *op, SlapReply *rs )
|
|||||||
*/
|
*/
|
||||||
if ( opinfo->soi_callback == NULL ) {
|
if ( opinfo->soi_callback == NULL ) {
|
||||||
/* default behaviour is preop plugin can abort operation */
|
/* default behaviour is preop plugin can abort operation */
|
||||||
if ( rs->sr_err < 0 )
|
if ( rc < 0 ) {
|
||||||
|
rc = rs->sr_err;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
else
|
}
|
||||||
rs->sr_err = LDAP_SUCCESS;
|
|
||||||
} else {
|
} else {
|
||||||
rc = (opinfo->soi_callback)( op, rs );
|
rc = (opinfo->soi_callback)( op, rs, rc );
|
||||||
if ( rc )
|
if ( rc )
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -615,7 +608,7 @@ slapi_op_func( Operation *op, SlapReply *rs )
|
|||||||
on = (slap_overinst *)op->o_bd->bd_info;
|
on = (slap_overinst *)op->o_bd->bd_info;
|
||||||
oi = on->on_info;
|
oi = on->on_info;
|
||||||
|
|
||||||
rs->sr_err = overlay_op_walk( op, rs, which, oi, on->on_next );
|
rc = overlay_op_walk( op, rs, which, oi, on->on_next );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call postoperation plugins
|
* Call postoperation plugins
|
||||||
@ -630,7 +623,7 @@ cleanup:
|
|||||||
|
|
||||||
op->o_callback = cb.sc_next;
|
op->o_callback = cb.sc_next;
|
||||||
|
|
||||||
return rs->sr_err;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user