]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/config.c
error message from be_entry_put tool backend function
[openldap] / servers / slapd / config.c
index 3f5c60868ec12a7962ffe3250b419652cfbad760..7442953c7d19dc774b3a320dc9ee712a1f286664 100644 (file)
@@ -1,7 +1,7 @@
 /* config.c - configuration file handling routines */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -40,7 +40,6 @@ slap_mask_t           global_disallows = 0;
 slap_mask_t            global_requires = 0;
 slap_ssf_set_t global_ssf_set;
 char           *replogfile;
-int            global_lastmod = ON;
 int            global_idletimeout = 0;
 char   *global_host = NULL;
 char   *global_realm = NULL;
@@ -76,14 +75,13 @@ read_config( const char *fname )
        char    *cargv[MAXARGS+1];
        int     lineno, i;
        int rc;
-       struct berval *vals[2];
-       struct berval val;
+       struct berval vals[2];
 
+       static int lastmod = ON;
        static BackendInfo *bi = NULL;
        static BackendDB        *be = NULL;
 
-       vals[0] = &val;
-       vals[1] = NULL;
+       vals[1].bv_val = NULL;
 
        if ( (fp = fopen( fname, "r" )) == NULL ) {
                ldap_syslog = 1;
@@ -262,11 +260,11 @@ read_config( const char *fname )
                        if ( cargc < 2 ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
-                                          "%s: line %d: missing max in \"sockbuf_max_incoming <bytes\" line\n",
+                                          "%s: line %d: missing max in \"sockbuf_max_incoming <bytes>\" line\n",
                                           fname, lineno ));
 #else
                                Debug( LDAP_DEBUG_ANY,
-                                          "%s: line %d: missing max in \"sockbuf_max_incoming <bytes\" line\n",
+                                          "%s: line %d: missing max in \"sockbuf_max_incoming <bytes>\" line\n",
                                    fname, lineno, 0 );
 #endif
 
@@ -395,26 +393,15 @@ read_config( const char *fname )
                        if ( load_ucdata( NULL ) < 0 ) return 1;
 
                        {
-                               struct berval dn, *pdn, *ndn;
+                               struct berval dn;
 
                                dn.bv_val = cargv[1];
                                dn.bv_len = strlen( dn.bv_val );
 
-                               rc = dnPretty( NULL, &dn, &pdn );
-                               if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
-                                       LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
-                                               "%s: line %d: defaultSearchBase DN is invalid.\n",
-                                               fname, lineno ));
-#else
-                                       Debug( LDAP_DEBUG_ANY,
-                                               "%s: line %d: defaultSearchBase DN is invalid\n",
-                                          fname, lineno, 0 );
-#endif
-                                       return( 1 );
-                               }
+                               rc = dnPrettyNormal( NULL, &dn,
+                                       &default_search_base,
+                                       &default_search_nbase );
 
-                               rc = dnNormalize( NULL, &dn, &ndn );
                                if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                        LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
@@ -425,15 +412,8 @@ read_config( const char *fname )
                                                "%s: line %d: defaultSearchBase DN is invalid\n",
                                           fname, lineno, 0 );
 #endif
-                                       ber_bvfree( ndn );
                                        return( 1 );
                                }
-
-                               default_search_base = *pdn;
-                               default_search_nbase = *ndn;
-
-                               free( pdn );
-                               free( ndn );
                        }
 
                /* set maximum threads in thread pool */
@@ -862,7 +842,7 @@ read_config( const char *fname )
                                    fname, lineno, 0 );
 #endif
                        } else {
-                               be->be_glueflags |= SLAP_GLUE_SUBORDINATE;
+                               be->be_flags |= SLAP_BFLAG_GLUE_SUBORDINATE;
                                num_subordinates++;
                        }
 
@@ -930,22 +910,10 @@ read_config( const char *fname )
 
                        dn.bv_val = cargv[1];
                        dn.bv_len = strlen( cargv[1] );
+                       pdn = ch_malloc( sizeof( struct berval ));
+                       ndn = ch_malloc( sizeof( struct berval ));
 
-                       rc = dnPretty( NULL, &dn, &pdn );
-                       if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
-                               LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
-                                       "%s: line %d: suffix DN is invalid.\n",
-                                       fname, lineno ));
-#else
-                               Debug( LDAP_DEBUG_ANY,
-                                       "%s: line %d: suffix DN is invalid\n",
-                                  fname, lineno, 0 );
-#endif
-                               return( 1 );
-                       }
-
-                       rc = dnNormalize( NULL, &dn, &ndn );
+                       rc = dnPrettyNormal( NULL, &dn, pdn, ndn );
                        if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
@@ -956,7 +924,6 @@ read_config( const char *fname )
                                        "%s: line %d: suffix DN is invalid\n",
                                   fname, lineno, 0 );
 #endif
