]> git.sur5r.net Git - openldap/commitdiff
add helper for internal searchs for objectClass=*
authorPierangelo Masarati <ando@openldap.org>
Sat, 15 Sep 2007 17:38:53 +0000 (17:38 +0000)
committerPierangelo Masarati <ando@openldap.org>
Sat, 15 Sep 2007 17:38:53 +0000 (17:38 +0000)
15 files changed:
servers/slapd/acl.c
servers/slapd/back-bdb/search.c
servers/slapd/back-meta/conn.c
servers/slapd/back-sql/delete.c
servers/slapd/compare.c
servers/slapd/filter.c
servers/slapd/init.c
servers/slapd/main.c
servers/slapd/overlays/accesslog.c
servers/slapd/overlays/dynlist.c
servers/slapd/overlays/pcache.c
servers/slapd/overlays/syncprov.c
servers/slapd/proto-slap.h
servers/slapd/slap.h
servers/slapd/syncrepl.c

index 0bc7b0f2688a1f7ffafb149fb56f258698557839..8e9057ec680025b2848fa1923ada2da3d23513f8 100644 (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 ) ) {
index 5f0f583c693a6268d054c150001ee4993786b84d..17c1a84a2ec0f54462834a367827087925302b56 100644 (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)
index e5d84842f853eefa03de77d4ddc6e12d46ae40fc..ed7ff743cce025b8207055c7fa3954523a7edc22 100644 (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;
index c04acb0a8df522ec5ff98486bea581d66d06c37e..15dd62a28abe2afbd40a8ef03fe4bcce63f30cb9 100644 (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;
 
index 900f585fa4a8d2031f6ac4ed84060cc7b4f4fcba..eaee0c0e9bd3ceecc9f2e2cda2e8f1bd84b6a0a4 100644 (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 );
index d3ceb0b8a8c78d43e9db15c133e6f509daf2d4d4..5eac384b758ee3fba02c63ce3ac4b6b2671c3e12 100644 (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,
index 5666a49b992bbeb4cf802fc0ff2742ddee95fd16..28f30521c6913a6eec4709a5538f39a5f9461421 100644 (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,
index 8c890e506de3f189891d61ee6c0b00c03c76842e..86b61dd0e254df0555173c3e5f3174fc77ba3e16 100644 (file)
@@ -984,6 +984,8 @@ stop:
 
        controls_destroy();
 
+       filter_destroy();
+
        schema_destroy();
 
        lutil_passwd_destroy();
index 983395a8aaa7501ab14ef5be398ef2f83988bd3a..b034d061cb7ce3ceb5766f5811031b9fe3beb9d4 100644 (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];
index 331d8691fdc81ead686100ee36f01f8cbf553317..b0468812cc32ab06795c1b05eddacc0becb8c2e5 100644 (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 );
index 0e9b80df3025f0b5aa4b7c02778c19321000c4ea..b6057d7aaaf62020030f3d78a78705a4d2b9e63f 100644 (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 );
index a817700622eedc180dfc723b2a0a089660e3000e..bbdbf30085b373932baa4986e91d4534f44b262b 100644 (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;
index e3fae5ded0462e31926b9080827a54058f1be69b..ec130c416012d2c7e864ee791f063ff2b932d42e 100644 (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
  */
index 75aa25d1a92b32aa292b047133e3796b19988f88..b04ccd3f7a52a8b7690503505767c0e72c432b4e 100644 (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;
index d41caa5200d05a524f454ea1d9e47f5e63466889..af6de8893d89d25a0432a6441ae9ad73d1ebf042 100644 (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;