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 23struct 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 30struct 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 57bool db_is_local(const char *name); 58 59struct 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 64struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx); 65 66struct 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 71struct 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 76struct messaging_context; 77 78#ifdef CLUSTER_SUPPORT 79struct 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 85struct 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 92NTSTATUS dbwrap_delete(struct db_context *db, TDB_DATA key); 93NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key, 94 TDB_DATA data, int flags); 95TDB_DATA dbwrap_fetch(struct db_context *db, TALLOC_CTX *mem_ctx, 96 TDB_DATA key); 97NTSTATUS dbwrap_delete_bystring(struct db_context *db, const char *key); 98NTSTATUS dbwrap_store_bystring(struct db_context *db, const char *key, 99 TDB_DATA data, int flags); 100TDB_DATA dbwrap_fetch_bystring(struct db_context *db, TALLOC_CTX *mem_ctx, 101 const char *key); 102 103#endif /* __DBWRAP_H__ */ 104