]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/entry.c
Fix previous commit
[openldap] / servers / slapd / entry.c
index 1ce0a4fbc099dfd39421bab886890ccc4ff5d740..7c01ac87a2f6b2f445340c1aac4885d775286f63 100644 (file)
@@ -24,7 +24,7 @@ static int            emaxsize;/* max size of ebuf                     */
 /*
  * Empty root entry
  */
-const Entry slap_entry_root = { NOID, { 0, "" }, { 0, "" }, NULL, NULL };
+const Entry slap_entry_root = { NOID, { 0, "" }, { 0, "" }, NULL, 0, { 0, "" }, NULL };
 
 int entry_destroy(void)
 {
@@ -71,7 +71,7 @@ str2entry( char *s )
 #endif
 
        /* initialize reader/writer lock */
-       e = (Entry *) ch_malloc( sizeof(Entry) );
+       e = (Entry *) ch_calloc( 1, sizeof(Entry) );
 
        if( e == NULL ) {
 #ifdef NEW_LOGGING
@@ -87,12 +87,6 @@ str2entry( char *s )
 
        /* initialize entry */
        e->e_id = NOID;
-       e->e_name.bv_val = NULL;
-       e->e_name.bv_len = 0;
-       e->e_nname.bv_val = NULL;
-       e->e_nname.bv_len = 0;
-       e->e_attrs = NULL;
-       e->e_private = NULL;
 
        /* dn + attributes */
        vals[1].bv_val = NULL;
@@ -369,6 +363,11 @@ entry_free( Entry *e )
                e->e_ndn = NULL;
        }
 
+       if ( e->e_bv.bv_val != NULL ) {
+               free( e->e_bv.bv_val );
+               e->e_bv.bv_val = NULL;
+       }
+
        /* free attributes */
        attrs_free( e->e_attrs );
        e->e_attrs = NULL;
@@ -564,7 +563,7 @@ int entry_decode(struct berval *bv, Entry **e)
        BerVarray bptr;
 
        i = entry_getlen(&ptr);
-       x = ch_malloc(i);
+       x = ch_calloc(1, i);
        i = entry_getlen(&ptr);
        x->e_name.bv_val = ptr;
        x->e_name.bv_len = i;
@@ -581,7 +580,7 @@ int entry_decode(struct berval *bv, Entry **e)
            "entry_decode: \"%s\"\n",
            x->e_dn, 0, 0 );
 #endif
-       x->e_private = bv->bv_val;
+       x->e_bv = *bv;
 
        /* A valid entry must have at least one attr, so this
         * pointer can never be NULL