From: Pierangelo Masarati Date: Mon, 3 Aug 2009 13:18:05 +0000 (+0000) Subject: add entry_dup_to(); use it to address ITS#6172 (thanks to Michael Karcher) X-Git-Tag: ACLCHECK_0~368 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=e153f41e907c79e37ad9fdb33e85a39bf9b6d084;p=openldap add entry_dup_to(); use it to address ITS#6172 (thanks to Michael Karcher) --- diff --git a/servers/slapd/back-sql/entry-id.c b/servers/slapd/back-sql/entry-id.c index e1351b9967..26f6ced56f 100644 --- a/servers/slapd/back-sql/entry-id.c +++ b/servers/slapd/back-sql/entry-id.c @@ -934,15 +934,11 @@ backsql_id2entry( backsql_srch_info *bsi, backsql_entryID *eid ) memset( bsi->bsi_e, 0, sizeof( Entry ) ); if ( bi->sql_baseObject && BACKSQL_IS_BASEOBJECT_ID( &eid->eid_id ) ) { - Entry *e; - - e = entry_dup( bi->sql_baseObject ); - if ( e == NULL ) { - return LDAP_NO_MEMORY; + rc = entry_dup_to( bi->sql_baseObject, bsi->bsi_e ); + if ( rc != LDAP_SUCCESS ) { + return rc; } - *bsi->bsi_e = *e; - free( e ); goto done; } diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index ff2b3574a8..fcf6cb02a4 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -936,17 +936,22 @@ int entry_decode(EntryHeader *eh, Entry **e) return 0; } +int entry_dup_to( Entry *source, Entry *dest ) +{ + dest->e_id = source->e_id; + ber_dupbv( &dest->e_name, &source->e_name ); + ber_dupbv( &dest->e_nname, &source->e_nname ); + dest->e_attrs = attrs_dup( source->e_attrs ); + dest->e_ocflags = source->e_ocflags; + return LDAP_SUCCESS; +} + Entry *entry_dup( Entry *e ) { Entry *ret; ret = entry_alloc(); - - 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; + entry_dup_to(e, ret); return ret; } diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 6e962d2ebb..f9cb9e9ac7 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -991,6 +991,7 @@ LDAP_SLAPD_F (int) entry_cmp LDAP_P(( Entry *a, Entry *b )); LDAP_SLAPD_F (int) entry_dn_cmp LDAP_P(( const void *v_a, const void *v_b )); LDAP_SLAPD_F (int) entry_id_cmp LDAP_P(( const void *v_a, const void *v_b )); LDAP_SLAPD_F (Entry *) entry_dup LDAP_P(( Entry *e )); +LDAP_SLAPD_F (int) entry_dup_to LDAP_P(( Entry *src, Entry *dest )); LDAP_SLAPD_F (Entry *) entry_dup_bv LDAP_P(( Entry *e )); LDAP_SLAPD_F (Entry *) entry_alloc LDAP_P((void)); LDAP_SLAPD_F (int) entry_prealloc LDAP_P((int num));