]> git.sur5r.net Git - openldap/commitdiff
ITS#5745
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 10 Nov 2008 23:20:05 +0000 (23:20 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 10 Nov 2008 23:20:05 +0000 (23:20 +0000)
12 files changed:
CHANGES
servers/slapd/back-bdb/init.c
servers/slapd/backend.c
servers/slapd/slapacl.c
servers/slapd/slapadd.c
servers/slapd/slapauth.c
servers/slapd/slapcat.c
servers/slapd/slapcommon.c
servers/slapd/slapcommon.h
servers/slapd/slapdn.c
servers/slapd/slapindex.c
servers/slapd/slaptest.c

diff --git a/CHANGES b/CHANGES
index 73b2eedf16134e4e9f25aaeb1f9748faf7ad8ea2..83ddf32133c6826de56e57089ad92fa989fbe9c8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -11,6 +11,7 @@ OpenLDAP 2.4.13 Engineering
        Fixed slapd contextCSN pending list (ITS#5709)
        Fixed slapd control criticality (ITS#5785)
        Added slapd dn.this search limits (ITS#5734)
+       Fixed slapd error status on shutdown (ITS#5745)
        Fixed slapd nameUIDPretty bitstring parsing (ITS#5750)
        Fixed slapd overlay/database open with real structure (ITS#5724)
        Fixed slapd parsing of read entry control (ITS#5741)
index 5de029303bc6cb0984a1c4bac16f876535db9271..a0bfcc16fa8d22d81f0865394b64f3467e9284e3 100644 (file)
@@ -584,6 +584,17 @@ bdb_db_close( BackendDB *be, ConfigReply *cr )
        ber_bvarray_free( bdb->bi_db_config );
        bdb->bi_db_config = NULL;
 
+       if( bdb->bi_dbenv ) {
+               /* Free cache locker if we enabled locking.
+                * TXNs must all be closed before DBs...
+                */
+               if ( !( slapMode & SLAP_TOOL_QUICK ) && bdb->bi_cache.c_txn ) {
+                       TXN_ABORT( bdb->bi_cache.c_txn );
+                       bdb->bi_cache.c_txn = NULL;
+               }
+               bdb_reader_flush( bdb->bi_dbenv );
+       }
+
        while( bdb->bi_databases && bdb->bi_ndatabases-- ) {
                db = bdb->bi_databases[bdb->bi_ndatabases];
                rc = db->bdi_db->close( db->bdi_db, 0 );
@@ -614,13 +625,6 @@ bdb_db_close( BackendDB *be, ConfigReply *cr )
 
        /* close db environment */
        if( bdb->bi_dbenv ) {
-               /* Free cache locker if we enabled locking */
-               if ( !( slapMode & SLAP_TOOL_QUICK ) && bdb->bi_cache.c_txn ) {
-                       TXN_ABORT( bdb->bi_cache.c_txn );
-                       bdb->bi_cache.c_txn = NULL;
-               }
-               bdb_reader_flush( bdb->bi_dbenv );
-
                /* force a checkpoint, but not if we were ReadOnly,
                 * and not in Quick mode since there are no transactions there.
                 */
index 459490b4ee8eea9be6561c47dde6b548d4d3629e..3754a258f20af6203dbce3bc5d295c85632fd207 100644 (file)
@@ -349,11 +349,13 @@ int backend_shutdown( Backend *be )
                }
 
                if ( be->bd_info->bi_db_close ) {
-                       be->bd_info->bi_db_close( be, NULL );
+                       rc = be->bd_info->bi_db_close( be, NULL );
+                       if ( rc ) return rc;
                }
 
                if( be->bd_info->bi_close ) {
-                       be->bd_info->bi_close( be->bd_info );
+                       rc = be->bd_info->bi_close( be->bd_info );
+                       if ( rc ) return rc;
                }
 
                return 0;
index 67cf7b3b56b62ee8e14659fd7f67c7e06a8ea9cb..c0a06e279c2a980c833ccca40b767952a1171b70 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2008 The OpenLDAP Foundation.
@@ -399,7 +400,8 @@ destroy:;
                }
        }
 
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
 
        return rc;
 }
index 468dcea6716c6f1d14b8660bc6c4e2cbebc88abf..442446c1d26ffa416d71a3f4b22e0467566b50b0 100644 (file)
@@ -447,7 +447,8 @@ slapadd( int argc, char **argv )
                }
        }
 
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
 
        return rc;
 }
index 8934df3b29faad7016f84f37db954fd4aec7bd8b..0b273263842a5f62f4c2f2174bfc51f022fe6176 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2008 The OpenLDAP Foundation.
@@ -166,7 +167,8 @@ destroy:;
        if ( !BER_BVISNULL( &authzID ) ) {
                op->o_tmpfree( authzID.bv_val, op->o_tmpmemctx );
        }
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
 
        return rc;
 }
index 6ea1952006502541080756408981bf00ea2f8039..80586ef65111b75b0fc19e7ed306a9ef8a92e8bd 100644 (file)
@@ -134,6 +134,7 @@ slapcat( int argc, char **argv )
 
        be->be_entry_close( be );
 
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
        return rc;
 }
index 6050629cd3b25de64dfb5e36c3a4d9ba47bec27c..fad2bb9a960e7be359a1de93af9108e0c6e93bc5 100644 (file)
@@ -740,13 +740,16 @@ startup:;
        }
 }
 
