]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapi/slapi_utils.c
Modifications must be copied before calling slap_mods_check() because
[openldap] / servers / slapd / slapi / slapi_utils.c
index f1e43aab5d43c25c239c01758a65b6252ead2a1b..1bc731129214ed72a11406509a3e1f6325407085 100644 (file)
@@ -170,26 +170,17 @@ Slapi_Entry *
 slapi_entry_dup( Slapi_Entry *e ) 
 {
 #ifdef LDAP_SLAPI
-       char            *tmp = NULL;
-       Slapi_Entry     *tmpEnt;
-       int             len = 0;
-       
-       tmp = slapi_entry2str( e, &len );
-       if ( tmp == NULL ) {
-               return (Slapi_Entry *)NULL;
-       }
+       Slapi_Entry *ret;
 
-       tmpEnt = (Slapi_Entry *)str2entry( tmp );
-       if ( tmpEnt == NULL ) { 
-               slapi_ch_free( (void **)&tmp );
-               return (Slapi_Entry *)NULL;
-       }
-       
-       if (tmp != NULL) {
-               slapi_ch_free( (void **)&tmp );
-       }
+       ret = (Slapi_Entry *)slapi_ch_calloc( 1, sizeof(*ret) );
 
-       return tmpEnt;
+       ret->e_id = e->e_id;
+       ber_dupbv( &ret->e_name, &e->e_name );
+       ber_dupbv( &ret->e_nname, &e->e_nname );
+       ret->e_attrs = attrs_dup( e->e_attrs );
+       ret->e_ocflags = e->e_ocflags;
+       ber_dupbv( &ret->e_bv, &e->e_bv );
+       ret->e_private = NULL;
 #else /* LDAP_SLAPI */
        return NULL;
 #endif /* LDAP_SLAPI */