]> git.sur5r.net Git - openldap/commitdiff
Added a new function: build_new_dn(), which builds new dn for entries
authorJuan Gomez <gomez@openldap.org>
Wed, 24 Mar 1999 20:26:43 +0000 (20:26 +0000)
committerJuan Gomez <gomez@openldap.org>
Wed, 24 Mar 1999 20:26:43 +0000 (20:26 +0000)
being renamed through modrdn/moddn. This in preparation to add support
for MODDN v3.

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

index 57d8788ecd72d6d4b7467bcf871de64964f906f8..6c06f23ca97949983e338b2147a24e7b43e52f58 100644 (file)
@@ -345,7 +345,8 @@ dn_upcase( char *dn )
 
 
 /*
- * get_next_substring(), rdn_attr_type(), and rdn_attr_value()
+ * get_next_substring(), rdn_attr_type(), rdn_attr_value(), and
+ * build_new_dn().
  * 
  * Copyright 1999, Juan C. Gomez, All rights reserved.
  * This software is not subject to any license of Silicon Graphics 
@@ -440,3 +441,51 @@ rdn_attr_value( char * rdn )
        return NULL;
 
 }/* char * rdn_attr_value() */
+
+
+/* build_new_dn:
+ *
+ * Used by ldbm/bdb2_back_modrdn to create the new dn of entries being
+ * renamed.
+ *
+ * new_dn = parent (p_dn)  + separator(s) + rdn (newrdn) + null.
+ */
+
+void
+build_new_dn( char ** new_dn, char *e_dn, char * p_dn, char * newrdn )
+{
+    
+    *new_dn = (char *) ch_malloc( strlen( p_dn ) + strlen( newrdn ) + 3 );
+
+    if ( dn_type( e_dn ) == DN_X500 ) {
+
+       strcpy( *new_dn, newrdn );
+       strcat( *new_dn, ", " );
+       strcat( *new_dn, p_dn );
+
+    } else {
+
+       char    *s;
+       char    sep[2];
+
+       strcpy( *new_dn, newrdn );
+       s = strchr( newrdn, '\0' );
+       s--;
+
+       if ( (*s != '.') && (*s != '@') ) {
+
+           if ( (s = strpbrk( e_dn, ".@" )) != NULL ) {
+
+               sep[0] = *s;
+               sep[1] = '\0';
+               strcat( *new_dn, sep );
+
+           }/* if ( (s = strpbrk( dn, ".@" )) != NULL ) */
+
+       }/* if ( *s != '.' && *s != '@' ) */
+
+       strcat( *new_dn, p_dn );
+
+    }/* if ( dn_type( e_dn ) == DN_X500 ) {}else */
+    
+}/* void build_new_dn() */
index e513159139c472fb1fd492b2b67a45de933e43e5..b4baf447f8a984a4a1bef585fb51ffedf0b75a1b 100644 (file)
@@ -139,7 +139,8 @@ int dn_type LDAP_P(( char *dn ));
 char * dn_upcase LDAP_P(( char *dn ));
 char * rdn_attr_value LDAP_P(( char * rdn ));
 char * rdn_attr_type LDAP_P(( char * rdn ));
-
+void build_new_dn LDAP_P(( char ** new_dn, char *e_dn, char * p_dn,
+                          char * newrdn ));
 /*
  * entry.c
  */