]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/config.c
Drop unnecessary memset()s
[openldap] / servers / slapd / back-meta / config.c
index e5230859e8a5ec33d08dee753a84f2312ba468c3..17e8b0fc89db0b8b39dfdfc58b87f01814b442b0 100644 (file)
@@ -38,7 +38,6 @@ static int
 meta_back_new_target( 
        metatarget_t    **mtp )
 {
-        struct ldapmapping     *mapping;
        char                    *rargv[ 3 ];
        metatarget_t            *mt;
 
@@ -52,7 +51,6 @@ meta_back_new_target(
                return -1;
        }
 
-
        /*
         * the filter rewrite as a string must be disabled
         * by default; it can be re-enabled by adding rules;
@@ -68,10 +66,15 @@ meta_back_new_target(
        rargv[ 2 ] = NULL;
        rewrite_parse( mt->mt_rwmap.rwm_rw, "<suffix massage>", 1, 2, rargv );
 
-       ldap_back_map_init( &mt->mt_rwmap.rwm_at, &mapping );
-
        ldap_pvt_thread_mutex_init( &mt->mt_uri_mutex );
 
+       mt->mt_idassert_mode = LDAP_BACK_IDASSERT_LEGACY;
+       mt->mt_idassert_authmethod = LDAP_AUTH_NONE;
+       mt->mt_idassert_tls = SB_TLS_DEFAULT;
+
+       /* by default, use proxyAuthz control on each operation */
+       mt->mt_idassert_flags = LDAP_BACK_AUTH_PRESCRIPTIVE;
+
        *mtp = mt;
 
        return 0;
@@ -179,7 +182,7 @@ meta_back_db_config(
                mt->mt_version = mi->mi_version;
                mt->mt_network_timeout = mi->mi_network_timeout;
                mt->mt_bind_timeout = mi->mi_bind_timeout;
-               for ( c = 0; c < LDAP_BACK_OP_LAST; c++ ) {
+               for ( c = 0; c < SLAP_OP_LAST; c++ ) {
                        mt->mt_timeout[ c ] = mi->mi_timeout[ c ];
                }
 
@@ -762,20 +765,23 @@ meta_back_db_config(
        } else if ( strcasecmp( argv[ 0 ], "onerr" ) == 0 ) {
                if ( argc != 2 ) {
                        Debug( LDAP_DEBUG_ANY,
-       "%s: line %d: \"onerr {CONTINUE|stop}\" takes 1 argument\n",
+       "%s: line %d: \"onerr {CONTINUE|report|stop}\" takes 1 argument\n",
                                fname, lineno, 0 );
                        return( 1 );
                }
 
                if ( strcasecmp( argv[ 1 ], "continue" ) == 0 ) {
-                       mi->mi_flags &= ~META_BACK_F_ONERR_STOP;
+                       mi->mi_flags &= ~META_BACK_F_ONERR_MASK;
 
                } else if ( strcasecmp( argv[ 1 ], "stop" ) == 0 ) {
                        mi->mi_flags |= META_BACK_F_ONERR_STOP;
 
+               } else if ( strcasecmp( argv[ 1 ], "report" ) == 0 ) {
+                       mi->mi_flags |= META_BACK_F_ONERR_REPORT;
+
                } else {
                        Debug( LDAP_DEBUG_ANY,
-       "%s: line %d: \"onerr {CONTINUE|stop}\": invalid arg \"%s\".\n",
+       "%s: line %d: \"onerr {CONTINUE|report|stop}\": invalid arg \"%s\".\n",
                                fname, lineno, argv[ 1 ] );
                        return 1;
                }
@@ -839,6 +845,64 @@ meta_back_db_config(
                        return 1;
                }
 
+       /* use-temporaries? */
+       } else if ( strcasecmp( argv[ 0 ], "use-temporary-conn" ) == 0 ) {
+               if ( argc != 2 ) {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"use-temporary-conn {FALSE|true}\" takes 1 argument\n",
+                               fname, lineno, 0 );
+                       return( 1 );
+               }
+
+               if ( mi->mi_ntargets > 0 ) {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"use-temporary-conn\" must appear before target definitions\n",
+                               fname, lineno, 0 );
+                       return( 1 );
+               }
+
+               switch ( check_true_false( argv[ 1 ] ) ) {
+               case 0:
+                       mi->mi_flags &= ~LDAP_BACK_F_USE_TEMPORARIES;
+                       break;
+
+               case 1:
+                       mi->mi_flags |= LDAP_BACK_F_USE_TEMPORARIES;
+                       break;
+
+               default:
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"use-temporary-conn {FALSE|true}\": invalid arg \"%s\".\n",
+                               fname, lineno, argv[ 1 ] );
+                       return 1;
+               }
+
+       /* privileged connections pool max size ? */
+       } else if ( strcasecmp( argv[ 0 ], "conn-pool-max" ) == 0 ) {
+               if ( argc != 2 ) {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"conn-pool-max <n>\" takes 1 argument\n",
+                               fname, lineno, 0 );
+                       return( 1 );
+               }
+
+               if ( mi->mi_ntargets > 0 ) {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"conn-pool-max\" must appear before target definitions\n",
+                               fname, lineno, 0 );
+                       return( 1 );
+               }
+
+               if ( lutil_atoi( &mi->mi_conn_priv_max, argv[1] )
+                       || mi->mi_conn_priv_max < LDAP_BACK_CONN_PRIV_MIN
+                       || mi->mi_conn_priv_max > LDAP_BACK_CONN_PRIV_MAX )
+               {
+                       Debug( LDAP_DEBUG_ANY,
+       "%s: line %d: \"conn-pool-max <n>\": invalid arg \"%s\".\n",
+                               fname, lineno, argv[ 1 ] );
+                       return 1;
+               }
+
        } else if ( strcasecmp( argv[ 0 ], "cancel" ) == 0 ) {
                unsigned        flag = 0;
                unsigned        *flagsp = mi->mi_ntargets ?
@@ -883,7 +947,7 @@ meta_back_db_config(
 
                if ( argc < 2 ) {
                        Debug( LDAP_DEBUG_ANY,
-       "%s: line %d: \"timeout [{add|delete|modify|modrdn}=]<val> [...]\" takes at least 1 argument\n",
+       "%s: line %d: \"timeout [{add|bind|delete|modify|modrdn}=]<val> [...]\" takes at least 1 argument\n",
                                fname, lineno, 0 );
                        return( 1 );
                }
@@ -896,19 +960,33 @@ meta_back_db_config(
                        if ( sep != NULL ) {
                                size_t  len = sep - argv[ c ];
 
-                               if ( strncasecmp( argv[ c ], "add", len ) == 0 ) {
-                                       t = &tv[ LDAP_BACK_OP_ADD ];
+                               if ( strncasecmp( argv[ c ], "bind", len ) == 0 ) {
+                                       t = &tv[ SLAP_OP_BIND ];
+                               /* unbind makes little sense */
+                               } else if ( strncasecmp( argv[ c ], "add", len ) == 0 ) {
+                                       t = &tv[ SLAP_OP_ADD ];
                                } else if ( strncasecmp( argv[ c ], "delete", len ) == 0 ) {
-                                       t = &tv[ LDAP_BACK_OP_DELETE ];
-                               } else if ( strncasecmp( argv[ c ], "modify", len ) == 0 ) {
-                                       t = &tv[ LDAP_BACK_OP_MODIFY ];
+                                       t = &tv[ SLAP_OP_DELETE ];
                                } else if ( strncasecmp( argv[ c ], "modrdn", len ) == 0 ) {
-                                       t = &tv[ LDAP_BACK_OP_MODRDN ];
+                                       t = &tv[ SLAP_OP_MODRDN ];
+                               } else if ( strncasecmp( argv[ c ], "modify", len ) == 0 ) {
+                                       t = &tv[ SLAP_OP_MODIFY ];
+                               } else if ( strncasecmp( argv[ c ], "compare", len ) == 0 ) {
+                                       t = &tv[ SLAP_OP_COMPARE ];
+#if 0                          /* uses timelimit instead */
+                               } else if ( strncasecmp( argv[ c ], "search", len ) == 0 ) {
+                                       t = &tv[ SLAP_OP_SEARCH ];
+#endif
+                               /* abandon makes little sense */
+#if 0                          /* not implemented yet */
+                               } else if ( strncasecmp( argv[ c ], "extended", len ) == 0 ) {
+                                       t = &tv[ SLAP_OP_EXTENDED ];
+#endif
                                } else {
                                        char    buf[ SLAP_TEXT_BUFLEN ];
                                        snprintf( buf, sizeof( buf ),
-                                               "unknown operation \"%s\" for timeout #%d",
-                                               argv[ c ], c );
+                                               "unknown/unhandled operation \"%s\" for timeout #%d",
+                                               argv[ c ], c - 1 );
                                        Debug( LDAP_DEBUG_ANY,
                                                "%s: line %d: %s.\n",
                                                fname, lineno, buf );
@@ -933,7 +1011,7 @@ meta_back_db_config(
                        } else {
                                int     i;
        
-                               for ( i = 0; i < LDAP_BACK_OP_LAST; i++ ) {
+                               for ( i = 0; i < SLAP_OP_LAST; i++ ) {
                                        tv[ i ] = (time_t)val;
                                }
                        }
@@ -942,7 +1020,6 @@ meta_back_db_config(
        /* name to use as pseudo-root dn */
        } else if ( strcasecmp( argv[ 0 ], "pseudorootdn" ) == 0 ) {
                int             i = mi->mi_ntargets - 1;
-               struct berval   dn;
 
                if ( i < 0 ) {
                        Debug( LDAP_DEBUG_ANY,
@@ -1379,7 +1456,7 @@ ldap_back_map_config(
        if ( strcmp( argv[ 2 ], "*" ) == 0 ) {
                if ( argc < 4 || strcmp( argv[ 3 ], "*" ) == 0 ) {
                        map->drop_missing = ( argc < 4 );
-                       return 0;
+                       goto success_return;
                }
                src = dst = argv[ 3 ];
 
@@ -1393,7 +1470,7 @@ ldap_back_map_config(
        }
 
        if ( ( map == at_map )
-                       && ( strcasecmp( src, "objectclass" ) == 0
+               && ( strcasecmp( src, "objectclass" ) == 0
                        || strcasecmp( dst, "objectclass" ) == 0 ) )
        {
                Debug( LDAP_DEBUG_ANY,
@@ -1521,6 +1598,12 @@ ldap_back_map_config(
        avl_insert( &map->remap, (caddr_t)&mapping[ 1 ],
                                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:;