]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/config.c
Don't set bi_db_config since we have no config options
[openldap] / servers / slapd / back-meta / config.c
index 3cebec281c0b99e6bf09046da4ebf82cd748306b..fecc0a4e89c283163785bda7527ff9d485017092 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2007 The OpenLDAP Foundation.
+ * Copyright 1999-2010 The OpenLDAP Foundation.
  * Portions Copyright 2001-2003 Pierangelo Masarati.
  * Portions Copyright 1999-2003 Howard Chu.
  * All rights reserved.
@@ -640,6 +640,10 @@ meta_back_db_config(
                
        /* save bind creds for referral rebinds? */
        } else if ( strcasecmp( argv[ 0 ], "rebind-as-user" ) == 0 ) {
+               unsigned        *flagsp = mi->mi_ntargets ?
+                               &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_flags
+                               : &mi->mi_flags;
+
                if ( argc > 2 ) {
                        Debug( LDAP_DEBUG_ANY,
        "%s: line %d: \"rebind-as-user {NO|yes}\" takes 1 argument.\n",
@@ -651,16 +655,16 @@ meta_back_db_config(
                        Debug( LDAP_DEBUG_ANY,
        "%s: line %d: deprecated use of \"rebind-as-user {FALSE|true}\" with no arguments.\n",
                            fname, lineno, 0 );
-                       mi->mi_flags |= LDAP_BACK_F_SAVECRED;
+                       *flagsp |= LDAP_BACK_F_SAVECRED;
 
                } else {
                        switch ( check_true_false( argv[ 1 ] ) ) {
                        case 0:
-                               mi->mi_flags &= ~LDAP_BACK_F_SAVECRED;
+                               *flagsp &= ~LDAP_BACK_F_SAVECRED;
                                break;
 
                        case 1:
-                               mi->mi_flags |= LDAP_BACK_F_SAVECRED;
+                               *flagsp |= LDAP_BACK_F_SAVECRED;
                                break;
 
                        default:
@@ -802,7 +806,7 @@ meta_back_db_config(
        {
                if ( argc != 2 ) {
                        Debug( LDAP_DEBUG_ANY,
-       "%s: line %d: \"[pseudo]root-bind-defer {FALSE|true}\" takes 1 argument\n",
+       "%s: line %d: \"[pseudo]root-bind-defer {TRUE|false}\" takes 1 argument\n",
                                fname, lineno, 0 );
                        return( 1 );
                }
@@ -818,7 +822,7 @@ meta_back_db_config(
 
                default:
                        Debug( LDAP_DEBUG_ANY,
-       "%s: line %d: \"[pseudo]root-bind-defer {FALSE|true}\": invalid arg \"%s\".\n",
+       "%s: line %d: \"[pseudo]root-bind-defer {TRUE|false}\": invalid arg \"%s\".\n",
                                fname, lineno, argv[ 1 ] );
                        return 1;
                }
@@ -1082,14 +1086,16 @@ idassert-authzFrom      "dn:<rootdn>"
                                return 1;
                        }
 
-                       if ( snprintf( binddn, sizeof( binddn ), "binddn=%s", argv[ 1 ] ) >= sizeof( binddn ) ) {
+                       if ( sizeof( binddn ) <= (unsigned) snprintf( binddn,
+                                       sizeof( binddn ), "binddn=%s", argv[ 1 ] ))
+                       {
                                Debug( LDAP_DEBUG_ANY, "%s: line %d: \"pseudorootdn\" too long.\n",
                                        fname, lineno, 0 );
                                return 1;
                        }
                        cargv[ 2 ] = binddn;
 
-                       rc = slap_idassert_parse_cf( fname, lineno, cargc, cargv, &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_idassert );
+                       rc = mi->mi_ldap_extra->idassert_parse_cf( fname, lineno, cargc, cargv, &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_idassert );
                        if ( rc == 0 ) {
                                struct berval   bv;
 
@@ -1159,7 +1165,7 @@ idassert-authzFrom        "dn:<rootdn>"
                        return 1;
                }
 
-               return slap_idassert_parse_cf( fname, lineno, argc, argv, &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_idassert );
+               return mi->mi_ldap_extra->idassert_parse_cf( fname, lineno, argc, argv, &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_idassert );
 
        /* idassert-authzFrom */
        } else if ( strcasecmp( argv[ 0 ], "idassert-authzFrom" ) == 0 ) {
@@ -1188,7 +1194,7 @@ idassert-authzFrom        "dn:<rootdn>"
                        return 1;
                }
 
-               return slap_idassert_authzfrom_parse_cf( fname, lineno, argv[ 1 ], &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_idassert );
+               return mi->mi_ldap_extra->idassert_authzfrom_parse_cf( fname, lineno, argv[ 1 ], &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_idassert );
 
        /* quarantine */
        } else if ( strcasecmp( argv[ 0 ], "quarantine" ) == 0 ) {
@@ -1232,14 +1238,14 @@ idassert-authzFrom      "dn:<rootdn>"
                        ldap_pvt_thread_mutex_init( &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_quarantine_mutex );
                }
 
-               if ( slap_retry_info_parse( argv[ 1 ], ri, buf, sizeof( buf ) ) ) {
+               if ( mi->mi_ldap_extra->retry_info_parse( argv[ 1 ], ri, buf, sizeof( buf ) ) ) {
                        Debug( LDAP_DEBUG_ANY,
                                "%s line %d: %s.\n",
                                fname, lineno, buf );
                        return 1;
                }
 
-               if ( mi->mi_ntargets ) {
+               if ( mi->mi_ntargets == 0 ) {
                        mi->mi_flags |= LDAP_BACK_F_QUARANTINE;
 
                } else {
@@ -1453,6 +1459,66 @@ idassert-authzFrom       "dn:<rootdn>"
                        return 1;
                }
 
+       /* do not return search references */
+       } else if ( strcasecmp( argv[ 0 ], "norefs" ) == 0 ) {
+               unsigned        *flagsp = mi->mi_ntargets ?
+                               &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_flags
+                               : &mi->mi_flags;
+
+               if ( argc != 2 ) {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"norefs {TRUE|false}\" needs 1 argument.\n",
+                               fname, lineno, 0 );
+                       return( 1 );
+               }
+
+               /* this is the default; we add it because the default might change... */
+               switch ( check_true_false( argv[ 1 ] ) ) {
+               case 1:
+                       *flagsp |= LDAP_BACK_F_NOREFS;
+                       break;
+
+               case 0:
+                       *flagsp &= ~LDAP_BACK_F_NOREFS;
+                       break;
+
+               default:
+                       Debug( LDAP_DEBUG_ANY,
+               "%s: line %d: \"norefs {TRUE|false}\": unknown argument \"%s\".\n",
+                               fname, lineno, argv[ 1 ] );
+                       return( 1 );
+               }
+
+       /* do not propagate undefined search filters */
+       } else if ( strcasecmp( argv[ 0 ], "noundeffilter" ) == 0 ) {
+               unsigned        *flagsp = mi->mi_ntargets ?
+                               &mi->mi_targets[ mi->mi_ntargets - 1 ]->mt_flags
+                               : &mi->mi_flags;
+
+               if ( argc != 2 ) {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"noundeffilter {TRUE|false}\" needs 1 argument.\n",
+                               fname, lineno, 0 );
+                       return( 1 );
+               }
+
+               /* this is the default; we add it because the default might change... */
+               switch ( check_true_false( argv[ 1 ] ) ) {
+               case 1:
+                       *flagsp |= LDAP_BACK_F_NOUNDEFFILTER;
+                       break;
+
+               case 0:
+                       *flagsp &= ~LDAP_BACK_F_NOUNDEFFILTER;
+                       break;
+
+               default:
+                       Debug( LDAP_DEBUG_ANY,
+               "%s: line %d: \"noundeffilter {TRUE|false}\": unknown argument \"%s\".\n",
+                               fname, lineno, argv[ 1 ] );
+                       return( 1 );
+               }
+
        /* anything else */
        } else {
                return SLAP_CONF_UNKNOWN;
@@ -1496,6 +1562,11 @@ ldap_back_map_config(
                return 1;
        }
 
+       if ( !is_oc && map->map == NULL ) {
+               /* only init if required */
+               ldap_back_map_init( map, &mapping );
+       }
+
        if ( strcmp( argv[ 2 ], "*" ) == 0 ) {
                if ( argc < 4 || strcmp( argv[ 3 ], "*" ) == 0 ) {
                        map->drop_missing = ( argc < 4 );
@@ -1642,11 +1713,6 @@ ldap_back_map_config(
                                mapping_cmp, mapping_dup );
 
 success_return:;
-       if ( !is_oc && map->map == NULL ) {
-               /* only init if required */
-               ldap_back_map_init( map, &mapping );
-       }
-
        return 0;
 
 error_return:;