]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/main.c
Use AC_STRERROR_R
[openldap] / servers / slapd / main.c
index dd0a1f691dd67533bbbc75beb5c31ee46d3fa7e0..0fdef6bc8702a406b0c7d725b848d8f71a4d4421 100644 (file)
@@ -66,7 +66,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;
+       slaptest, slapauth, slapacl;
 
 static struct {
        char *name;
@@ -79,6 +79,7 @@ static struct {
        {"slappasswd", slappasswd},
        {"slaptest", slaptest},
        {"slapauth", slapauth},
+       {"slapacl", slapacl},
        /* NOTE: new tools must be added in chronological order,
         * not in alphabetical order, because for backwards
         * compatibility name[4] is used to identify the
@@ -131,6 +132,8 @@ static int   cnvt_str2int( char *, STRDISP_P, int );
 static int check = CHECK_NONE;
 static int version = 0;
 
+void *slap_tls_ctx;
+
 static void
 usage( char *name )
 {
@@ -207,7 +210,7 @@ int main( int argc, char **argv )
        char    *serverNamePrefix = "";
        size_t  l;
 
-       sl_mem_init();
+       slap_sl_mem_init();
 
        serverName = lutil_progname( "slapd", argc, argv );
 
@@ -218,8 +221,6 @@ int main( int argc, char **argv )
                                MAIN_RETURN(rc);
                        }
                }
-
-               goto unrecognized_server_name;
        }
 
 #ifdef HAVE_NT_SERVICE_MANAGER
@@ -417,7 +418,6 @@ int main( int argc, char **argv )
                        /* issue error */
                        serverName = optarg;
                        serverNamePrefix = "slap";
-unrecognized_server_name:;
                        fprintf( stderr, "program name \"%s%s\" unrecognized; "
                                        "aborting...\n", serverNamePrefix, serverName );
                        /* FALLTHRU */
@@ -624,18 +624,32 @@ unrecognized_server_name:;
                goto destroy;
        }
 
-       rc = ldap_pvt_tls_init_def_ctx();
-       if( rc != 0) {
+       {
+               void *def_ctx = NULL;
+
+               /* Save existing default ctx, if any */
+               ldap_pvt_tls_get_option( NULL, LDAP_OPT_X_TLS_CTX, &def_ctx );
+
+               /* Force new ctx to be created */
+               ldap_pvt_tls_set_option( NULL, LDAP_OPT_X_TLS_CTX, NULL );
+
+               rc = ldap_pvt_tls_init_def_ctx();
+               if( rc != 0) {
 #ifdef NEW_LOGGING
-               LDAP_LOG( SLAPD, CRIT, "main: tls init def ctx failed: %d\n", rc, 0, 0 );
+                       LDAP_LOG( SLAPD, CRIT, "main: tls init def ctx failed: %d\n", rc, 0, 0 );
 #else
-               Debug( LDAP_DEBUG_ANY,
-                   "main: TLS init def ctx failed: %d\n",
-                   rc, 0, 0 );
+                       Debug( LDAP_DEBUG_ANY,
+                           "main: TLS init def ctx failed: %d\n",
+                           rc, 0, 0 );
 #endif
-               rc = 1;
-               SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
-               goto destroy;
+                       rc = 1;
+                       SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
+                       goto destroy;
+               }
+               /* Retrieve slapd's own ctx */
+               ldap_pvt_tls_get_option( NULL, LDAP_OPT_X_TLS_CTX, &slap_tls_ctx );
+               /* Restore previous ctx */
+               ldap_pvt_tls_set_option( NULL, LDAP_OPT_X_TLS_CTX, def_ctx );
        }
 #endif