]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/id2entry.c
ITS#3226: Clear attribute flags after schema_check failed
[openldap] / servers / slapd / back-bdb / id2entry.c
index 13f958dd467e89d2d3074c9ac5c5772f847d1301..d4eb26711119a21037a44c44bfb0832f1362fcf5 100644 (file)
@@ -32,9 +32,7 @@ static int bdb_id2entry_put(
        DB *db = bdb->bi_id2entry->bdi_db;
        DBT key, data;
        struct berval bv;
-       char buf[sizeof(ID)];
-       ID tmp;
-       int i, rc;
+       int rc;
 #ifdef BDB_HIER
        struct berval odn, ondn;
 
@@ -46,16 +44,9 @@ static int bdb_id2entry_put(
        e->e_nname = slap_empty_bv;
 #endif
        DBTzero( &key );
-       key.data = buf;
+       key.data = (char *) &e->e_id;
        key.size = sizeof(ID);
 
-       /* Set key in BigEndian order */
-       tmp = e->e_id;
-       for ( i=sizeof(ID)-1; i>=0; i-- ) {
-               buf[i] = tmp & 0xff;
-               tmp >>= 8;
-       }
-
        rc = entry_encode( e, &bv );
 #ifdef BDB_HIER
        e->e_name = odn; e->e_nname = ondn;
@@ -105,20 +96,13 @@ int bdb_id2entry(
        DB *db = bdb->bi_id2entry->bdi_db;
        DBT key, data;
        struct berval bv;
-       char buf[sizeof(ID)];
-       ID tmp;
-       int i, rc = 0, ret = 0;
+       int rc = 0, ret = 0;
 
        *e = NULL;
 
        DBTzero( &key );
-       key.data = buf;
+       key.data = (char *) &id;
        key.size = sizeof(ID);
-       tmp = id;
-       for ( i=sizeof(ID)-1; i>=0; i-- ) {
-               buf[i] = tmp & 0xff;
-               tmp >>= 8;
-       }
 
        DBTzero( &data );
        data.flags = DB_DBT_MALLOC;
@@ -154,18 +138,11 @@ int bdb_id2entry_delete(
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        DB *db = bdb->bi_id2entry->bdi_db;
        DBT key;
-       char buf[sizeof(ID)];
-       ID tmp;
-       int i, rc;
+       int rc;
 
        DBTzero( &key );
-       key.data = buf;
+       key.data = (char *) &e->e_id;
        key.size = sizeof(ID);
-       tmp = e->e_id;
-       for ( i=sizeof(ID)-1; i>=0; i-- ) {
-               buf[i] = tmp & 0xff;
-               tmp >>= 8;
-       }
 
        /* delete from database */
        rc = db->del( db, tid, &key, 0 );
@@ -225,6 +202,10 @@ int bdb_entry_release(
                        SLAP_TRUNCATE_MODE, SLAP_UNDEFINED_MODE */
  
        if ( slapMode == SLAP_SERVER_MODE ) {
+               /* If not in our cache, just free it */
+               if ( !e->e_private ) {
+                       return bdb_entry_return( e );
+               }
                /* free entry and reader or writer lock */
                if ( o ) {
                        boi = (struct bdb_op_info *)o->o_private;