}
/*
- * 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 )
{
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(
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;
}
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 ));