[389-commits] Branch 'Directory_Server_8_2_Branch' - ldap/servers

Noriko Hosoi nhosoi at fedoraproject.org
Fri Mar 12 00:56:41 UTC 2010


 ldap/servers/slapd/back-ldbm/ldbm_add.c    |    2 ++
 ldap/servers/slapd/back-ldbm/ldbm_delete.c |    8 ++++++--
 ldap/servers/slapd/back-ldbm/ldbm_modify.c |    3 ++-
 ldap/servers/slapd/back-ldbm/ldbm_modrdn.c |    8 +++++---
 ldap/servers/slapd/plugin_syntax.c         |    3 +++
 5 files changed, 18 insertions(+), 6 deletions(-)

New commits:
commit dd7054c240f740498b9b7bd08bd5abf170dc30a9
Author: Noriko Hosoi <nhosoi at redhat.com>
Date:   Thu Mar 11 14:26:07 2010 -0800

    572649 - DS8.2 crashes on RHEL 4 (corresponding to bob, ber_2 test case)
    
    https://bugzilla.redhat.com/show_bug.cgi?id=572649
    
    Fix Description: There was a chance to jump to error_return before
    back_txn structure was initialized.  In the error handling, the
    transaction abort is called against the garbage address.  Slapi_DN
    also gets freed without an initialization.  Now these variables
    are initialized first.

diff --git a/ldap/servers/slapd/back-ldbm/ldbm_add.c b/ldap/servers/slapd/back-ldbm/ldbm_add.c
index 76cc6bb..f0d563b 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_add.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_add.c
@@ -130,6 +130,7 @@ ldbm_back_add( Slapi_PBlock *pb )
 
 	inst = (ldbm_instance *) be->be_instance_info;
 		
+	/* sdn & parentsdn need to be initialized before "goto *_return" */
 	slapi_sdn_init(&sdn);
 	slapi_sdn_init(&parentsdn);
 	
@@ -137,6 +138,7 @@ ldbm_back_add( Slapi_PBlock *pb )
 	slapi_entry_delete_values( e, hassubordinates, NULL );
 	slapi_entry_delete_values( e, numsubordinates, NULL );
 
+	/* dblayer_txn_init needs to be called before "goto error_return" */
 	dblayer_txn_init(li,&txn);
 
 	/* The dblock serializes writes to the database,
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_delete.c b/ldap/servers/slapd/back-ldbm/ldbm_delete.c
index bc298a9..9cb961c 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_delete.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_delete.c
@@ -100,6 +100,12 @@ ldbm_back_delete( Slapi_PBlock *pb )
 	slapi_pblock_get( pb, SLAPI_OPERATION, &operation );
 	slapi_pblock_get( pb, SLAPI_IS_REPLICATED_OPERATION, &is_replicated_operation );
 	
+	/* sdn & parentsdn need to be initialized before "goto *_return */
+	slapi_sdn_init(&sdn);
+
+	/* dblayer_txn_init needs to be called before "goto error_return" */
+	dblayer_txn_init(li,&txn);
+
 	if (pb->pb_conn)
 	{
 		slapi_log_error (SLAPI_LOG_TRACE, "ldbm_back_delete", "enter conn=%" NSPRIu64 " op=%d\n", pb->pb_conn->c_connid, operation->o_opid);
@@ -125,8 +131,6 @@ ldbm_back_delete( Slapi_PBlock *pb )
 
 	slapi_sdn_init_dn_byref(&sdn,dn);
 
-	dblayer_txn_init(li,&txn);
-
 	/* The dblock serializes writes to the database,
 	 * which reduces deadlocking in the db code,
 	 * which means that we run faster.
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modify.c b/ldap/servers/slapd/back-ldbm/ldbm_modify.c
index 3e2b9e9..2b17eee 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_modify.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modify.c
@@ -225,6 +225,8 @@ ldbm_back_modify( Slapi_PBlock *pb )
 	is_ruv = operation_is_flag_set(operation, OP_FLAG_REPL_RUV);
 	inst = (ldbm_instance *) be->be_instance_info;
 
+	/* dblayer_txn_init needs to be called before "goto error_return" */
+	dblayer_txn_init(li,&txn);
 	if (NULL == addr)
 	{
 		goto error_return;
@@ -236,7 +238,6 @@ ldbm_back_modify( Slapi_PBlock *pb )
 		slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message);
 		goto error_return;
 	}
-	dblayer_txn_init(li,&txn);
 
 	/* The dblock serializes writes to the database,
 	 * which reduces deadlocking in the db code,
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
index b88d964..0dd8eb2 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
@@ -109,7 +109,8 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
 	char ebuf[BUFSIZ];
 	CSN *opcsn = NULL;
 
-    slapi_sdn_init(&dn_newdn);
+	/* sdn & parentsdn need to be initialized before "goto *_return" */
+	slapi_sdn_init(&dn_newdn);
 	slapi_sdn_init(&dn_parentdn);
 	
     slapi_pblock_get( pb, SLAPI_MODRDN_TARGET, &dn );
@@ -121,6 +122,9 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
 	slapi_pblock_get( pb, SLAPI_IS_REPLICATED_OPERATION, &is_replicated_operation );
 	is_fixup_operation = operation_is_flag_set(operation, OP_FLAG_REPL_FIXUP);
 
+	/* dblayer_txn_init needs to be called before "goto error_return" */
+	dblayer_txn_init(li,&txn);
+
 	if (pb->pb_conn)
 	{
 		slapi_log_error (SLAPI_LOG_TRACE, "ldbm_back_modrdn", "enter conn=%" NSPRIu64 " op=%d\n", pb->pb_conn->c_connid, operation->o_opid);
@@ -155,8 +159,6 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
 		return( -1 );
 	} 
 
-	dblayer_txn_init(li,&txn);
-
 	/* The dblock serializes writes to the database,
 	 * which reduces deadlocking in the db code,
 	 * which means that we run faster.
diff --git a/ldap/servers/slapd/plugin_syntax.c b/ldap/servers/slapd/plugin_syntax.c
index e2cc7fb..5565d58 100644
--- a/ldap/servers/slapd/plugin_syntax.c
+++ b/ldap/servers/slapd/plugin_syntax.c
@@ -324,6 +324,7 @@ slapi_dn_syntax_check(
 
 	/* See if we need to set the error text in the pblock. */
 	if (errp != &errtext[0]) {
+		/* SLAPI_PB_RESULT_TEXT duplicates the text in slapi_pblock_set */
 		slapi_pblock_set( pb, SLAPI_PB_RESULT_TEXT, errtext );
 	}
 
@@ -413,6 +414,7 @@ slapi_entry_syntax_check(
 
 	/* See if we need to set the error text in the pblock. */
 	if (errp != &errtext[0]) {
+		/* SLAPI_PB_RESULT_TEXT duplicates the text in slapi_pblock_set */
 		slapi_pblock_set( pb, SLAPI_PB_RESULT_TEXT, errtext );
 	}
 
@@ -499,6 +501,7 @@ slapi_mods_syntax_check(
 
 	/* See if we need to set the error text in the pblock. */
 	if (errp != &errtext[0]) {
+		/* SLAPI_PB_RESULT_TEXT duplicates the text in slapi_pblock_set */
 		slapi_pblock_set( pb, SLAPI_PB_RESULT_TEXT, errtext );
 	}
 




More information about the 389-commits mailing list