summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
diff options
context:
space:
mode:
authorNoriko Hosoi <nhosoi@redhat.com>2010-03-11 16:51:26 -0800
committerNoriko Hosoi <nhosoi@redhat.com>2010-03-11 16:51:26 -0800
commit2b39f92cf4bd22e2091c35b0c92e945423b311ef (patch)
tree3b1d5835f04bc942f4cf10245b6da428bcec81b9 /ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
parentdc2f7d061279089651fb56b57183496cf6926fc7 (diff)
downloadds-2b39f92cf4bd22e2091c35b0c92e945423b311ef.tar.gz
ds-2b39f92cf4bd22e2091c35b0c92e945423b311ef.tar.xz
ds-2b39f92cf4bd22e2091c35b0c92e945423b311ef.zip
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.
Diffstat (limited to 'ldap/servers/slapd/back-ldbm/ldbm_modrdn.c')
-rw-r--r--ldap/servers/slapd/back-ldbm/ldbm_modrdn.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
index 5e2b1851..a3f19297 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
@@ -109,6 +109,7 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
char ebuf[BUFSIZ];
CSN *opcsn = NULL;
+ /* sdn & parentsdn need to be initialized before "goto *_return" */
slapi_sdn_init(&dn_newdn);
slapi_sdn_init(&dn_parentdn);
@@ -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);
@@ -159,8 +163,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.