• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/samba-3.5.8/source4/lib/ldb/ldb_tdb/
1#include "ldb_includes.h"
2#include "tdb.h"
3#include "ldb_module.h"
4
5/* this private structure is used by the ltdb backend in the
6   ldb_context */
7struct ltdb_private {
8	TDB_CONTEXT *tdb;
9	unsigned int connect_flags;
10
11	unsigned long long sequence_number;
12
13	/* the low level tdb seqnum - used to avoid loading BASEINFO when
14	   possible */
15	int tdb_seqnum;
16
17	struct ltdb_cache {
18		struct ldb_message *indexlist;
19		struct ldb_message *attributes;
20
21		struct {
22			char *name;
23			int flags;
24		} last_attribute;
25	} *cache;
26
27	int in_transaction;
28
29	bool check_base;
30	struct ltdb_idxptr *idxptr;
31	bool prepared_commit;
32};
33
34/*
35  the async local context
36  holds also internal search state during a full db search
37*/
38struct ltdb_req_spy {
39	struct ltdb_context *ctx;
40};
41
42struct ltdb_context {
43	struct ldb_module *module;
44	struct ldb_request *req;
45
46	bool request_terminated;
47	struct ltdb_req_spy *spy;
48
49	/* search stuff */
50	const struct ldb_parse_tree *tree;
51	struct ldb_dn *base;
52	enum ldb_scope scope;
53	const char * const *attrs;
54	struct tevent_timer *timeout_event;
55};
56
57/* special record types */
58#define LTDB_INDEX      "@INDEX"
59#define LTDB_INDEXLIST  "@INDEXLIST"
60#define LTDB_IDX        "@IDX"
61#define LTDB_IDXPTR     "@IDXPTR"
62#define LTDB_IDXATTR    "@IDXATTR"
63#define LTDB_IDXONE     "@IDXONE"
64#define LTDB_BASEINFO   "@BASEINFO"
65#define LTDB_OPTIONS    "@OPTIONS"
66#define LTDB_ATTRIBUTES "@ATTRIBUTES"
67
68/* special attribute types */
69#define LTDB_SEQUENCE_NUMBER "sequenceNumber"
70#define LTDB_CHECK_BASE "checkBaseOnSearch"
71#define LTDB_MOD_TIMESTAMP "whenChanged"
72#define LTDB_OBJECTCLASS "objectClass"
73
74/* The following definitions come from lib/ldb/ldb_tdb/ldb_cache.c  */
75
76int ltdb_cache_reload(struct ldb_module *module);
77int ltdb_cache_load(struct ldb_module *module);
78int ltdb_increase_sequence_number(struct ldb_module *module);
79int ltdb_check_at_attributes_values(const struct ldb_val *value);
80
81/* The following definitions come from lib/ldb/ldb_tdb/ldb_index.c  */
82
83struct ldb_parse_tree;
84
85int ltdb_search_indexed(struct ltdb_context *ctx, uint32_t *);
86int ltdb_index_add(struct ldb_module *module, const struct ldb_message *msg);
87int ltdb_index_del(struct ldb_module *module, const struct ldb_message *msg);
88int ltdb_index_one(struct ldb_module *module, const struct ldb_message *msg, int add);
89int ltdb_reindex(struct ldb_module *module);
90int ltdb_index_transaction_start(struct ldb_module *module);
91int ltdb_index_transaction_commit(struct ldb_module *module);
92int ltdb_index_transaction_cancel(struct ldb_module *module);
93
94/* The following definitions come from lib/ldb/ldb_tdb/ldb_pack.c  */
95
96int ltdb_pack_data(struct ldb_module *module,
97		   const struct ldb_message *message,
98		   struct TDB_DATA *data);
99void ltdb_unpack_data_free(struct ldb_module *module,
100			   struct ldb_message *message);
101int ltdb_unpack_data(struct ldb_module *module,
102		     const struct TDB_DATA *data,
103		     struct ldb_message *message);
104
105/* The following definitions come from lib/ldb/ldb_tdb/ldb_search.c  */
106
107int ltdb_has_wildcard(struct ldb_module *module, const char *attr_name,
108		      const struct ldb_val *val);
109void ltdb_search_dn1_free(struct ldb_module *module, struct ldb_message *msg);
110int ltdb_search_dn1(struct ldb_module *module, struct ldb_dn *dn, struct ldb_message *msg);
111int ltdb_add_attr_results(struct ldb_module *module,
112 			  TALLOC_CTX *mem_ctx,
113			  struct ldb_message *msg,
114			  const char * const attrs[],
115			  unsigned int *count,
116			  struct ldb_message ***res);
117int ltdb_filter_attrs(struct ldb_message *msg, const char * const *attrs);
118int ltdb_search(struct ltdb_context *ctx);
119
120/* The following definitions come from lib/ldb/ldb_tdb/ldb_tdb.c  */
121int ltdb_lock_read(struct ldb_module *module);
122int ltdb_unlock_read(struct ldb_module *module);
123struct TDB_DATA ltdb_key(struct ldb_module *module, struct ldb_dn *dn);
124int ltdb_store(struct ldb_module *module, const struct ldb_message *msg, int flgs);
125int ltdb_delete_noindex(struct ldb_module *module, struct ldb_dn *dn);
126int ltdb_modify_internal(struct ldb_module *module, const struct ldb_message *msg);
127
128int ltdb_index_del_value(struct ldb_module *module, const char *dn,
129			 struct ldb_message_element *el, int v_idx);
130
131struct tdb_context *ltdb_wrap_open(TALLOC_CTX *mem_ctx,
132				   const char *path, int hash_size, int tdb_flags,
133				   int open_flags, mode_t mode,
134				   struct ldb_context *ldb);
135