[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