mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-28 02:29:34 -05:00
fixes ITS#1261 (abort on modrdn with new dn already existing)
This commit is contained in:
parent
5d34881f45
commit
8edccd2554
1 changed files with 10 additions and 6 deletions
|
|
@ -50,8 +50,11 @@ ldbm_back_modrdn(
|
|||
char *new_dn = NULL, *new_ndn = NULL;
|
||||
Entry *e, *p = NULL;
|
||||
Entry *matched;
|
||||
int rootlock = 0;
|
||||
int rc = -1, rc_id = 0;
|
||||
int rootlock = 0;
|
||||
#define CAN_ROLLBACK -1
|
||||
#define MUST_DESTROY 1
|
||||
int rc = CAN_ROLLBACK;
|
||||
int rc_id = 0;
|
||||
ID id = NOID;
|
||||
const char *text = NULL;
|
||||
char textbuf[SLAP_TEXT_BUFLEN];
|
||||
|
|
@ -626,7 +629,7 @@ ldbm_back_modrdn(
|
|||
|
||||
goto return_results;
|
||||
}
|
||||
rc = -1;
|
||||
rc = MUST_DESTROY;
|
||||
|
||||
(void) cache_update_entry( &li->li_cache, e );
|
||||
|
||||
|
|
@ -685,9 +688,10 @@ return_results:
|
|||
|
||||
/* free entry and writer lock */
|
||||
cache_return_entry_w( &li->li_cache, e );
|
||||
if ( rc ) {
|
||||
/* if rc != 0 the entry is uncached and its private data
|
||||
* is destroyed; the entry must be freed */
|
||||
if ( rc == MUST_DESTROY ) {
|
||||
/* if rc == MUST_DESTROY the entry is uncached
|
||||
* and its private data is destroyed;
|
||||
* the entry must be freed */
|
||||
entry_free( e );
|
||||
}
|
||||
return( rc );
|
||||
|
|
|
|||
Loading…
Reference in a new issue