]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/id2entry.c
Rough in search routine
[openldap] / servers / slapd / back-bdb / id2entry.c
1 /* id2entry.c - routines to deal with the id2entry database */
2 /* $OpenLDAP$ */
3 /*
4  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
5  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
6  */
7
8 #include "portable.h"
9
10 #include <stdio.h>
11 #include <ac/string.h>
12
13 #include "back-bdb.h"
14
15 int bdb_id2entry_add(
16         Backend *be,
17         DB_TXN *tid,
18         Entry *e )
19 {
20         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
21         DB *db = bdb->bi_id2entry->bdi_db;
22         DBT key, data;
23         struct berval *bv;
24         int rc;
25
26         DBTzero( &key );
27         key.data = (char *) &e->e_id;
28         key.size = sizeof(ID);
29
30         rc = entry_encode( e, &bv );
31         if( rc != LDAP_SUCCESS ) {
32                 return -1;
33         }
34
35         DBTzero( &data );
36         bv2DBT( bv, &data );
37
38         rc = db->put( db, tid, &key, &data, DB_NOOVERWRITE );
39
40         ber_bvfree( bv );
41         return rc;
42 }
43
44 int bdb_id2entry(
45         Backend *be,
46         DB_TXN *tid,
47         ID id,
48         Entry **e )
49 {
50         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
51         DB *db = bdb->bi_id2entry->bdi_db;
52         DBT key, data;
53         struct berval bv;
54         int rc;
55
56         *e = NULL;
57
58         DBTzero( &key );
59         key.data = (char *) &id;
60         key.size = sizeof(ID);
61
62         DBTzero( &data );
63         data.flags = DB_DBT_MALLOC;
64
65         /* fetch it */
66         rc = db->get( db, tid, &key, &data, 0 );
67
68         if( rc != 0 ) {
69                 return rc;
70         }
71
72         DBT2bv( &data, &bv );
73
74         rc = entry_decode( &bv, e );
75
76         ch_free( data.data );
77         return rc;
78 }
79
80 int bdb_id2entry_delete(
81         Backend *be,
82         DB_TXN *tid,
83         ID id )
84 {
85         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
86         DB *db = bdb->bi_id2entry->bdi_db;
87         DBT key;
88         struct berval *bv;
89         int rc;
90
91         DBTzero( &key );
92         key.data = (char *) &id;
93         key.size = sizeof(ID);
94
95         rc = db->del( db, tid, &key, 0 );
96
97         ber_bvfree( bv );
98         return rc;
99 }
100
101 int bdb_entry_return(
102         Backend *be,
103         Entry *e )
104 {
105         entry_free( e );
106         return 0;
107 }