-void slap_tool_destroy( void )
+int slap_tool_destroy( void )
 {
+       int rc = 0;
        if ( !dryrun ) {
                if ( need_shutdown ) {
-                       slap_shutdown( be );
+                       if ( slap_shutdown( be ))
+                               rc = EXIT_FAILURE;
                }
-               slap_destroy();
+               if ( slap_destroy())
+                       rc = EXIT_FAILURE;
        }
 #ifdef SLAPD_MODULES
        if ( slapMode == SLAP_SERVER_MODE ) {
@@ -772,4 +775,5 @@ void slap_tool_destroy( void )
        if ( ldiffp && ldiffp != &dummy ) {
                ldif_close( ldiffp );
        }
+       return rc;
 }
index 9cc22fed48d0f8867879e1b60b81cf7ab6ef8bbf..32138d1c22d474d1c4170b5eff4c1770e365cfb6 100644 (file)
@@ -101,6 +101,6 @@ void slap_tool_init LDAP_P((
        int tool,
        int argc, char **argv ));
 
-void slap_tool_destroy LDAP_P((void));
+int slap_tool_destroy LDAP_P((void));
 
 #endif /* SLAPCOMMON_H_ */
index 2aa12232b23e50ac1c4c57836ac3852ce6771415..95af1a37d8c4d21dbdb4df78d6c7f71bb23354df 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2008 The OpenLDAP Foundation.
@@ -99,7 +100,8 @@ slapdn( int argc, char **argv )
                }
        }
        
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
 
        return rc;
 }
index 6b1f9bb92a879b8b31545ce4d11478717118a393..81ddf6ee93feaaac04e6c6bde7b8da03e4ade845 100644 (file)
@@ -99,6 +99,7 @@ slapindex( int argc, char **argv )
 
        (void) be->be_entry_close( be );
 
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
        return( rc );
 }
index c47abf85d78098755cd962b63162a42678fa6a04..bf48c7e6414ce66b249d08108c35096e8148e33a 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
  * Copyright 2004-2008 The OpenLDAP Foundation.
@@ -108,7 +109,8 @@ slaptest( int argc, char **argv )
                fprintf( stderr, "config file testing succeeded\n");
        }
 
-       slap_tool_destroy();
+       if ( slap_tool_destroy())
+               rc = EXIT_FAILURE;
 
        return rc;
 }