X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fentry.c;h=c0e81c54c876842a4f4d7da9c213e81c05d837c0;hb=0394c805abe5208f43255aff3b7c24a3337d2529;hp=fa30a1ee698cfc0760efed326af8f1163d15d52d;hpb=ae665d0d3dda589d0ed864f783daec403777b35a;p=openldap diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index fa30a1ee69..c0e81c54c8 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2008 The OpenLDAP Foundation. + * Copyright 1998-2009 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -725,13 +725,14 @@ ber_len_t entry_flatsize(Entry *e, int norm) */ int entry_encode(Entry *e, struct berval *bv) { - ber_len_t len, dnlen, ndnlen; - int i, nattrs, nvals; + ber_len_t len, dnlen, ndnlen, i; + int nattrs, nvals; Attribute *a; unsigned char *ptr; Debug( LDAP_DEBUG_TRACE, "=> entry_encode(0x%08lx): %s\n", (long) e->e_id, e->e_dn, 0 ); + dnlen = e->e_name.bv_len; ndnlen = e->e_nname.bv_len; @@ -782,6 +783,10 @@ int entry_encode(Entry *e, struct berval *bv) } } } + + Debug( LDAP_DEBUG_TRACE, "<= entry_encode(0x%08lx): %s\n", + (long) e->e_id, e->e_dn, 0 ); + return 0; } @@ -815,6 +820,35 @@ int entry_header(EntryHeader *eh) return LDAP_SUCCESS; } +int +entry_decode_dn( EntryHeader *eh, struct berval *dn, struct berval *ndn ) +{ + int i; + unsigned char *ptr = (unsigned char *)eh->bv.bv_val; + + assert( dn != NULL || ndn != NULL ); + + ptr = (unsigned char *)eh->data; + i = entry_getlen(&ptr); + if ( dn != NULL ) { + dn->bv_val = (char *) ptr; + dn->bv_len = i; + } + + if ( ndn != NULL ) { + ptr += i + 1; + i = entry_getlen(&ptr); + ndn->bv_val = (char *) ptr; + ndn->bv_len = i; + } + + Debug( LDAP_DEBUG_TRACE, + "entry_decode_dn: \"%s\"\n", + dn ? dn->bv_val : ndn->bv_val, 0, 0 ); + + return 0; +} + #ifdef SLAP_ZONE_ALLOC int entry_decode(EntryHeader *eh, Entry **e, void *ctx) #else @@ -931,19 +965,27 @@ int entry_decode(EntryHeader *eh, Entry **e) return 0; } -Entry *entry_dup( Entry *e ) +Entry * +entry_dup2( Entry *dest, Entry *source ) { - Entry *ret; + assert( dest != NULL ); + assert( source != NULL ); - ret = entry_alloc(); + assert( dest->e_private == NULL ); - 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; + 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 ret; + return dest; +} + +Entry * +entry_dup( Entry *e ) +{ + return entry_dup2( entry_alloc(), e ); } #if 1