From d2256a62be2ecf98df0d437455132bdd3538c403 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Tue, 17 Jun 2014 17:58:54 -0400 Subject: [PATCH] Ticket 47817 - The error result text message should be obtained just prior to sending result Bug Description: We do not get pblock result message after the betxn postop plugins are called. If a betxn plugin modified the ldap result message, then when the backend returns the results it does an invalid read on the old pointer of the old result message. Fix Description: Get the result message after we call the betxn postop plugins. https://fedorahosted.org/389/ticket/47817 jenkins: passed Reviewed by: ? --- ldap/servers/slapd/back-ldbm/ldbm_add.c | 6 ++++-- ldap/servers/slapd/back-ldbm/ldbm_delete.c | 3 ++- ldap/servers/slapd/back-ldbm/ldbm_modify.c | 1 + ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 1 + 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ldap/servers/slapd/back-ldbm/ldbm_add.c b/ldap/servers/slapd/back-ldbm/ldbm_add.c index 181c173..63fccb1 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_add.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_add.c @@ -94,8 +94,8 @@ ldbm_back_add( Slapi_PBlock *pb ) char *msg; int managedsait; int ldap_result_code = LDAP_SUCCESS; - char *ldap_result_message= NULL; - char *ldap_result_matcheddn= NULL; + char *ldap_result_message = NULL; + char *ldap_result_matcheddn = NULL; int retry_count = 0; int disk_full = 0; modify_context parent_modify_c = {0}; @@ -1227,6 +1227,8 @@ diskfull_return: /* tell frontend not to free this entry */ slapi_pblock_set(pb, SLAPI_ADD_ENTRY, NULL); } + + slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message); } /* Release SERIAL LOCK */ diff --git a/ldap/servers/slapd/back-ldbm/ldbm_delete.c b/ldap/servers/slapd/back-ldbm/ldbm_delete.c index 915ea08..39fe706 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_delete.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_delete.c @@ -75,7 +75,7 @@ ldbm_back_delete( Slapi_PBlock *pb ) modify_context ruv_c = {0}; int rc = 0; int ldap_result_code= LDAP_SUCCESS; - char *ldap_result_message= NULL; + char *ldap_result_message = NULL; Slapi_DN *sdnp = NULL; char *e_uniqueid = NULL; Slapi_DN nscpEntrySDN; @@ -1331,6 +1331,7 @@ error_return: if (!opreturn) { slapi_pblock_set( pb, SLAPI_PLUGIN_OPRETURN, ldap_result_code ? &ldap_result_code : &retval ); } + slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message); } /* Release SERIAL LOCK */ diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modify.c b/ldap/servers/slapd/back-ldbm/ldbm_modify.c index d2dc983..8791b45 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_modify.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_modify.c @@ -901,6 +901,7 @@ error_return: LDAPDebug1Arg( LDAP_DEBUG_TRACE, "SLAPI_PLUGIN_BE_TXN_POST_MODIFY_FN plugin " "returned error code %d\n", retval ); slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code); + slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message); slapi_pblock_get(pb, SLAPI_PLUGIN_OPRETURN, &opreturn); if (!opreturn) { slapi_pblock_set(pb, SLAPI_PLUGIN_OPRETURN, ldap_result_code ? &ldap_result_code : &retval); diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c index 472c2f7..09a1fea 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c @@ -1430,6 +1430,7 @@ error_return: if (!opreturn) { slapi_pblock_set( pb, SLAPI_PLUGIN_OPRETURN, ldap_result_code ? &ldap_result_code : &retval ); } + slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message); } /* Release SERIAL LOCK */ -- 1.9.3