add entry_dup_to(); use it to address ITS#6172 (thanks to Michael Karcher)

This commit is contained in:
Pierangelo Masarati 2009-08-03 13:18:05 +00:00
parent 5139241ade
commit e153f41e90
3 changed files with 15 additions and 13 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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));