]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/distproc.c
allow proxies to filter out search references (ITS#5593)
[openldap] / servers / slapd / back-ldap / distproc.c
index 5710a2198bf4b4550724c5e5327a2ac6188c3e7f..93411682436580258e8e3047575041e96fcd70bf 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2005-2006 The OpenLDAP Foundation.
+ * Copyright 2005-2008 The OpenLDAP Foundation.
  * Portions Copyright 2003 Howard Chu.
  * All rights reserved.
  *
 
 #include "portable.h"
 
-#ifdef LDAP_DEVEL
-
 #include <stdio.h>
 
 #include <ac/string.h>
 #include <ac/socket.h>
 
 #include "slap.h"
+
+#ifdef SLAP_DISTPROC
+
 #include "back-ldap.h"
 
 #include "config.h"
@@ -236,7 +237,7 @@ static int ldap_distproc_db_init_common( BackendDB  *be );
 static int ldap_distproc_db_init_one( BackendDB *be );
 #define        ldap_distproc_db_open_one(be)           (lback)->bi_db_open( (be) )
 #define        ldap_distproc_db_close_one(be)          (0)
-#define        ldap_distproc_db_destroy_one(be)        (lback)->bi_db_destroy( (be) )
+#define        ldap_distproc_db_destroy_one(be, ca)    (lback)->bi_db_destroy( (be), (ca) )
 
 static int
 ldap_distproc_parse_ctrl(
@@ -297,7 +298,7 @@ ldap_distproc_operational( Operation *op, SlapReply *rs )
         * database.  This fix is likely to intercept also entries
         * generated by back-perl and so. */
        if ( rs->sr_entry->e_private == NULL ) {
-               return 0;
+               return LDAP_SUCCESS;
        }
 
        return SLAP_CB_CONTINUE;
@@ -336,9 +337,10 @@ static ConfigTable distproc_cfg[] = {
                        "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
        { "distproc-cache-uri", "TRUE/FALSE",
                2, 2, 0, ARG_MAGIC|ARG_ON_OFF|DP_CACHE_URI, distproc_cfgen,
-               "( OLcfgOvAt:3.2 NAME 'olcCacheURI' "
+               "( OLcfgOvAt:3.2 NAME 'olcChainCacheURI' "
                        "DESC 'Enables caching of URIs not present in configuration' "
-                       "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
+                       "SYNTAX OMsBoolean "
+                       "SINGLE-VALUE )", NULL, NULL },
        { NULL, NULL, 0, 0, 0, ARG_IGNORED }
 };
 
@@ -349,7 +351,7 @@ static ConfigOCs distproc_ocs[] = {
                "SUP olcOverlayConfig "
                "MAY ( "
                        "olcChainingBehavior $ "
-                       "olcCacheURI "
+                       "olcChainCacheURI "
                        ") )",
                Cft_Overlay, distproc_cfg, NULL, distproc_cfadd },
        { "( OLcfgOvOc:7.2 "
@@ -445,7 +447,7 @@ distproc_ldadd( CfEntryInfo *p, Entry *e, ConfigArgs *ca )
 
 done:;
        if ( rc != LDAP_SUCCESS ) {
-               (void)ldap_distproc_db_destroy_one( ca->be );
+               (void)ldap_distproc_db_destroy_one( ca->be, NULL );
                ch_free( ca->be );
                ca->be = NULL;
        }
@@ -470,9 +472,9 @@ ldap_distproc_cfadd_apply( void *datum, void *arg )
        struct berval                   bv;
 
        /* FIXME: should not hardcode "olcDatabase" here */
-       bv.bv_len = snprintf( lca->ca->msg, sizeof( lca->ca->msg ),
+       bv.bv_len = snprintf( lca->ca->cr_msg, sizeof( lca->ca->cr_msg ),
                "olcDatabase={%d}%s", lca->count, lback->bi_type );
-       bv.bv_val = lca->ca->msg;
+       bv.bv_val = lca->ca->cr_msg;
 
        lca->ca->be->be_private = (void *)li;
        config_build_entry( lca->op, lca->rs, lca->p->e_private, lca->ca,
@@ -565,7 +567,8 @@ distproc_cfgen( ConfigArgs *c )
 
 static int
 ldap_distproc_db_init(
-       BackendDB *be )
+       BackendDB *be,
+       ConfigReply *cr )
 {
        slap_overinst   *on = (slap_overinst *)be->bd_info;
        ldap_distproc_t *lc = NULL;
@@ -657,7 +660,7 @@ private_destroy:;
 
                                db.bd_info = lback;
                                db.be_private = (void *)lc->lc_cfg_li;
-                               ldap_distproc_db_destroy_one( &db );
+                               ldap_distproc_db_destroy_one( &db, NULL );
                                lc->lc_cfg_li = NULL;
 
                        } else {
@@ -710,7 +713,7 @@ ldap_distproc_db_apply( void *datum, void *arg )
 
        lca->be->be_private = (void *)li;
 
-       return lca->func( lca->be );
+       return lca->func( lca->be, NULL );
 }
 
 static int
@@ -733,7 +736,7 @@ ldap_distproc_db_func(
                        db.bd_info = lback;
                        db.be_private = lc->lc_common_li;
 
-                       rc = func( &db );
+                       rc = func( &db, NULL );
 
                        if ( rc != 0 ) {
                                return rc;
@@ -757,21 +760,24 @@ ldap_distproc_db_func(
 
 static int
 ldap_distproc_db_open(
-       BackendDB       *be )
+       BackendDB       *be,
+       ConfigReply     *cr )
 {
        return ldap_distproc_db_func( be, db_open );
 }
 
 static int
 ldap_distproc_db_close(
-       BackendDB       *be )
+       BackendDB       *be,
+       ConfigReply     *cr )
 {
        return ldap_distproc_db_func( be, db_close );
 }
 
 static int
 ldap_distproc_db_destroy(
-       BackendDB       *be )
+       BackendDB       *be,
+       ConfigReply     *cr )
 {
        slap_overinst   *on = (slap_overinst *) be->bd_info;
        ldap_distproc_t *lc = (ldap_distproc_t *)on->on_bi.bi_private;
@@ -802,7 +808,7 @@ ldap_distproc_db_init_common(
 
        be->bd_info = lback;
        be->be_private = NULL;
-       t = lback->bi_db_init( be );
+       t = lback->bi_db_init( be, NULL );
        if ( t != 0 ) {
                return t;
        }
@@ -829,11 +835,11 @@ ldap_distproc_db_init_one(
        BackendInfo     *bi = be->bd_info;
        ldapinfo_t      *li;
 
-       int             t;
+       slap_op_t       t;
 
        be->bd_info = lback;
        be->be_private = NULL;
-       t = lback->bi_db_init( be );
+       t = lback->bi_db_init( be, NULL );
        if ( t != 0 ) {
                return t;
        }
@@ -843,7 +849,7 @@ ldap_distproc_db_init_one(
        li->li_nretries = lc->lc_common_li->li_nretries;
        li->li_flags = lc->lc_common_li->li_flags;
        li->li_version = lc->lc_common_li->li_version;
-       for ( t = 0; t < LDAP_BACK_OP_LAST; t++ ) {
+       for ( t = 0; t < SLAP_OP_LAST; t++ ) {
                li->li_timeout[ t ] = lc->lc_common_li->li_timeout[ t ];
        }
        be->bd_info = bi;
@@ -956,6 +962,7 @@ distproc_initialize( void )
                return rc;
        }
 
+#ifdef LDAP_DEVEL
        rc = supported_feature_load( &slap_FEATURE_CANCHAINOPS );
        if ( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY, "slapd-distproc: "
@@ -963,6 +970,7 @@ distproc_initialize( void )
                        rc, 0, 0 );
                return rc;
        }
+#endif
 
        rc = register_supported_control( LDAP_CONTROL_X_RETURNCONTREF,
                        SLAP_CTRL_GLOBAL|SLAP_CTRL_ACCESS|SLAP_CTRL_HIDE, NULL,
@@ -1006,4 +1014,4 @@ distproc_initialize( void )
        return overlay_register( &distproc );
 }
 
-#endif /* LDAP_DEVEL */
+#endif /* SLAP_DISTPROC */