]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#5087 fix tool_id2entry_get
authorHoward Chu <hyc@openldap.org>
Sat, 11 Aug 2007 02:32:20 +0000 (02:32 +0000)
committerHoward Chu <hyc@openldap.org>
Sat, 11 Aug 2007 02:32:20 +0000 (02:32 +0000)
servers/slapd/back-bdb/tools.c

index 6e0d594c84ecd167d02bd72a50c8de6819a0b6a3..a8c07423c9ecd228b12e9885d26ed58e4f5ef686 100644 (file)
@@ -228,19 +228,22 @@ int bdb_tool_id2entry_get(
        Entry **e
 )
 {
-       int rc = bdb_id2entry( be, NULL, 0, id, e );
-
-       if ( rc == DB_NOTFOUND && id == 0 ) {
-               Entry *dummy = ch_calloc( 1, sizeof(Entry) );
-               struct berval gluebv = BER_BVC("glue");
-               dummy->e_name.bv_val = ch_strdup( "" );
-               dummy->e_nname.bv_val = ch_strdup( "" );
-               attr_merge_one( dummy, slap_schema.si_ad_objectClass, &gluebv, NULL );
-               attr_merge_one( dummy, slap_schema.si_ad_structuralObjectClass,
-                       &gluebv, NULL );
-               *e = dummy;
-               rc = LDAP_SUCCESS;
+       int rc;
+       ID nid;
+
+       BDB_ID2DISK( id, &nid );
+       key.ulen = key.size = sizeof(ID);
+       key.flags = DB_DBT_USERMEM;
+       key.data = &nid;
+
+       rc = cursor->c_get( cursor, &key, &data, DB_SET );
+       if ( rc == 0 ) {
+               *e = bdb_tool_entry_get( be, id );
+               if ( *e == NULL )
+                       rc = LDAP_OTHER;
        }
+       key.data = NULL;
+
        return rc;
 }