Skip to content
Snippets Groups Projects
Commit a1eb25c5 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Initial dontUseCopy implementation

Needs to be extended to compare
parent 97fa3f1e
No related branches found
No related tags found
No related merge requests found
......@@ -177,7 +177,7 @@ static struct slap_control control_defs[] = {
#ifdef SLAP_DONTUSECOPY
{ LDAP_CONTROL_DONTUSECOPY,
(int)offsetof(struct slap_control_ids, sc_dontUseCopy),
SLAP_CTRL_INTROGATE|SLAP_CTRL_HIDE,
SLAP_CTRL_GLOBAL|SLAP_CTRL_INTROGATE|SLAP_CTRL_HIDE,
NULL, NULL,
parseDontUseCopy, LDAP_SLIST_ENTRY_INITIALIZER(next) },
#endif
......@@ -864,7 +864,7 @@ static int parseDontUseCopy (
return LDAP_PROTOCOL_ERROR;
}
if ( ctrl->ldctl_iscritical != SLAP_CONTROL_CRITICAL ) {
if ( !ctrl->ldctl_iscritical ) {
rs->sr_text = "dontUseCopy criticality of FALSE not allowed";
return LDAP_PROTOCOL_ERROR;
}
......
......@@ -349,9 +349,28 @@ fe_op_search( Operation *op, SlapReply *rs )
goto return_results;
}
/* actually do the search and send the result(s) */
if ( op->o_bd->be_search ) {
if ( SLAP_SHADOW(op->o_bd) && get_dontUseCopy(op) ) {
/* don't use shadow copy */
BerVarray defref = op->o_bd->be_update_refs
? op->o_bd->be_update_refs : default_referral;
if( defref != NULL ) {
rs->sr_ref = referral_rewrite( defref,
NULL, &op->o_req_dn, op->ors_scope );
if( !rs->sr_ref) rs->sr_ref = defref;
rs->sr_err = LDAP_REFERRAL;
send_ldap_result( op, rs );
if (rs->sr_ref != defref) ber_bvarray_free( rs->sr_ref );
} else {
send_ldap_error( op, rs, LDAP_UNWILLING_TO_PERFORM,
"copy not used; no referral information available" );
}
} else if ( op->o_bd->be_search ) {
if ( limits_check( op, rs ) == 0 ) {
/* actually do the search and send the result(s) */
(op->o_bd->be_search)( op, rs );
}
/* else limits_check() sends error */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment