]> git.sur5r.net Git - openldap/commitdiff
Turned dn_parent into dn_parent1, returning in-place pointer. Made
authorHoward Chu <hyc@openldap.org>
Sat, 8 Dec 2001 08:41:39 +0000 (08:41 +0000)
committerHoward Chu <hyc@openldap.org>
Sat, 8 Dec 2001 08:41:39 +0000 (08:41 +0000)
dn_parent return ch_strdup of dn_parent1 for compatibility.

servers/slapd/dn.c
servers/slapd/proto-slap.h

index 07f5fbe2007abcb02ce2879bf278f3b6886f977c..c88eb3c49b08dd622fb2d092db17dd34f303a60b 100644 (file)
@@ -313,11 +313,11 @@ dn_match( const char *val, const char *asserted )
 }
 
 /*
- * dn_parent - return a copy of the dn of dn's parent
+ * dn_parent1 - return the dn's parent, in-place
  */
 
 char *
-dn_parent(
+dn_parent1(
        Backend *be,
        const char      *dn )
 {
@@ -361,12 +361,28 @@ dn_parent(
                        if ( *s == '"' ) {
                                inquote = 1;
                        } else if ( DN_SEPARATOR( *s ) ) {
-                               return ch_strdup( &s[1] );
+                               return (char *)s + 1;
                        }
                }
        }
 
-       return ch_strdup( "" );
+       return "";
+}
+
+/*
+ * dn_parent - return a copy of the dn of dn's parent
+ */
+
+char *
+dn_parent(
+       Backend *be,
+       const char      *dn
+)
+{
+       dn = dn_parent1( be, dn );
+       if( dn != NULL )
+               dn = ch_strdup( dn );
+       return (char *)dn;
 }
 
 char * dn_rdn(
@@ -428,20 +444,14 @@ char **dn_subtree(
        Backend *be,
        const char      *dn )
 {
-       char *child, *parent;
        char **subtree = NULL;
        
-       child = ch_strdup( dn );
-
        do {
-               charray_add( &subtree, child );
-
-               parent = dn_parent( be, child );
+               charray_add( &subtree, dn );
 
-               free( child );
+               dn = dn_parent1( be, dn );
 
-               child = parent;
-       } while ( child != NULL );
+       } while ( dn != NULL );
 
        return subtree;
 }
index 8b3539f7454c7175baf84ce8212c69a257311d81..c1342c65b17d8ebd4c2bf45a47da081a4d211319 100644 (file)
@@ -319,6 +319,7 @@ LDAP_SLAPD_F (char *) dn_validate LDAP_P(( char *dn ));
 LDAP_SLAPD_F (char *) dn_normalize LDAP_P(( char *dn ));
 LDAP_SLAPD_F (int) dn_match LDAP_P(( const char *val, const char *asserted ));
 LDAP_SLAPD_F (char *) dn_parent LDAP_P(( Backend *be, const char *dn ));
+LDAP_SLAPD_F (char *) dn_parent1 LDAP_P(( Backend *be, const char *dn ));
 LDAP_SLAPD_F (char **) dn_subtree LDAP_P(( Backend *be, const char *dn ));
 LDAP_SLAPD_F (char *) dn_rdn LDAP_P(( Backend *be, const char *dn ));
 LDAP_SLAPD_F (int) dn_issuffix LDAP_P(( const char *dn, const char *suffix ));