From e0a6b69245d9ec634b506e2a7d28ace91198812a Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Thu, 13 Aug 2009 02:33:18 +0000 Subject: [PATCH] ITS#6172 --- CHANGES | 1 + servers/slapd/back-sql/entry-id.c | 10 +++------- servers/slapd/entry.c | 17 +++++++++++------ servers/slapd/proto-slap.h | 1 + 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/CHANGES b/CHANGES index 5d3f951d04..b27502c447 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ OpenLDAP 2.4.18 Engineering Fixed slapd-ndb startup (ITS#6203) Fixed slapd-relay various issues (ITS#6133) Fixed slapd-relay response/cleanup callback mismatch (ITS#6154) + Fixed slapd-sql with baseObject query (ITS#6172) Fixed slapd-sql with empty attribute (ITS#6163) Added slapo-pcache olcProxyCacheOffline (ITS#6152) Fixed slapo-unique filter matching (ITS#6077) 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)); -- 2.39.2