]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/id2entry.c
Rough in extended ops, modify, and modrdn.
[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         BackendDB *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_update(
45         BackendDB *be,
46         DB_TXN *tid,
47         Entry *e )
48 {
49         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
50         DB *db = bdb->bi_id2entry->bdi_db;
51         DBT key, data;
52         struct berval *bv;
53         int rc;
54
55         DBTzero( &key );
56         key.data = (char *) &e->e_id;
57         key.size = sizeof(ID);
58
59         rc = entry_encode( e, &bv );
60         if( rc != LDAP_SUCCESS ) {
61                 return -1;
62         }
63
64         DBTzero( &data );
65         bv2DBT( bv, &data );
66
67         rc = db->put( db, tid, &key, &data, 0 );
68
69         ber_bvfree( bv );
70         return rc;
71 }
72
73 int bdb_id2entry(
74         BackendDB *be,
75         DB_TXN *tid,
76         ID id,
77         Entry **e )
78 {
79         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
80         DB *db = bdb->bi_id2entry->bdi_db;
81         DBT key, data;
82         struct berval bv;
83         int rc;
84
85         *e = NULL;
86
87         DBTzero( &key );
88         key.data = (char *) &id;
89         key.size = sizeof(ID);
90
91         DBTzero( &data );
92         data.flags = DB_DBT_MALLOC;
93
94         /* fetch it */
95         rc = db->get( db, tid, &key, &data, 0 );
96
97         if( rc != 0 ) {
98                 return rc;
99         }
100
101         DBT2bv( &data, &bv );
102
103         rc = entry_decode( &bv, e );
104
105         if( rc == 0 ) {
106                 (*e)->e_id = id;
107         }
108
109         ch_free( data.data );
110         return rc;
111 }
112
113 int bdb_id2entry_delete(
114         BackendDB *be,
115         DB_TXN *tid,
116         ID id )
117 {
118         struct bdb_info *bdb = (struct bdb_info *) be->be_private;
119         DB *db = bdb->bi_id2entry->bdi_db;
120         DBT key;
121         struct berval *bv;
122         int rc;
123
124         DBTzero( &key );
125         key.data = (char *) &id;
126         key.size = sizeof(ID);
127
128         rc = db->del( db, tid, &key, 0 );
129
130         ber_bvfree( bv );
131         return rc;
132 }
133
134 int bdb_entry_return(
135         BackendDB *be,
136         Entry *e )
137 {
138         entry_free( e );
139         return 0;
140 }