Fix bug #6195 - Migrating from 3.0.x to 3.3.x can fail to update passdb.tdb correctly...
[ira/wip.git] / source3 / include / dbwrap.h
1 /* 
2    Unix SMB/CIFS implementation.
3    Database interface wrapper around tdb
4    Copyright (C) Volker Lendecke 2005-2007
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef __DBWRAP_H__
21 #define __DBWRAP_H__
22
23 struct db_record {
24         TDB_DATA key, value;
25         NTSTATUS (*store)(struct db_record *rec, TDB_DATA data, int flag);
26         NTSTATUS (*delete_rec)(struct db_record *rec);
27         void *private_data;
28 };
29
30 struct db_context {
31         struct db_record *(*fetch_locked)(struct db_context *db,
32                                           TALLOC_CTX *mem_ctx,
33                                           TDB_DATA key);
34         int (*fetch)(struct db_context *db, TALLOC_CTX *mem_ctx,
35                      TDB_DATA key, TDB_DATA *data);
36         int (*traverse)(struct db_context *db,
37                         int (*f)(struct db_record *rec,
38                                  void *private_data),
39                         void *private_data);
40         int (*traverse_read)(struct db_context *db,
41                              int (*f)(struct db_record *rec,
42                                       void *private_data),
43                              void *private_data);
44         int (*get_seqnum)(struct db_context *db);
45         int (*get_flags)(struct db_context *db);
46         int (*transaction_start)(struct db_context *db);
47         int (*transaction_commit)(struct db_context *db);
48         int (*transaction_cancel)(struct db_context *db);
49         int (*parse_record)(struct db_context *db, TDB_DATA key,
50                             int (*parser)(TDB_DATA key, TDB_DATA data,
51                                           void *private_data),
52                             void *private_data);
53         void *private_data;
54         bool persistent;
55 };
56
57 bool db_is_local(const char *name);
58
59 struct db_context *db_open(TALLOC_CTX *mem_ctx,
60                            const char *name,
61                            int hash_size, int tdb_flags,
62                            int open_flags, mode_t mode);
63
64 struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx);
65
66 struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
67                                const char *name,
68                                int hash_size, int tdb_flags,
69                                int open_flags, mode_t mode);
70
71 struct db_context *db_open_tdb2(TALLOC_CTX *mem_ctx,
72                                 const char *name,
73                                 int hash_size, int tdb_flags,
74                                 int open_flags, mode_t mode);
75
76 struct messaging_context;
77
78 #ifdef CLUSTER_SUPPORT
79 struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
80                                 const char *name,
81                                 int hash_size, int tdb_flags,
82                                 int open_flags, mode_t mode);
83 #endif
84
85 struct db_context *db_open_file(TALLOC_CTX *mem_ctx,
86                                 struct messaging_context *msg_ctx,
87                                 const char *name,
88                                 int hash_size, int tdb_flags,
89                                 int open_flags, mode_t mode);
90
91
92 NTSTATUS dbwrap_delete(struct db_context *db, TDB_DATA key);
93 NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key,
94                       TDB_DATA data, int flags);
95 TDB_DATA dbwrap_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
96                       TDB_DATA key);
97 NTSTATUS dbwrap_delete_bystring(struct db_context *db, const char *key);
98 NTSTATUS dbwrap_store_bystring(struct db_context *db, const char *key,
99                                TDB_DATA data, int flags);
100 TDB_DATA dbwrap_fetch_bystring(struct db_context *db, TALLOC_CTX *mem_ctx,
101                                const char *key);
102
103 #endif /* __DBWRAP_H__ */