-                               ber_bvfree( ndn );
                                return( 1 );
                        }
 
@@ -1009,8 +976,8 @@ read_config( const char *fname )
                /* set database suffixAlias */
                } else if ( strcasecmp( cargv[0], "suffixAlias" ) == 0 ) {
                        Backend *tmp_be;
-                       struct berval alias, *palias, *nalias;
-                       struct berval aliased, *paliased, *naliased;
+                       struct berval alias, *palias, nalias;
+                       struct berval aliased, *paliased, naliased;
 
                        if ( cargc < 2 ) {
 #ifdef NEW_LOGGING
@@ -1070,8 +1037,9 @@ read_config( const char *fname )
                        
                        alias.bv_val = cargv[1];
                        alias.bv_len = strlen( cargv[1] );
+                       palias = ch_malloc(sizeof(struct berval));
 
-                       rc = dnPretty( NULL, &alias, &palias );
+                       rc = dnPrettyNormal( NULL, &alias, palias, &nalias );
                        if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
@@ -1085,24 +1053,9 @@ read_config( const char *fname )
                                return( 1 );
                        }
 
-                       rc = dnNormalize( NULL, &alias, &nalias );
-                       if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
-                               LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
-                                       "%s: line %d: alias DN is invalid.\n",
-                                       fname, lineno ));
-#else
-                               Debug( LDAP_DEBUG_ANY,
-                                       "%s: line %d: alias DN is invalid\n",
-                                  fname, lineno, 0 );
-#endif
-                               ber_bvfree( palias );
-                               return( 1 );
-                       }
-
-                       tmp_be = select_backend( nalias, 0, 0 );
-                       ber_bvfree( nalias );
-                       if ( tmp_be != be ) {
+                       tmp_be = select_backend( &nalias, 0, 0 );
+                       free( nalias.bv_val );
+                       if ( tmp_be && tmp_be != be ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_INFO,
                                        "%s: line %d: suffixAlias served by a preceeding "
@@ -1120,8 +1073,9 @@ read_config( const char *fname )
 
                        aliased.bv_val = cargv[2];
                        aliased.bv_len = strlen( cargv[2] );
+                       paliased = ch_malloc(sizeof(struct berval));
 
-                       rc = dnPretty( NULL, &aliased, &paliased );
+                       rc = dnPrettyNormal( NULL, &aliased, paliased, &naliased );
                        if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
@@ -1136,25 +1090,9 @@ read_config( const char *fname )
                                return( 1 );
                        }
 
-                       rc = dnNormalize( NULL, &aliased, &naliased );
-                       if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
-                               LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
-                                       "%s: line %d: aliased DN is invalid.\n",
-                                       fname, lineno ));
-#else
-                               Debug( LDAP_DEBUG_ANY,
-                                       "%s: line %d: aliased DN is invalid\n",
-                                  fname, lineno, 0 );
-#endif
-                               ber_bvfree( palias );
-                               ber_bvfree( paliased );
-                               return( 1 );
-                       }
-
-                       tmp_be = select_backend( naliased, 0, 0 );
-                       ber_bvfree( naliased );
-                       if ( tmp_be != be ) {
+                       tmp_be = select_backend( &naliased, 0, 0 );
+                       free( naliased.bv_val );
+                       if ( tmp_be && tmp_be != be ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_INFO,
                                        "%s: line %d: suffixAlias derefs to a different backend "
@@ -1245,28 +1183,17 @@ read_config( const char *fname )
 #endif
 
                        } else {
-                               struct berval dn, *pdn = NULL, *ndn = NULL;
+                               struct berval dn;
                                
                                if ( load_ucdata( NULL ) < 0 ) return 1;
 
                                dn.bv_val = cargv[1];
                                dn.bv_len = strlen( cargv[1] );
 
-                               rc = dnPretty( NULL, &dn, &pdn );
-                               if( rc != LDAP_SUCCESS ) {
-#ifdef NEW_LOGGING
-                                       LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
-                                               "%s: line %d: rootdn DN is invalid.\n",
-                                               fname, lineno ));
-#else
-                                       Debug( LDAP_DEBUG_ANY,
-                                               "%s: line %d: rootdn DN is invalid\n",
-                                          fname, lineno, 0 );
-#endif
-                                       return( 1 );
-                               }
+                               rc = dnPrettyNormal( NULL, &dn,
+                                       &be->be_rootdn,
+                                       &be->be_rootndn );
 
-                               rc = dnNormalize( NULL, &dn, &ndn );
                                if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                        LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
@@ -1277,15 +1204,8 @@ read_config( const char *fname )
                                                "%s: line %d: rootdn DN is invalid\n",
                                           fname, lineno, 0 );
 #endif
-                                       ber_bvfree( ndn );
                                        return( 1 );
                                }
