]> git.sur5r.net Git - openldap/commitdiff
Relocate schema_init() call to main()
authorKurt Zeilenga <kurt@openldap.org>
Mon, 15 May 2000 20:04:36 +0000 (20:04 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 15 May 2000 20:04:36 +0000 (20:04 +0000)
Add schema_prep() call to main()
Similiar changes to slapcommon.c
Add schema_prep() impl to schema_init.c
Add slap_ad_entry and slap_ad_children globals.
Add "entry" and "children" to openldap.schema (this likely should
  be added to schema via code, not configuration)

servers/slapd/config.c
servers/slapd/main.c
servers/slapd/proto-slap.h
servers/slapd/result.c
servers/slapd/schema/openldap.schema
servers/slapd/schema_init.c
servers/slapd/tools/slapcommon.c

index 66478d172585fe51b9a7212a94e3fc50bf3c9c4c..b2412ad39dcc6cc30e06003dea8ef4349666d30a 100644 (file)
@@ -76,13 +76,6 @@ read_config( const char *fname )
 
        Debug( LDAP_DEBUG_CONFIG, "reading config file %s\n", fname, 0, 0 );
 
-       if ( schema_init( ) != 0 ) {
-               Debug( LDAP_DEBUG_ANY,
-                   "error initializing the schema\n",
-                   0, 0, 0 );
-               return( 1 );
-       }
-
        fp_getline_init( &lineno );
 
        while ( (line = fp_getline( fp, &lineno )) != NULL ) {
index 24c56fb6478d4184e91ab1a0668dcb49b9105ba1..bc50274a1e79bb48698c843afccd3b96904036d7 100644 (file)
@@ -361,12 +361,26 @@ int main( int argc, char **argv )
                goto destroy;
        }
 
+       if ( schema_init( ) != 0 ) {
+               Debug( LDAP_DEBUG_ANY,
+                   "schema initialization error\n",
+                   0, 0, 0 );
+               goto destroy;
+       }
+
        if ( read_config( configfile ) != 0 ) {
                rc = 1;
                SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 19 );
                goto destroy;
        }
 
+       if ( schema_prep( ) != 0 ) {
+               Debug( LDAP_DEBUG_ANY,
+                   "schema prep error\n",
+                   0, 0, 0 );
+               goto destroy;
+       }
+
 #ifdef HAVE_TLS
        ldap_pvt_tls_init();
 
index a1e67e2235cfea8742af15101efe2a65b5122f38..08b5d4d437ef8075a9678a5704c1a2241cb060eb 100644 (file)
@@ -11,6 +11,9 @@
 LDAP_BEGIN_DECL
 
 #ifdef SLAPD_SCHEMA_NOT_COMPAT
+LIBSLAPD_F( AttributeDescription * ) slap_ad_entry;
+LIBSLAPD_F( AttributeDescription * ) slap_ad_children;
+
 LIBSLAPD_F (int) slap_str2ad LDAP_P((
        const char *,
        AttributeDescription **ad,
@@ -611,6 +614,7 @@ LIBSLAPD_F (int) entry_schema_check LDAP_P((
  * schema_init.c
  */
 LIBSLAPD_F (int) schema_init LDAP_P((void));
+LIBSLAPD_F (int) schema_prep LDAP_P((void));
 
 
 /*
index b1b2ec294c594a68cb8f7dfaa12b646cb8b945e8..65b5f3d9c163ccb4b418d82bf40520058963bb4c 100644 (file)
@@ -629,7 +629,7 @@ send_search_entry(
        int             opattrs;
 
 #ifdef SLAPD_SCHEMA_NOT_COMPAT
-       static AttributeDescription *entry = NULL;
+       AttributeDescription *entry = slap_ad_entry;
 #else
        static const char *entry = "entry";
 #endif
index c4711fc58936d7702a7dc8d7858f23bf839ae49b..04c1b485d958eb5a6ea237934e2e6919d81146d8 100644 (file)
@@ -18,3 +18,7 @@
 #
 # other slapd items
 #
+attributetype ( entryOID NAME 'entry' SUP name
+      SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation )
+attributetype ( childrenOID NAME 'children' SUP name
+      SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation )
index d29a0d4d032bbe84235de4ae4ca987caba3a8293..7b971379ea78af69818afffdcb829c2955ec7187 100644 (file)
@@ -564,16 +564,16 @@ struct mrule_defs_rec mrule_defs[] = {
        {NULL, SLAP_MR_NONE, NULL, NULL, NULL}
 };
 
+static int schema_init_done = 0;
+
 int
 schema_init( void )
 {
        int             res;
        int             i;
-       static int      schema_init_done = 0;
 
-       /* We are called from read_config that is recursive */
-       if ( schema_init_done )
-               return( 0 );
+       /* we should only be called once (from main) */
+       assert( schema_init_done == 0 );
 
        for ( i=0; syntax_defs[i].sd_desc != NULL; i++ ) {
                res = register_syntax( syntax_defs[i].sd_desc,
@@ -585,7 +585,7 @@ schema_init( void )
                if ( res ) {
                        fprintf( stderr, "schema_init: Error registering syntax %s\n",
                                 syntax_defs[i].sd_desc );
-                       exit( EXIT_FAILURE );
+                       return -1;
                }
        }
 
@@ -610,9 +610,42 @@ schema_init( void )
                        fprintf( stderr,
                                "schema_init: Error registering matching rule %s\n",
                                 mrule_defs[i].mrd_desc );
-                       exit( EXIT_FAILURE );
+                       return -1;
                }
        }
        schema_init_done = 1;
        return( 0 );
 }
+
+#ifdef SLAPD_SCHEMA_NOT_COMPAT
+AttributeDescription *slap_ad_entry = NULL;
+AttributeDescription *slap_ad_children = NULL;
+#endif
+
+int
+schema_prep( void )
+{
+#ifdef SLAPD_SCHEMA_NOT_COMPAT
+       int rc;
+       char *text;
+#endif
+       /* we should only be called once after schema_init() was called */
+       assert( schema_init_done == 1 );
+
+#ifdef SLAPD_SCHEMA_NOT_COMPAT
+       rc = slap_str2ad( "entry", &slap_ad_entry, &text);
+       if( rc != LDAP_SUCCESS ) {
+               fprintf( stderr, "No attribute \"entry\" defined in schema\n" );
+               return rc;
+       }
+
+       rc = slap_str2ad( "children", &slap_ad_children, &text);
+       if( rc != LDAP_SUCCESS ) {
+               fprintf( stderr, "No attribute \"children\" defined in schema\n" );
+               return rc;
+       }
+#endif
+
+       ++schema_init_done;
+       return 0;
+}
index dd4095e74a4d52748fdb6dd70878172bbba2080f..45ba63a2d88e346a4886e5f611199e89fd3d9b6a 100644 (file)
@@ -188,6 +188,13 @@ slap_tool_init(
                exit( EXIT_FAILURE );
        }
 
+       rc = schema_init();
+
+       if (rc != 0 ) {
+               fprintf( stderr, "%s: slap_schema_init failed!\n", progname );
+               exit( EXIT_FAILURE );
+       }
+
        read_config( conffile );
 
        if ( !nbackends ) {
@@ -195,6 +202,13 @@ slap_tool_init(
                exit( EXIT_FAILURE );
        }
 
+       rc = schema_prep();
+
+       if (rc != 0 ) {
+               fprintf( stderr, "%s: slap_schema_prep failed!\n", progname );
+               exit( EXIT_FAILURE );
+       }
+
        if( base != NULL ) {
                char *tbase = ch_strdup( base );