mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-24 13:24:56 +08:00
add helper for internal searchs for objectClass=*
This commit is contained in:
parent
eb51129e29
commit
d92e8ad1f7
@ -2073,7 +2073,6 @@ acl_set_gather( SetCookie *cookie, struct berval *name, AttributeDescription *de
|
||||
slap_callback cb = { NULL, acl_set_cb_gather, NULL, NULL };
|
||||
acl_set_gather_t p = { 0 };
|
||||
const char *text = NULL;
|
||||
static struct berval defaultFilter_bv = BER_BVC( "(objectClass=*)" );
|
||||
|
||||
/* this routine needs to return the bervals instead of
|
||||
* plain strings, since syntax is not known. It should
|
||||
@ -2116,16 +2115,17 @@ acl_set_gather( SetCookie *cookie, struct berval *name, AttributeDescription *de
|
||||
if ( ludp->lud_filter ) {
|
||||
ber_str2bv_x( ludp->lud_filter, 0, 0, &op2.ors_filterstr,
|
||||
cp->asc_op->o_tmpmemctx );
|
||||
op2.ors_filter = str2filter_x( cp->asc_op, op2.ors_filterstr.bv_val );
|
||||
if ( op2.ors_filter == NULL ) {
|
||||
rc = LDAP_PROTOCOL_ERROR;
|
||||
goto url_done;
|
||||
}
|
||||
|
||||
} else {
|
||||
op2.ors_filterstr = defaultFilter_bv;
|
||||
op2.ors_filterstr = *slap_filterstr_objectClass_pres;
|
||||
op2.ors_filter = slap_filter_objectClass_pres;
|
||||
}
|
||||
|
||||
op2.ors_filter = str2filter_x( cp->asc_op, op2.ors_filterstr.bv_val );
|
||||
if ( op2.ors_filter == NULL ) {
|
||||
rc = LDAP_PROTOCOL_ERROR;
|
||||
goto url_done;
|
||||
}
|
||||
|
||||
/* Grab the scope */
|
||||
op2.ors_scope = ludp->lud_scope;
|
||||
@ -2181,7 +2181,7 @@ acl_set_gather( SetCookie *cookie, struct berval *name, AttributeDescription *de
|
||||
}
|
||||
|
||||
url_done:;
|
||||
if ( op2.ors_filter ) {
|
||||
if ( op2.ors_filter && op2.ors_filter != slap_filter_objectClass_pres ) {
|
||||
filter_free_x( cp->asc_op, op2.ors_filter );
|
||||
}
|
||||
if ( !BER_BVISNULL( &op2.o_req_ndn ) ) {
|
||||
|
@ -154,11 +154,7 @@ static int search_aliases(
|
||||
Entry *matched, *a;
|
||||
EntryInfo *ei;
|
||||
struct berval bv_alias = BER_BVC( "alias" );
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion aa_alias = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion aa_alias = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion aa_alias = ATTRIBUTEASSERTION_INIT;
|
||||
Filter af;
|
||||
DB_LOCK locka, lockr;
|
||||
int first = 1;
|
||||
@ -1028,17 +1024,9 @@ static int search_candidates(
|
||||
int rc, depth = 1;
|
||||
Filter f, rf, xf, nf;
|
||||
ID *stack;
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion aa_ref = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion aa_ref = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion aa_ref = ATTRIBUTEASSERTION_INIT;
|
||||
Filter sf;
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion aa_subentry = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion aa_subentry = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion aa_subentry = ATTRIBUTEASSERTION_INIT;
|
||||
|
||||
/*
|
||||
* This routine takes as input a filter (user-filter)
|
||||
|
@ -849,7 +849,6 @@ meta_back_get_candidate(
|
||||
rs->sr_text = "No suitable candidate target found";
|
||||
|
||||
} else if ( candidate == META_TARGET_MULTIPLE ) {
|
||||
Filter f = { 0 };
|
||||
Operation op2 = *op;
|
||||
SlapReply rs2 = { 0 };
|
||||
slap_callback cb2 = { 0 };
|
||||
@ -868,10 +867,8 @@ meta_back_get_candidate(
|
||||
op2.ors_slimit = 1;
|
||||
op2.ors_tlimit = SLAP_NO_LIMIT;
|
||||
|
||||
f.f_choice = LDAP_FILTER_PRESENT;
|
||||
f.f_desc = slap_schema.si_ad_objectClass;
|
||||
op2.ors_filter = &f;
|
||||
BER_BVSTR( &op2.ors_filterstr, "(objectClass=*)" );
|
||||
op2.ors_filter = slap_filter_objectClass_pres;
|
||||
op2.ors_filterstr = *slap_filterstr_objectClass_pres;
|
||||
|
||||
op2.o_callback = &cb2;
|
||||
cb2.sc_response = meta_back_conn_cb;
|
||||
|
@ -336,7 +336,6 @@ backsql_tree_delete(
|
||||
Operation op2 = *op;
|
||||
slap_callback sc = { 0 };
|
||||
SlapReply rs2 = { 0 };
|
||||
Filter f = { 0 };
|
||||
backsql_tree_delete_t btd = { 0 };
|
||||
|
||||
int rc;
|
||||
@ -368,10 +367,8 @@ backsql_tree_delete(
|
||||
op2.ors_deref = LDAP_DEREF_NEVER;
|
||||
op2.ors_slimit = SLAP_NO_LIMIT;
|
||||
op2.ors_tlimit = SLAP_NO_LIMIT;
|
||||
op2.ors_filter = &f;
|
||||
f.f_choice = LDAP_FILTER_PRESENT;
|
||||
f.f_desc = slap_schema.si_ad_objectClass;
|
||||
BER_BVSTR( &op2.ors_filterstr, "(objectClass=*)" );
|
||||
op2.ors_filter = slap_filter_objectClass_pres;
|
||||
op2.ors_filterstr = *slap_filterstr_objectClass_pres;
|
||||
op2.ors_attrs = slap_anlist_all_attributes;
|
||||
op2.ors_attrsonly = 0;
|
||||
|
||||
|
@ -44,7 +44,7 @@ do_compare(
|
||||
struct berval dn = BER_BVNULL;
|
||||
struct berval desc = BER_BVNULL;
|
||||
struct berval value = BER_BVNULL;
|
||||
AttributeAssertion ava = { 0 };
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
|
||||
Debug( LDAP_DEBUG_TRACE, "%s do_compare\n",
|
||||
op->o_log_prefix, 0, 0 );
|
||||
|
@ -33,6 +33,9 @@
|
||||
|
||||
#include "slap.h"
|
||||
|
||||
const Filter *slap_filter_objectClass_pres;
|
||||
const struct berval *slap_filterstr_objectClass_pres;
|
||||
|
||||
static int get_filter_list(
|
||||
Operation *op,
|
||||
BerElement *ber,
|
||||
@ -56,6 +59,26 @@ static int get_simple_vrFilter(
|
||||
ValuesReturnFilter **f,
|
||||
const char **text );
|
||||
|
||||
int
|
||||
filter_init( void )
|
||||
{
|
||||
static Filter filter_objectClass_pres = { LDAP_FILTER_PRESENT };
|
||||
static struct berval filterstr_objectClass_pres = BER_BVC("(objectClass=*)");
|
||||
|
||||
filter_objectClass_pres.f_desc = slap_schema.si_ad_objectClass;
|
||||
|
||||
slap_filter_objectClass_pres = &filter_objectClass_pres;
|
||||
slap_filterstr_objectClass_pres = &filterstr_objectClass_pres;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
filter_destroy( void )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int
|
||||
get_filter(
|
||||
Operation *op,
|
||||
|
@ -112,6 +112,14 @@ slap_init( int mode, const char *name )
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( filter_init() != 0 ) {
|
||||
slap_debug |= LDAP_DEBUG_NONE;
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
"%s: filter_init failed\n",
|
||||
name, 0, 0 );
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( entry_init() != 0 ) {
|
||||
slap_debug |= LDAP_DEBUG_NONE;
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
|
@ -984,6 +984,8 @@ stop:
|
||||
|
||||
controls_destroy();
|
||||
|
||||
filter_destroy();
|
||||
|
||||
schema_destroy();
|
||||
|
||||
lutil_passwd_destroy();
|
||||
|
@ -596,7 +596,7 @@ accesslog_purge( void *ctx, void *arg )
|
||||
SlapReply rs = {REP_RESULT};
|
||||
slap_callback cb = { NULL, log_old_lookup, NULL, NULL };
|
||||
Filter f;
|
||||
AttributeAssertion ava = {0};
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
purge_data pd = {0};
|
||||
char timebuf[LDAP_LUTIL_GENTIME_BUFSIZE];
|
||||
char csnbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
|
||||
|
@ -683,12 +683,8 @@ done:;
|
||||
goto release;
|
||||
}
|
||||
|
||||
BER_BVSTR( &o.ors_filterstr, "(objectClass=*)" );
|
||||
o.ors_filter = str2filter_x( op, o.ors_filterstr.bv_val );
|
||||
if ( o.ors_filter == NULL ) {
|
||||
/* FIXME: error? */
|
||||
goto release;
|
||||
}
|
||||
o.ors_filterstr = *slap_filterstr_objectClass_pres;
|
||||
o.ors_filter = slap_filter_objectClass_pres;
|
||||
|
||||
o.ors_scope = LDAP_SCOPE_BASE;
|
||||
o.ors_deref = LDAP_DEREF_NEVER;
|
||||
@ -701,7 +697,6 @@ done:;
|
||||
o.o_acl_priv = ACL_COMPARE;
|
||||
|
||||
rc = o.o_bd->be_search( &o, &r );
|
||||
filter_free_x( &o, o.ors_filter );
|
||||
|
||||
if ( o.o_dn.bv_val != op->o_dn.bv_val ) {
|
||||
slap_op_groups_free( &o );
|
||||
|
@ -1380,11 +1380,7 @@ remove_query_data(
|
||||
{
|
||||
struct query_info *qi, *qnext;
|
||||
char filter_str[ LDAP_LUTIL_UUIDSTR_BUFSIZE + STRLENOF( "(queryId=)" ) ];
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
Filter filter = {LDAP_FILTER_EQUALITY};
|
||||
SlapReply sreply = {REP_RESULT};
|
||||
slap_callback cb = { NULL, remove_func, NULL, NULL };
|
||||
@ -1665,11 +1661,7 @@ pcache_remove_entries_from_cache(
|
||||
SlapReply rs = { REP_RESULT };
|
||||
Filter f = { 0 };
|
||||
char filtbuf[ LDAP_LUTIL_UUIDSTR_BUFSIZE + STRLENOF( "(entryUUID=)" ) ];
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
AttributeName attrs[ 2 ] = { 0 };
|
||||
int s, rc;
|
||||
|
||||
@ -1784,11 +1776,7 @@ pcache_remove_entry_queries_from_cache(
|
||||
SlapReply rs = { REP_RESULT };
|
||||
Filter f = { 0 };
|
||||
char filter_str[ LDAP_LUTIL_UUIDSTR_BUFSIZE + STRLENOF( "(queryId=)" ) ];
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
AttributeName attrs[ 2 ] = { 0 };
|
||||
int rc;
|
||||
|
||||
@ -3192,11 +3180,7 @@ pcache_db_open(
|
||||
SlapReply rs = { 0 };
|
||||
BerVarray vals = NULL;
|
||||
Filter f = { 0 }, f2 = { 0 };
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
AttributeName attrs[ 2 ] = { 0 };
|
||||
|
||||
connection_fake_init( &conn, &opbuf, thrctx );
|
||||
|
@ -585,11 +585,7 @@ syncprov_findcsn( Operation *op, find_csn_t mode )
|
||||
char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
|
||||
struct berval maxcsn;
|
||||
Filter cf;
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion eq = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion eq = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion eq = ATTRIBUTEASSERTION_INIT;
|
||||
fpres_cookie pcookie;
|
||||
sync_control *srs = NULL;
|
||||
struct slap_limits_set fc_limits;
|
||||
@ -1483,11 +1479,7 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
|
||||
SlapReply frs = { REP_RESULT };
|
||||
int rc;
|
||||
Filter mf, af;
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion eq = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion eq;
|
||||
#endif
|
||||
AttributeAssertion eq = ATTRIBUTEASSERTION_INIT;
|
||||
slap_callback cb = {0};
|
||||
|
||||
fop = *op;
|
||||
|
@ -1016,6 +1016,11 @@ LDAP_SLAPD_F (int) filter_has_subordinates LDAP_P(( Filter *filter ));
|
||||
#define filter_escape_value( in, out ) ldap_bv2escaped_filter_value_x( (in), (out), 0, NULL )
|
||||
#define filter_escape_value_x( in, out, ctx ) ldap_bv2escaped_filter_value_x( (in), (out), 0, ctx )
|
||||
|
||||
LDAP_SLAPD_V (const Filter *) slap_filter_objectClass_pres;
|
||||
LDAP_SLAPD_V (const struct berval *) slap_filterstr_objectClass_pres;
|
||||
|
||||
LDAP_SLAPD_F (int) filter_init LDAP_P(( void ));
|
||||
LDAP_SLAPD_F (void) filter_destroy LDAP_P(( void ));
|
||||
/*
|
||||
* filterentry.c
|
||||
*/
|
||||
|
@ -979,6 +979,11 @@ struct AttributeAssertion {
|
||||
ComponentFilter *aa_cf; /* for attribute aliasing */
|
||||
#endif
|
||||
};
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
#define ATTRIBUTEASSERTION_INIT { NULL, BER_BVNULL, NULL }
|
||||
#else
|
||||
#define ATTRIBUTEASSERTION_INIT { NULL, BER_BVNULL }
|
||||
#endif
|
||||
|
||||
struct SubstringsAssertion {
|
||||
AttributeDescription *sa_desc;
|
||||
|
@ -1840,11 +1840,7 @@ syncrepl_entry(
|
||||
SlapReply rs_add = {REP_RESULT};
|
||||
SlapReply rs_modify = {REP_RESULT};
|
||||
Filter f = {0};
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion ava = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion ava = ATTRIBUTEASSERTION_INIT;
|
||||
int rc = LDAP_SUCCESS;
|
||||
|
||||
struct berval pdn = BER_BVNULL;
|
||||
@ -2264,11 +2260,7 @@ syncrepl_del_nonpresent(
|
||||
|
||||
if ( uuids ) {
|
||||
Filter uf;
|
||||
#ifdef LDAP_COMP_MATCH
|
||||
AttributeAssertion eq = { NULL, BER_BVNULL, NULL };
|
||||
#else
|
||||
AttributeAssertion eq = { NULL, BER_BVNULL };
|
||||
#endif
|
||||
AttributeAssertion eq = ATTRIBUTEASSERTION_INIT;
|
||||
int i;
|
||||
|
||||
op->ors_attrsonly = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user