From: Kurt Zeilenga Date: Fri, 26 Mar 1999 21:49:43 +0000 (+0000) Subject: Import derefDN crash fix from -devel. X-Git-Tag: OPENLDAP_REL_ENG_1_2_1~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1618e460b5da12f5f400e2f344b8904ec8e671b2;p=thirdparty%2Fopenldap.git Import derefDN crash fix from -devel. Resolves ITS#76, 83, 108. --- diff --git a/CHANGES b/CHANGES index c8fb4b5f7c..a7dfbc38b7 100644 --- a/CHANGES +++ b/CHANGES @@ -2,12 +2,14 @@ OpenLDAP Change Log Changes included in OpenLDAP 1.2.1 CVS Tag: OPENLDAP_REL_ENG_1_2 - Updated ctype and string generic headers. - Fix ctype 'unsigned char' bug + Updated ctype and string generic headers + Fixed ctype 'unsigned char' bug + Fixed slapd back-ldbm derefDN crash bug Build environment Added pthread '-mt' check for Solaris 2.x. Added mkdep CC_MKDEP_FLAGS support Fixed slapd 'make veryclean' + Fixed des_debug syntax error. Modified doc/man to generate pages during make all. Changes included in OpenLDAP 1.2 diff --git a/servers/slapd/back-ldbm/alias.c b/servers/slapd/back-ldbm/alias.c index a6e780143e..9c4f1adeac 100644 --- a/servers/slapd/back-ldbm/alias.c +++ b/servers/slapd/back-ldbm/alias.c @@ -31,7 +31,6 @@ Entry *derefAlias_r ( Backend *be, struct ldbminfo *li = (struct ldbminfo *) be->be_private; /* to free cache entries */ Attribute *a; int depth; - char **pastAliases; char *matched; Entry *origDN = e; @@ -278,15 +277,17 @@ char *derefDN ( Backend *be, * e.g. if we had started with dn = o=MyAliasedOrg,c=MyCountry the dn would match * and the above loop complete but we would still be left with an aliased DN. */ - if ( (eNew = dn2entry_r( be, newDN, &matched )) != NULL) { - if ((eDeref = derefAlias_r( be, conn, op, eNew )) != NULL) { - free (newDN); - newDN = ch_strdup (eDeref->e_dn); + if (newDN != NULL) { + if ( (eNew = dn2entry_r( be, newDN, &matched )) != NULL) { + if ((eDeref = derefAlias_r( be, conn, op, eNew )) != NULL) { + free (newDN); + newDN = ch_strdup (eDeref->e_dn); + /* free reader lock */ + cache_return_entry_r(&li->li_cache, eDeref); + } /* free reader lock */ - cache_return_entry_r(&li->li_cache, eDeref); + cache_return_entry_r(&li->li_cache, eNew); } - /* free reader lock */ - cache_return_entry_r(&li->li_cache, eNew); } if (matched != NULL) free(matched);