From 61476e7a3c9a4ecef2bcf1cbe9fdca3575db7161 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Mon, 30 Nov 1998 23:14:31 +0000 Subject: [PATCH] Import ldbm derefDN suggested fix from -devel. --- servers/slapd/back-ldbm/alias.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/servers/slapd/back-ldbm/alias.c b/servers/slapd/back-ldbm/alias.c index e2a8e7ef07..e9ca520019 100644 --- a/servers/slapd/back-ldbm/alias.c +++ b/servers/slapd/back-ldbm/alias.c @@ -114,7 +114,7 @@ char *derefDN ( Backend *be, struct ldbminfo *li = (struct ldbminfo *) be->be_private; char *matched; char *newDN = NULL; - int depth; + int depth, i; Entry *eMatched; Entry *eDeref; Entry *eNew; @@ -132,9 +132,6 @@ char *derefDN ( Backend *be, (depth < be->be_maxDerefDepth); ++depth ) { - /* free reader lock */ - cache_return_entry_r(&li->li_cache, eMatched); - if ((matched != NULL) && *matched) { char *submatch; @@ -165,7 +162,10 @@ char *derefDN ( Backend *be, Debug( LDAP_DEBUG_TRACE, "<= l&g we have %s vs %s \n", matched, eNew->e_dn, 0 ); - if (!strcasecmp (matched, eNew->e_dn)) { + i = strcasecmp (matched, eNew->e_dn); + /* free reader lock */ + cache_return_entry_r(&li->li_cache, eNew); + if (! i) { /* newDN same as old so not an alias, no need to go further */ free (newDN); newDN = NULL; @@ -188,9 +188,6 @@ char *derefDN ( Backend *be, free (matched); matched = NULL; free (remainder); - - /* free reader lock */ - cache_return_entry_r(&li->li_cache, eNew); } /* free reader lock */ cache_return_entry_r(&li->li_cache, eMatched); @@ -205,6 +202,9 @@ char *derefDN ( Backend *be, } } + /* free reader lock */ + cache_return_entry_r(&li->li_cache, eMatched); + /* * the final part of the DN might be an alias * so try to dereference it. -- 2.47.2