-
-                               be->be_rootdn = *pdn;
-                               be->be_rootndn = *ndn;
-
-                               free( pdn );
-                               free( ndn );
                        }
 
                /* set super-secret magic database password */
@@ -1658,8 +1578,8 @@ read_config( const char *fname )
                                return 1;
                        }
 
-                       vals[0]->bv_val = cargv[1];
-                       vals[0]->bv_len = strlen( vals[0]->bv_val );
+                       vals[0].bv_val = cargv[1];
+                       vals[0].bv_len = strlen( vals[0].bv_val );
                        value_add( &default_referral, vals );
 
 #ifdef NEW_LOGGING
@@ -1767,6 +1687,15 @@ read_config( const char *fname )
                                return( 1 );
                        }
                        if ( strcasecmp( cargv[1], "off" ) == 0 ) {
+#ifdef NEW_LOGGING
+                               LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
+                                       "%s: line %d: schema checking disabled! your mileage may vary!\n",
+                                       fname, lineno ));
+#else
+                               Debug( LDAP_DEBUG_ANY,
+                                       "%s: line %d: schema checking disabled! your mileage may vary!\n",
+                                   fname, lineno, 0 );
+#endif
                                global_schemacheck = 0;
                        } else {
                                global_schemacheck = 1;
@@ -1921,14 +1850,14 @@ read_config( const char *fname )
 #endif
 
                        } else {
-                               struct berval dn, *ndn = NULL;
+                               struct berval dn;
 
                                if ( load_ucdata( NULL ) < 0 ) return 1;
 
                                dn.bv_val = cargv[1];
                                dn.bv_len = strlen( cargv[1] );
 
-                               rc = dnNormalize( NULL, &dn, &ndn );
+                               rc = dnNormalize2( NULL, &dn, &be->be_update_ndn );
                                if( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                        LDAP_LOG(( "config", LDAP_LEVEL_CRIT,
@@ -1941,9 +1870,6 @@ read_config( const char *fname )
 #endif
                                        return 1;
                                }
-
-                               be->be_update_ndn = *ndn;
-                               free( ndn );
                        }
 
                } else if ( strcasecmp( cargv[0], "updateref" ) == 0 ) {
@@ -1998,8 +1924,8 @@ read_config( const char *fname )
                                return 1;
                        }
 
-                       vals[0]->bv_val = cargv[1];
-                       vals[0]->bv_len = strlen( vals[0]->bv_val );
+                       vals[0].bv_val = cargv[1];
+                       vals[0].bv_len = strlen( vals[0].bv_val );
                        value_add( &be->be_update_refs, vals );
 
                /* replication log file to which changes are appended */
@@ -2028,11 +1954,11 @@ read_config( const char *fname )
                        if ( cargc < 2 ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_CRIT, "%s: line %d: "
-                                       "missing filename in \"rootDSEfile <filename>\" line.\n",
+                                       "missing filename in \"rootDSE <filename>\" line.\n",
                                        fname, lineno ));
 #else
                                Debug( LDAP_DEBUG_ANY, "%s: line %d: "
-                                       "missing filename in \"rootDSEfile <filename>\" line.\n",
+                                       "missing filename in \"rootDSE <filename>\" line.\n",
                                    fname, lineno, 0 );
 #endif
                                return 1;
@@ -2041,11 +1967,11 @@ read_config( const char *fname )
                        if( read_root_dse_file( cargv[1] ) ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_CRIT, "%s: line %d: "
-                                       "could not read \"rootDSEfile <filename>\" line.\n",
+                                       "could not read \"rootDSE <filename>\" line.\n",
                                        fname, lineno ));
 #else
                                Debug( LDAP_DEBUG_ANY, "%s: line %d: "
-                                       "could not read \"rootDSEfile <filename>\" line\n",
+                                       "could not read \"rootDSE <filename>\" line\n",
                                    fname, lineno, 0 );
 #endif
                                return 1;
@@ -2067,15 +1993,17 @@ read_config( const char *fname )
                                return( 1 );
                        }
                        if ( strcasecmp( cargv[1], "on" ) == 0 ) {
-                               if ( be )
-                                       be->be_lastmod = ON;
-                               else
-                                       global_lastmod = ON;
+                               if ( be ) {
+                                       be->be_flags &= ~SLAP_BFLAG_NOLASTMOD;
+                               } else {
+                                       lastmod = ON;
+                               }
                        } else {
-                               if ( be )
-                                       be->be_lastmod = OFF;
-                               else
-                                       global_lastmod = OFF;
+                               if ( be ) {
+                                       be->be_flags |= SLAP_BFLAG_NOLASTMOD;
+                               } else {
+                                       lastmod = OFF;
+                               }
                        }
 
                /* set idle timeout value */