X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fentry.c;h=a150097dae6754c7d7dcdd55723427bc4b6188be;hb=0f30fb0d8f0adbbb7b41fd455c57aa56d64c9853;hp=7d553846ce257a519f425fc6c3ea0d6d8faf914e;hpb=c05de965b57d4c34748f710926b5017e4a4c0176;p=openldap diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index 7d553846ce..a150097dae 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -21,6 +21,11 @@ static unsigned char *ebuf; /* buf returned by entry2str */ static unsigned char *ecur; /* pointer to end of currently used ebuf */ static int emaxsize;/* max size of ebuf */ +/* + * Empty root entry + */ +const Entry slap_entry_root = { NOID, "", "", NULL, NULL }; + int entry_destroy(void) { free( ebuf ); @@ -392,7 +397,7 @@ entry_id_cmp( Entry *e1, Entry *e2 ) int entry_encode(Entry *e, struct berval **bv) { int siz = sizeof(Entry); - int len, dnlen; + int len, dnlen, ndnlen; int i, j; Entry *f; Attribute *a, *b; @@ -400,8 +405,6 @@ int entry_encode(Entry *e, struct berval **bv) char *ptr, *base, *data; *bv = ch_malloc(sizeof(struct berval)); - /* Compress any white space in the DN */ - dn_validate(e->e_dn); #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, "entry_encode: id: 0x%08lx \"%s\"\n", @@ -411,8 +414,8 @@ int entry_encode(Entry *e, struct berval **bv) (long) e->e_id, e->e_dn, 0 ); #endif dnlen = strlen(e->e_dn); - /* The dn and ndn are always the same length */ - len = dnlen + dnlen + 2; /* two trailing NUL bytes */ + ndnlen = strlen(e->e_ndn); + len = dnlen + ndnlen + 2; /* two trailing NUL bytes */ for (a=e->e_attrs; a; a=a->a_next) { /* For AttributeDesc, we only store the attr name */ siz += sizeof(Attribute); @@ -436,8 +439,8 @@ int entry_encode(Entry *e, struct berval **bv) ptr += dnlen; *ptr++ = '\0'; f->e_ndn = (char *)(ptr-base); - memcpy(ptr, e->e_ndn, dnlen); - ptr += dnlen; + memcpy(ptr, e->e_ndn, ndnlen); + ptr += ndnlen; *ptr++ = '\0'; f->e_attrs = e->e_attrs ? (Attribute *)sizeof(Entry) : NULL; f->e_private = NULL;