]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Import derefDN crash fix from -devel.
authorKurt Zeilenga <kurt@openldap.org>
Fri, 26 Mar 1999 21:49:43 +0000 (21:49 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 26 Mar 1999 21:49:43 +0000 (21:49 +0000)
Resolves ITS#76, 83, 108.

CHANGES
servers/slapd/back-ldbm/alias.c

diff --git a/CHANGES b/CHANGES
index c8fb4b5f7c24baafda134177dd09e71b2e63b5e2..a7dfbc38b76014e609ac6eb40359dbf0018c834e 100644 (file)
--- 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
index a6e780143eb2bfc9f08c07f731e690699dfd430d..9c4f1adeacb014b5ce9855cd6964f824ab9eaeb8 100644 (file)
@@ -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);