summaryrefslogtreecommitdiff
path: root/lib/util/util_tdb.h
blob: 630bdf669bef2b0fcd3c8a16b1903181d0eaf584 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
   Unix SMB/CIFS implementation.

   tdb utility functions

   Copyright (C) Andrew Tridgell 1992-2006

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef _____LIB_UTIL_UTIL_TDB_H__
#define _____LIB_UTIL_UTIL_TDB_H__

/***************************************************************
 Make a TDB_DATA and keep the const warning in one place
****************************************************************/
TDB_DATA make_tdb_data(const uint8_t *dptr, size_t dsize);
bool tdb_data_equal(TDB_DATA t1, TDB_DATA t2);
bool tdb_data_is_empty(TDB_DATA d);
TDB_DATA string_tdb_data(const char *string);
TDB_DATA string_term_tdb_data(const char *string);
TDB_DATA tdb_data_talloc_copy(TALLOC_CTX* mem_ctx, TDB_DATA data);

/****************************************************************************
 Lock a chain by string. Return non-zero if lock failed.
****************************************************************************/
int tdb_lock_bystring(struct tdb_context *tdb, const char *keyval);

/****************************************************************************
 Unlock a chain by string.
****************************************************************************/
void tdb_unlock_bystring(struct tdb_context *tdb, const char *keyval);

/****************************************************************************
 Read lock a chain by string. Return non-zero if lock failed.
****************************************************************************/
int tdb_read_lock_bystring(struct tdb_context *tdb, const char *keyval);

/****************************************************************************
 Read unlock a chain by string.
****************************************************************************/
void tdb_read_unlock_bystring(struct tdb_context *tdb, const char *keyval);

/****************************************************************************
 Lock a chain, with timeout.
****************************************************************************/
int tdb_chainlock_with_timeout( struct tdb_context *tdb, TDB_DATA key,
				unsigned int timeout);

/****************************************************************************
 Lock a chain by string, with timeout Return non-zero if lock failed.
****************************************************************************/
int tdb_lock_bystring_with_timeout(struct tdb_context *tdb, const char *keyval,
				   int timeout);

/****************************************************************************
 Readlock a chain by string, with timeout Return non-zero if lock failed.
****************************************************************************/
int tdb_read_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval,
					unsigned int timeout);

/****************************************************************************
 Fetch a int32_t value by a arbitrary blob key, return -1 if not found.
 Output is int32_t in native byte order.
****************************************************************************/
int32_t tdb_fetch_int32_byblob(struct tdb_context *tdb, TDB_DATA key);

/****************************************************************************
 Fetch a int32_t value by string key, return -1 if not found.
 Output is int32_t in native byte order.
****************************************************************************/
int32_t tdb_fetch_int32(struct tdb_context *tdb, const char *keystr);

/****************************************************************************
 Store a int32_t value by an arbitrary blob key, return 0 on success, -ve on failure.
 Input is int32_t in native byte order. Output in tdb is in little-endian.
****************************************************************************/
int tdb_store_int32_byblob(struct tdb_context *tdb, TDB_DATA key, int32_t v);

/****************************************************************************
 Store a int32_t value by string key, return 0 on success, -ve on failure.
 Input is int32_t in native byte order. Output in tdb is in little-endian.
****************************************************************************/
int tdb_store_int32(struct tdb_context *tdb, const char *keystr, int32_t v);

/****************************************************************************
 Fetch a uint32_t value by a arbitrary blob key, return -1 if not found.
 Output is uint32_t in native byte order.
****************************************************************************/
bool tdb_fetch_uint32_byblob(struct tdb_context *tdb, TDB_DATA key, uint32_t *value);

/****************************************************************************
 Fetch a uint32_t value by string key, return -1 if not found.
 Output is uint32_t in native byte order.
****************************************************************************/
bool tdb_fetch_uint32(struct tdb_context *tdb, const char *keystr, uint32_t *value);

/****************************************************************************
 Store a uint32_t value by an arbitrary blob key, return true on success, false on failure.
 Input is uint32_t in native byte order. Output in tdb is in little-endian.
****************************************************************************/
bool tdb_store_uint32_byblob(struct tdb_context *tdb, TDB_DATA key, uint32_t value);

/****************************************************************************
 Store a uint32_t value by string key, return true on success, false on failure.
 Input is uint32_t in native byte order. Output in tdb is in little-endian.
****************************************************************************/
bool tdb_store_uint32(struct tdb_context *tdb, const char *keystr, uint32_t value);

/****************************************************************************
 Store a buffer by a null terminated string key.  Return 0 on success, -ve
 on failure.
****************************************************************************/
int tdb_store_bystring(struct tdb_context *tdb, const char *keystr, TDB_DATA data, int flags);

/****************************************************************************
 Fetch a buffer using a null terminated string key.  Don't forget to call
 free() on the result dptr.
****************************************************************************/
TDB_DATA tdb_fetch_bystring(struct tdb_context *tdb, const char *keystr);

/****************************************************************************
 Delete an entry using a null terminated string key.  0 on success, -ve on err.
****************************************************************************/
int tdb_delete_bystring(struct tdb_context *tdb, const char *keystr);

/****************************************************************************
 Atomic integer change. Returns old value. To create, set initial value in *oldval. 
****************************************************************************/
int32_t tdb_change_int32_atomic(struct tdb_context *tdb, const char *keystr, int32_t *oldval, int32_t change_val);

/****************************************************************************
 Atomic unsigned integer change. Returns old value. To create, set initial value in *oldval. 
****************************************************************************/
bool tdb_change_uint32_atomic(struct tdb_context *tdb, const char *keystr, uint32_t *oldval, uint32_t change_val);

/****************************************************************************
 Allow tdb_delete to be used as a tdb_traversal_fn.
****************************************************************************/
int tdb_traverse_delete_fn(struct tdb_context *the_tdb, TDB_DATA key, TDB_DATA dbuf,
                     void *state);

/****************************************************************************
 Return an NTSTATUS from a TDB_ERROR
****************************************************************************/

NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err);

#endif /* _____LIB_UTIL_UTIL_TDB_H__ */