]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/pcache.c
partial fix to ITS#3659; still problems in merging values with "permissive" set
[openldap] / servers / slapd / overlays / pcache.c
index 150dca2ad91a9ff186d78f41a5670e69d51f6299..88268f141e02002b0da37f9d313015270e11ed88 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2003-2004 The OpenLDAP Foundation.
+ * Copyright 2003-2005 The OpenLDAP Foundation.
  * Portions Copyright 2003 IBM Corporation.
  * Portions Copyright 2003 Symas Corporation.
  * All rights reserved.
@@ -789,7 +789,11 @@ remove_query_data (
 {
        struct query_info       *qi, *qnext;
        char                    filter_str[64];
-       AttributeAssertion      ava;
+#ifdef LDAP_COMP_MATCH
+       AttributeAssertion      ava = { NULL, BER_BVNULL, NULL };
+#else
+       AttributeAssertion      ava = { NULL, BER_BVNULL };
+#endif
        Filter                  filter = {LDAP_FILTER_EQUALITY};
        SlapReply               sreply = {REP_RESULT};
        slap_callback cb = { NULL, remove_func, NULL, NULL };
@@ -1123,12 +1127,12 @@ proxy_cache_response(
                         * wake it back up
                         */
                        if ( cm->cc_paused ) {
-                               ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
+                               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                                if ( cm->cc_paused ) {
                                        cm->cc_paused = 0;
-                                       ldap_pvt_runqueue_resched( &syncrepl_rq, cm->cc_arg, 0 );
+                                       ldap_pvt_runqueue_resched( &slapd_rq, cm->cc_arg, 0 );
                                }
-                               ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+                               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
                        }
                }
 
@@ -1466,15 +1470,15 @@ consistency_check(
                }
                ldap_pvt_thread_mutex_unlock(&cm->remove_mutex);
        }
-       ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
-       if ( ldap_pvt_runqueue_isrunning( &syncrepl_rq, rtask )) {
-               ldap_pvt_runqueue_stoptask( &syncrepl_rq, rtask );
+       ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
+       if ( ldap_pvt_runqueue_isrunning( &slapd_rq, rtask )) {
+               ldap_pvt_runqueue_stoptask( &slapd_rq, rtask );
        }
        /* If there were no queries, defer processing for a while */
        cm->cc_paused = pause;
-       ldap_pvt_runqueue_resched( &syncrepl_rq, rtask, pause );
+       ldap_pvt_runqueue_resched( &slapd_rq, rtask, pause );
 
-       ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+       ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
        return NULL;
 }
 
@@ -1499,18 +1503,19 @@ proxy_cache_config(
        AttributeName*  attr_name;
        AttributeName*  attrarray;
        const char*     text=NULL;
-       char            *save_argv0 = NULL;
+       char            *argv0 = NULL;
 
        int             index, i;
        int             num;
        int             rc = 0;
 
        if ( strncasecmp( argv[0], "proxycache-", STRLENOF( "proxycache-" ) ) == 0 ) {
-               save_argv0 = argv[0];
-               argv[0] += STRLENOF( "proxycache-" );
+               argv0 = argv[0] + STRLENOF( "proxycache-" );
+       } else {
+               argv0 = argv[0];
        }
 
-       if ( strcasecmp( argv[0], "proxycache" ) == 0 ) {
+       if ( strcasecmp( argv0, "proxycache" ) == 0 ) {
                if ( argc < 6 ) {
                        fprintf( stderr, "%s: line %d: missing arguments in \"proxycache"
                                " <backend> <max_entries> <numattrsets> <entry limit> "
@@ -1549,7 +1554,7 @@ proxy_cache_config(
                        qm->attr_sets[i].attrs = NULL;
                }
 
-       } else if ( strcasecmp( argv[0], "proxyattrset" ) == 0 ) {
+       } else if ( strcasecmp( argv0, "proxyattrset" ) == 0 ) {
                if ( argc < 3 ) {
                        fprintf( stderr, "%s: line %d: missing arguments in \"proxyattrset "
                                "<index> <attributes>\"\n", fname, lineno );
@@ -1581,7 +1586,7 @@ proxy_cache_config(
                                attr_name->an_name.bv_len = 0;
                        }
                }
-       } else if ( strcasecmp( argv[0], "proxytemplate" ) == 0 ) {
+       } else if ( strcasecmp( argv0, "proxytemplate" ) == 0 ) {
                if ( argc != 4 ) {
                        fprintf( stderr, "%s: line %d: missing argument(s) in "
                                "\"proxytemplate <filter> <proj attr set> <TTL>\" line\n",
@@ -1625,7 +1630,7 @@ proxy_cache_config(
                temp->querystr.bv_val = NULL;
                cm->numtemplates++;
 
-       } else if ( strcasecmp( argv[0], "response-callback" ) == 0 ) {
+       } else if ( strcasecmp( argv0, "response-callback" ) == 0 ) {
                /* set to "tail" to put the response callback
                 * at the end of the callback list; this is required
                 * in case other overlays are present, so that the
@@ -1656,10 +1661,6 @@ proxy_cache_config(
                rc = cm->db.bd_info->bi_db_config( &cm->db, fname, lineno, argc, argv );
        }
 
-       if ( save_argv0 ) {
-               argv[0] = save_argv0;
-       }
-
        return rc;
 }
 
@@ -1738,10 +1739,10 @@ proxy_cache_open(
 
        /* There is no runqueue in TOOL mode */
        if ( slapMode & SLAP_SERVER_MODE ) {
-               ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
-               ldap_pvt_runqueue_insert( &syncrepl_rq, cm->cc_period,
+               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
+               ldap_pvt_runqueue_insert( &slapd_rq, cm->cc_period,
                        consistency_check, on );
-               ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
 
                /* Cached database must have the rootdn */
                if ( BER_BVISNULL( &cm->db.be_rootndn )
@@ -1925,7 +1926,7 @@ int pcache_init()
                        ldap_scherr2str(code), err );
                return code;
        }
-       code = at_add( at, &err );
+       code = at_add( at, 0, NULL, &err );
        if ( !code ) {
                slap_str2ad( at->at_names[0], &ad_queryid, &err );
        }