mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
Implemented slapi_filter_apply() API
This commit is contained in:
parent
6f40a3fc6a
commit
a0da326c97
2 changed files with 48 additions and 0 deletions
|
|
@ -187,6 +187,7 @@ int slapi_filter_get_subfilt( Slapi_Filter *f, char **type, char **initial,
|
|||
Slapi_Filter *slapi_filter_join( int ftype, Slapi_Filter *f1, Slapi_Filter *f2);
|
||||
int slapi_filter_test( Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Filter *f,
|
||||
int verify_access );
|
||||
int slapi_filter_apply( Slapi_Filter *f, FILTER_APPLY_FN fn, void *arg, int *error_code );
|
||||
int slapi_filter_test_simple( Slapi_Entry *e, Slapi_Filter *f);
|
||||
void slapi_free_search_results_internal(Slapi_PBlock *pb);
|
||||
int slapi_is_connection_ssl(Slapi_PBlock *pPB, int *isSSL);
|
||||
|
|
|
|||
|
|
@ -1641,6 +1641,53 @@ slapi_filter_test_simple( Slapi_Entry *e, Slapi_Filter *f)
|
|||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
slapi_filter_apply( Slapi_Filter *f, FILTER_APPLY_FN fn, void *arg, int *error_code )
|
||||
{
|
||||
#ifdef LDAP_SLAPI
|
||||
switch ( f->f_choice ) {
|
||||
case LDAP_FILTER_AND:
|
||||
case LDAP_FILTER_NOT:
|
||||
case LDAP_FILTER_OR: {
|
||||
int rc;
|
||||
Filter *f;
|
||||
|
||||
for ( f = f->f_list; f != NULL; f = f->f_next ) {
|
||||
rc = slapi_filter_apply( f, fn, arg, error_code );
|
||||
if ( rc != 0 ) {
|
||||
return rc;
|
||||
}
|
||||
if ( *error_code == SLAPI_FILTER_SCAN_NOMORE ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LDAP_FILTER_EQUALITY:
|
||||
case LDAP_FILTER_SUBSTRINGS:
|
||||
case LDAP_FILTER_GE:
|
||||
case LDAP_FILTER_LE:
|
||||
case LDAP_FILTER_PRESENT:
|
||||
case LDAP_FILTER_APPROX:
|
||||
case LDAP_FILTER_EXT:
|
||||
*error_code = fn( f, arg );
|
||||
break;
|
||||
default:
|
||||
*error_code = SLAPI_FILTER_UNKNOWN_FILTER_TYPE;
|
||||
}
|
||||
|
||||
if ( *error_code == SLAPI_FILTER_SCAN_NOMORE ||
|
||||
*error_code == SLAPI_FILTER_SCAN_CONTINUE ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
#else
|
||||
*error_code = SLAPI_FILTER_UNKNOWN_FILTER_TYPE;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
slapi_send_ldap_extended_response(
|
||||
Connection *conn,
|
||||
|
|
|
|||
Loading…
Reference in a new issue