]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/main.c
Cleanup
[openldap] / servers / slapd / main.c
index 70dae327d6acd11958a37885239f7a83e42a09c2..2fc052369b640d1a44e4c9b8223b97f07027689b 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2008 The OpenLDAP Foundation.
+ * Copyright 1998-2009 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -65,7 +65,7 @@ static struct sockaddr_in     bind_addr;
 
 typedef int (MainFunc) LDAP_P(( int argc, char *argv[] ));
 extern MainFunc slapadd, slapcat, slapdn, slapindex, slappasswd,
-       slaptest, slapauth, slapacl;
+       slaptest, slapauth, slapacl, slapschema;
 
 static struct {
        char *name;
@@ -76,6 +76,7 @@ static struct {
        {"slapdn", slapdn},
        {"slapindex", slapindex},
        {"slappasswd", slappasswd},
+       {"slapschema", slapschema},
        {"slaptest", slaptest},
        {"slapauth", slapauth},
        {"slapacl", slapacl},
@@ -269,7 +270,18 @@ parse_debug_level( const char *arg, int *levelp, char ***unknowns )
                ldap_charray_free( levels );
 
        } else {
-               if ( lutil_atoix( &level, arg, 0 ) != 0 ) {
+               int rc;
+
+               if ( arg[0] == '-' ) {
+                       rc = lutil_atoix( &level, arg, 0 );
+               } else {
+                       unsigned ulevel;
+
+                       rc = lutil_atoux( &ulevel, arg, 0 );
+                       level = (int)ulevel;
+               }
+
+               if ( rc ) {
                        fprintf( stderr,
                                "unrecognized log level "
                                "\"%s\"\n", arg );
@@ -699,6 +711,7 @@ unhandled_option:;
        Debug( LDAP_DEBUG_ANY, "%s", Versionstr, 0, 0 );
 
        global_host = ldap_pvt_get_fqdn( NULL );
+       ber_str2bv( global_host, 0, 0, &global_host_bv );
 
        if( check == CHECK_NONE && slapd_daemon_init( urls ) != 0 ) {
                rc = 1;
@@ -792,7 +805,7 @@ unhandled_option:;
                }
        }
 
-       if ( glue_sub_attach( ) != 0 ) {
+       if ( glue_sub_attach( ) != 0 ) {
                Debug( LDAP_DEBUG_ANY,
                    "subordinate config error\n",
                    0, 0, 0 );
@@ -929,6 +942,8 @@ unhandled_option:;
         */
        time( &starttime );
 
+       connections_init();
+
        if ( slap_startup( NULL ) != 0 ) {
                rc = 1;
                SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 21 );
@@ -1028,6 +1043,8 @@ stop:
                ch_free( configdir );
        if ( urls )
                ch_free( urls );
+       if ( global_host )
+               ch_free( global_host );
 
        /* kludge, get symbols referenced */
        tavl_free( NULL, NULL );
@@ -1052,13 +1069,12 @@ wait4child( int sig )
     int save_errno = errno;
 
 #ifdef WNOHANG
-    errno = 0;
+    do
+        errno = 0;
 #ifdef HAVE_WAITPID
-    while ( waitpid( (pid_t)-1, NULL, WNOHANG ) > 0 || errno == EINTR )
-       ;       /* NULL */
+    while ( waitpid( (pid_t)-1, NULL, WNOHANG ) > 0 || errno == EINTR );
 #else
-    while ( wait3( NULL, WNOHANG, NULL ) > 0 || errno == EINTR )
-       ;       /* NULL */
+    while ( wait3( NULL, WNOHANG, NULL ) > 0 || errno == EINTR );
 #endif
 #else
     (void) wait( NULL );
@@ -1068,4 +1084,3 @@ wait4child( int sig )
 }
 
 #endif /* LDAP_SIGCHLD */
-