parsePostRead, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_VALUESRETURNFILTER,
(int)offsetof(struct slap_control_ids, sc_valuesReturnFilter),
- SLAP_CTRL_SEARCH, NULL,
+ SLAP_CTRL_GLOBAL|SLAP_CTRL_SEARCH, NULL,
parseValuesReturnFilter, LDAP_SLIST_ENTRY_INITIALIZER(next) },
{ LDAP_CONTROL_PAGEDRESULTS,
(int)offsetof(struct slap_control_ids, sc_pagedResults),
}
int
-slap_global_control( Operation *op, const char *oid )
+slap_global_control( Operation *op, const char *oid, int *cid )
{
struct slap_control *ctrl = find_ctrl( oid );
Debug( LDAP_DEBUG_ANY,
"slap_global_control: unrecognized control: %s\n",
oid, 0, 0 );
- assert( 0 );
- return 0;
+ return LDAP_CONTROL_NOT_FOUND;
}
- if ( ctrl->sc_mask & SLAP_CTRL_GLOBAL ) return 1;
+ if ( cid ) *cid = ctrl->sc_cid;
- if (( op->o_tag & LDAP_REQ_SEARCH ) &&
- ( ctrl->sc_mask & SLAP_CTRL_GLOBAL_SEARCH ))
+ if ( ( ctrl->sc_mask & SLAP_CTRL_GLOBAL ) ||
+ ( ( op->o_tag & LDAP_REQ_SEARCH ) &&
+ ( ctrl->sc_mask & SLAP_CTRL_GLOBAL_SEARCH ) ) )
{
- return 1;
+ return LDAP_COMPARE_TRUE;
}
- Debug( LDAP_DEBUG_ANY,
+ Debug( LDAP_DEBUG_TRACE,
"slap_global_control: unavailable control: %s\n",
oid, 0, 0 );
- return 0;
+
+ return LDAP_COMPARE_FALSE;
}
void slap_free_ctrls(
goto return_results;
}
-#ifdef SLAP_CONTROL_AVAILABILITY_KLUDGE
- /* backend_check_controls() kludge */
- if ( sc->sc_mask & SLAP_CTRL_GLOBAL ) {
- /* KLUDGE: disable backend_control() check */
- c->ldctl_iscritical = 0;
-
- } else if ( tagmask == SLAP_CTRL_SEARCH &&
- sc->sc_mask & SLAP_CTRL_GLOBAL_SEARCH )
- {
- /* KLUDGE: disable backend_control() check */
- c->ldctl_iscritical = 0;
-
- } else {
- /* KLUDGE: enable backend_control() check */
- c->ldctl_iscritical = 1;
- }
-#endif
-
} else if( c->ldctl_iscritical ) {
/* unavailable CRITICAL control */
rs->sr_err = LDAP_UNAVAILABLE_CRITICAL_EXTENSION;
/* FIXME: should use BER library */
if( ( ctrl->ldctl_value.bv_len != 3 )
- && ( ctrl->ldctl_value.bv_val[0] != 0x01 )
- && ( ctrl->ldctl_value.bv_val[1] != 0x01 ))
+ || ( ctrl->ldctl_value.bv_val[0] != 0x01 )
+ || ( ctrl->ldctl_value.bv_val[1] != 0x01 ))
{
rs->sr_text = "subentries control value encoding is bogus";
return LDAP_PROTOCOL_ERROR;
? SLAP_CONTROL_CRITICAL
: SLAP_CONTROL_NONCRITICAL;
- if ( (void *)(ctrl->ldctl_value.bv_val[2] != 0x00))
+ if ( (void *)(ctrl->ldctl_value.bv_val[2] != 0x00)) {
set_subentries_visibility( op );
+ }
return LDAP_SUCCESS;
}