diff --git a/servers/slapd/back-ldbm/alias.c b/servers/slapd/back-ldbm/alias.c index b7fbcf5328685ccdedb171207c453f2887322303..5285087078d6caf4c3edca70efa11e1fd9def1a2 100644 --- a/servers/slapd/back-ldbm/alias.c +++ b/servers/slapd/back-ldbm/alias.c @@ -112,8 +112,8 @@ char *derefDN ( Backend *be, ) { struct ldbminfo *li = (struct ldbminfo *) be->be_private; - char *matched; - char *newDN; + char *matched = NULL; + char *newDN = NULL; int depth; Entry *eMatched; Entry *eDeref; @@ -156,6 +156,7 @@ char *derefDN ( Backend *be, if ((eNew = derefAlias_r( be, conn, op, eMatched )) == NULL) { free (matched); free (newDN); + newDN = NULL; free (remainder); break; /* no associated entry, dont deref */ } @@ -166,6 +167,7 @@ char *derefDN ( Backend *be, if (!strcasecmp (matched, eNew->e_dn)) { /* newDN same as old so not an alias, no need to go further */ free (newDN); + newDN = NULL; free (matched); free (remainder); break; @@ -226,9 +228,12 @@ char *derefDN ( Backend *be, send_ldap_result( conn, op, LDAP_ALIAS_PROBLEM, "", "Maximum alias dereference depth exceeded for base" ); } + + if (newDN == NULL) { + newDN = strdup ( dn ); + } Debug( LDAP_DEBUG_TRACE, "<= returning deref DN of %s\n", newDN, 0, 0 ); - free(matched); return newDN;