]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/id2entry.c
2725c4e557531db9d4db612772a4574e896ffc48
[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         DBTzero( &key );
57         key.data = (char *) &id;
58         key.size = sizeof(ID);
59
60         DBTzero( &data );
61         data.flags = DB_DBT_MALLOC;
62
63         /* fetch it */
64         rc = db->get( db, tid, &key, &data, 0 );
65
66         if( rc != 0 ) {
67                 return rc;
68         }
69
70         DBT2bv( &data, &bv );
71
72         rc = entry_decode( &bv, e );
73
74         ch_free( data.data );
75         return rc;
76 }
77
78 int bdb_id2entry_delete(
79         Backend *be,
80         DB_TXN *tid,
81         ID id )
82 {
83         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
84         DB *db = bdb->bi_id2entry->bdi_db;
85         DBT key;
86         struct berval *bv;
87         int rc;
88
89         DBTzero( &key );
90         key.data = (char *) &id;
91         key.size = sizeof(ID);
92
93         rc = db->del( db, tid, &key, 0 );
94
95         ber_bvfree( bv );
96         return rc;
97 }
98
99 int bdb_entry_return(
100         Backend *be,
101         Entry *e )
102 {
103         entry_free( e );
104         return 0;
105 }