add helper for internal searchs for objectClass=*

This commit is contained in:
Pierangelo Masarati 2007-09-15 17:38:53 +00:00
parent eb51129e29
commit d92e8ad1f7
15 changed files with 70 additions and 82 deletions

View File

@ -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 ) ) {

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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 );

View File

@ -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,

View File

@ -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,

View File

@ -984,6 +984,8 @@ stop:
controls_destroy();
filter_destroy();
schema_destroy();
lutil_passwd_destroy();

View File

@ -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];

View File

@ -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 );

View File

@ -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 );

View File

@ -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;

View File

@ -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
*/

View File

@ -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;

View File

@ -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;