From b2ec7af3310845f2ceadb23475b808a62bd92a6d Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Mon, 23 Nov 1998 20:08:25 +0000 Subject: [PATCH] Changed dn2entry to always returned a modified matched. Modified users of this code to free matched if set. --- servers/slapd/back-ldbm/add.c | 5 +---- servers/slapd/back-ldbm/alias.c | 12 +++++++----- servers/slapd/back-ldbm/bind.c | 2 +- servers/slapd/back-ldbm/compare.c | 2 ++ servers/slapd/back-ldbm/delete.c | 11 +++++++---- servers/slapd/back-ldbm/dn2id.c | 18 +++--------------- servers/slapd/back-ldbm/group.c | 3 ++- servers/slapd/back-ldbm/modify.c | 2 +- servers/slapd/back-ldbm/search.c | 2 +- 9 files changed, 25 insertions(+), 32 deletions(-) diff --git a/servers/slapd/back-ldbm/add.c b/servers/slapd/back-ldbm/add.c index 75dd12b1b2..77c92d220a 100644 --- a/servers/slapd/back-ldbm/add.c +++ b/servers/slapd/back-ldbm/add.c @@ -82,7 +82,6 @@ ldbm_back_add( if ( (pdn = dn_parent( be, dn )) != NULL ) { char *matched; /* no parent */ - matched = NULL; /* get entry with reader lock */ if ( (p = dn2entry_r( be, pdn, &matched )) == NULL ) { @@ -90,6 +89,7 @@ ldbm_back_add( 0, 0 ); send_ldap_result( conn, op, LDAP_NO_SUCH_OBJECT, matched, "" ); + if ( matched != NULL ) { free( matched ); } @@ -97,9 +97,6 @@ ldbm_back_add( rc = -1; goto return_results; } - if ( matched != NULL ) { - free( matched ); - } if ( ! access_allowed( be, conn, op, p, "children", NULL, op->o_dn, ACL_WRITE ) ) { diff --git a/servers/slapd/back-ldbm/alias.c b/servers/slapd/back-ldbm/alias.c index 5285087078..92eca6c6df 100644 --- a/servers/slapd/back-ldbm/alias.c +++ b/servers/slapd/back-ldbm/alias.c @@ -112,7 +112,7 @@ char *derefDN ( Backend *be, ) { struct ldbminfo *li = (struct ldbminfo *) be->be_private; - char *matched = NULL; + char *matched; char *newDN = NULL; int depth; Entry *eMatched; @@ -135,7 +135,7 @@ char *derefDN ( Backend *be, /* free reader lock */ cache_return_entry_r(&li->li_cache, eMatched); - if (*matched) { + if ((matched != NULL) && *matched) { char *submatch; /* @@ -155,6 +155,7 @@ char *derefDN ( Backend *be, if ((eNew = derefAlias_r( be, conn, op, eMatched )) == NULL) { free (matched); + matched = NULL; free (newDN); newDN = NULL; free (remainder); @@ -169,6 +170,7 @@ char *derefDN ( Backend *be, free (newDN); newDN = NULL; free (matched); + matched = NULL; free (remainder); break; } @@ -178,13 +180,13 @@ char *derefDN ( Backend *be, * the new dn together */ free (newDN); - free (matched); - newDN = ch_malloc (strlen(eMatched->e_dn) + rlen + 1); strcpy (newDN, remainder); strcat (newDN, eMatched->e_dn); Debug( LDAP_DEBUG_TRACE, "<= expanded to %s\n", newDN, 0, 0 ); + free (matched); + matched = NULL; free (remainder); /* free reader lock */ @@ -234,7 +236,7 @@ char *derefDN ( Backend *be, } Debug( LDAP_DEBUG_TRACE, "<= returning deref DN of %s\n", newDN, 0, 0 ); - free(matched); + if (matched != NULL) free(matched); return newDN; } diff --git a/servers/slapd/back-ldbm/bind.c b/servers/slapd/back-ldbm/bind.c index 591e488c9c..cb59ab0349 100644 --- a/servers/slapd/back-ldbm/bind.c +++ b/servers/slapd/back-ldbm/bind.c @@ -126,7 +126,7 @@ ldbm_back_bind( Entry *e; Attribute *a; int rc; - char *matched = NULL; + char *matched; #ifdef HAVE_KERBEROS char krbname[MAX_K_NAME_SZ + 1]; AUTH_DAT ad; diff --git a/servers/slapd/back-ldbm/compare.c b/servers/slapd/back-ldbm/compare.c index d17c5da88a..29f654751c 100644 --- a/servers/slapd/back-ldbm/compare.c +++ b/servers/slapd/back-ldbm/compare.c @@ -29,6 +29,8 @@ ldbm_back_compare( /* get entry with reader lock */ if ( (e = dn2entry_r( be, dn, &matched )) == NULL ) { send_ldap_result( conn, op, LDAP_NO_SUCH_OBJECT, matched, "" ); + + if(matched == NULL) free(matched); return( 1 ); } diff --git a/servers/slapd/back-ldbm/delete.c b/servers/slapd/back-ldbm/delete.c index 7e0008ba80..64723229f9 100644 --- a/servers/slapd/back-ldbm/delete.c +++ b/servers/slapd/back-ldbm/delete.c @@ -20,7 +20,7 @@ ldbm_back_delete( ) { struct ldbminfo *li = (struct ldbminfo *) be->be_private; - char *matched = NULL; + char *matched; char *pdn = NULL; Entry *e, *p; @@ -66,7 +66,6 @@ ldbm_back_delete( /* XXX delete from parent's id2children entry XXX */ pdn = dn_parent( be, dn ); - matched = NULL; p = dn2entry_r( be, pdn, &matched ); if ( id2children_remove( be, p, e ) != 0 ) { send_ldap_result( conn, op, LDAP_OPERATIONS_ERROR, "","" ); @@ -93,9 +92,11 @@ ldbm_back_delete( /* free entry and writer lock */ cache_return_entry_w( &li->li_cache, e ); - if ( p ) + if ( p != NULL ) cache_return_entry_r( &li->li_cache, p ); + if ( matched != NULL ) free(matched); + send_ldap_result( conn, op, LDAP_SUCCESS, "", "" ); return( 0 ); @@ -104,8 +105,10 @@ error_return:; /* free entry and writer lock */ cache_return_entry_w( &li->li_cache, e ); - if( p ) + if( p != NULL ) cache_return_entry_r( &li->li_cache, p ); + if ( matched != NULL ) free(matched); + return( -1 ); } diff --git a/servers/slapd/back-ldbm/dn2id.c b/servers/slapd/back-ldbm/dn2id.c index 593107cc2c..ae0f62d8dd 100644 --- a/servers/slapd/back-ldbm/dn2id.c +++ b/servers/slapd/back-ldbm/dn2id.c @@ -166,18 +166,19 @@ dn2entry( { struct ldbminfo *li = (struct ldbminfo *) be->be_private; ID id; - Entry *e; + Entry *e = NULL; char *pdn; Debug(LDAP_DEBUG_TRACE, "dn2entry_%s: dn: %s\n", rw ? "w" : "r", dn, 0); + *matched = NULL; + if ( (id = dn2id( be, dn )) != NOID && (e = id2entry( be, id, rw )) != NULL ) { return( e ); } - *matched = NULL; /* stop when we get to the suffix */ if ( be_issuffix( be, dn ) ) { @@ -199,19 +200,6 @@ dn2entry( return( NULL ); } -#if 0 - if (e->e_state == ENTRY_STATE_DELETED) - continue; - - if (strcmp(dn, e->e_dn) != 0) - continue; - - /* return locked entry entry */ - return(e); - } -} -#endif - Entry * dn2entry_r( Backend *be, diff --git a/servers/slapd/back-ldbm/group.c b/servers/slapd/back-ldbm/group.c index 7def923a4d..a889041c25 100644 --- a/servers/slapd/back-ldbm/group.c +++ b/servers/slapd/back-ldbm/group.c @@ -45,7 +45,8 @@ ldbm_back_group( free(matched); return( 1 ); } - Debug( LDAP_DEBUG_ARGS, "=> ldbm_back_group: found bdn: %s matched: %s\n", bdn, (matched ? matched : ""), 0 ); + + Debug( LDAP_DEBUG_ARGS, "=> ldbm_back_group: found bdn: %s\n", bdn, 0, 0 ); /* check for deleted */ diff --git a/servers/slapd/back-ldbm/modify.c b/servers/slapd/back-ldbm/modify.c index 7b0d141d0f..2f74c108f1 100644 --- a/servers/slapd/back-ldbm/modify.c +++ b/servers/slapd/back-ldbm/modify.c @@ -25,7 +25,7 @@ ldbm_back_modify( ) { struct ldbminfo *li = (struct ldbminfo *) be->be_private; - char *matched = NULL; + char *matched; Entry *e; int i, err; LDAPMod *mod; diff --git a/servers/slapd/back-ldbm/search.c b/servers/slapd/back-ldbm/search.c index 4b25fe66cd..65d78af635 100644 --- a/servers/slapd/back-ldbm/search.c +++ b/servers/slapd/back-ldbm/search.c @@ -49,7 +49,7 @@ ldbm_back_search( ID id; Entry *e; Attribute *ref; - char *matched = NULL; + char *matched; int rmaxsize, nrefs; char *rbuf, *rcur, *r; int nentries = 0; -- 2.39.5