• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/samba-3.5.8/source3/lib/ldb/swig/
1/*
2   Unix SMB/CIFS implementation.
3
4   Swig interface to ldb.
5
6   Copyright (C) 2005,2006 Tim Potter <tpot@samba.org>
7   Copyright (C) 2006 Simo Sorce <idra@samba.org>
8
9     ** NOTE! The following LGPL license applies to the ldb
10     ** library. This does NOT imply that all of Samba is released
11     ** under the LGPL
12
13   This library is free software; you can redistribute it and/or
14   modify it under the terms of the GNU Lesser General Public
15   License as published by the Free Software Foundation; either
16   version 3 of the License, or (at your option) any later version.
17
18   This library is distributed in the hope that it will be useful,
19   but WITHOUT ANY WARRANTY; without even the implied warranty of
20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21   Lesser General Public License for more details.
22
23   You should have received a copy of the GNU Lesser General Public
24   License along with this library; if not, see <http://www.gnu.org/licenses/>.
25*/
26
27%module ldb
28
29%{
30
31/* Some typedefs to help swig along */
32
33typedef unsigned char uint8_t;
34typedef unsigned long long uint64_t;
35typedef long long int64_t;
36
37/* Include headers */
38
39#include "lib/ldb/include/ldb.h"
40#include "lib/talloc/talloc.h"
41
42%}
43
44%include "carrays.i"
45%include "exception.i"
46
47/*
48 * Constants
49 */
50
51#define LDB_SUCCESS				0
52#define LDB_ERR_OPERATIONS_ERROR		1
53#define LDB_ERR_PROTOCOL_ERROR			2
54#define LDB_ERR_TIME_LIMIT_EXCEEDED		3
55#define LDB_ERR_SIZE_LIMIT_EXCEEDED		4
56#define LDB_ERR_COMPARE_FALSE			5
57#define LDB_ERR_COMPARE_TRUE			6
58#define LDB_ERR_AUTH_METHOD_NOT_SUPPORTED	7
59#define LDB_ERR_STRONG_AUTH_REQUIRED		8
60/* 9 RESERVED */
61#define LDB_ERR_REFERRAL			10
62#define LDB_ERR_ADMIN_LIMIT_EXCEEDED		11
63#define LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION	12
64#define LDB_ERR_CONFIDENTIALITY_REQUIRED	13
65#define LDB_ERR_SASL_BIND_IN_PROGRESS		14
66#define LDB_ERR_NO_SUCH_ATTRIBUTE		16
67#define LDB_ERR_UNDEFINED_ATTRIBUTE_TYPE	17
68#define LDB_ERR_INAPPROPRIATE_MATCHING		18
69#define LDB_ERR_CONSTRAINT_VIOLATION		19
70#define LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS	20
71#define LDB_ERR_INVALID_ATTRIBUTE_SYNTAX	21
72/* 22-31 unused */
73#define LDB_ERR_NO_SUCH_OBJECT			32
74#define LDB_ERR_ALIAS_PROBLEM			33
75#define LDB_ERR_INVALID_DN_SYNTAX		34
76/* 35 RESERVED */
77#define LDB_ERR_ALIAS_DEREFERENCING_PROBLEM	36
78/* 37-47 unused */
79#define LDB_ERR_INAPPROPRIATE_AUTHENTICATION	48
80#define LDB_ERR_INVALID_CREDENTIALS		49
81#define LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS	50
82#define LDB_ERR_BUSY				51
83#define LDB_ERR_UNAVAILABLE			52
84#define LDB_ERR_UNWILLING_TO_PERFORM		53
85#define LDB_ERR_LOOP_DETECT			54
86/* 55-63 unused */
87#define LDB_ERR_NAMING_VIOLATION		64
88#define LDB_ERR_OBJECT_CLASS_VIOLATION		65
89#define LDB_ERR_NOT_ALLOWED_ON_NON_LEAF		66
90#define LDB_ERR_NOT_ALLOWED_ON_RDN		67
91#define LDB_ERR_ENTRY_ALREADY_EXISTS		68
92#define LDB_ERR_OBJECT_CLASS_MODS_PROHIBITED	69
93/* 70 RESERVED FOR CLDAP */
94#define LDB_ERR_AFFECTS_MULTIPLE_DSAS		71
95/* 72-79 unused */
96#define LDB_ERR_OTHER				80
97
98enum ldb_scope {LDB_SCOPE_DEFAULT=-1,
99		LDB_SCOPE_BASE=0,
100		LDB_SCOPE_ONELEVEL=1,
101		LDB_SCOPE_SUBTREE=2};
102
103/*
104 * Wrap struct ldb_context
105 */
106
107/* The ldb functions will crash if a NULL ldb context is passed so
108   catch this before it happens. */
109
110%typemap(check) struct ldb_context* {
111	if ($1 == NULL)
112		SWIG_exception(SWIG_ValueError,
113			"ldb context must be non-NULL");
114}
115
116/*
117 * Wrap a small bit of talloc
118 */
119
120/* Use talloc_init() to create a parameter to pass to ldb_init().  Don't
121   forget to free it using talloc_free() afterwards. */
122
123TALLOC_CTX *talloc_init(char *name);
124int talloc_free(TALLOC_CTX *ptr);
125
126/*
127 * Wrap struct ldb_val
128 */
129
130%typemap(in) struct ldb_val *INPUT (struct ldb_val temp) {
131	$1 = &temp;
132	if (!PyString_Check($input)) {
133		PyErr_SetString(PyExc_TypeError, "string arg expected");
134		return NULL;
135	}
136	$1->length = PyString_Size($input);
137	$1->data = PyString_AsString($input);
138}
139
140%typemap(out) struct ldb_val {
141	$result = PyString_FromStringAndSize($1.data, $1.length);
142}
143
144/*
145 * Wrap struct ldb_result
146 */
147
148%typemap(in, numinputs=0) struct ldb_result **OUT (struct ldb_result *temp_ldb_result) {
149	$1 = &temp_ldb_result;
150}
151
152%typemap(argout) struct ldb_result ** {
153	resultobj = SWIG_NewPointerObj(*$1, SWIGTYPE_p_ldb_result, 0);
154}
155
156%types(struct ldb_result *);
157
158/*
159 * Wrap struct ldb_message_element
160 */
161
162%array_functions(struct ldb_val, ldb_val_array);
163
164struct ldb_message_element {
165	unsigned int flags;
166	const char *name;
167	unsigned int num_values;
168	struct ldb_val *values;
169};
170
171/*
172 * Wrap struct ldb_message
173 */
174
175%array_functions(struct ldb_message_element, ldb_message_element_array);
176
177struct ldb_message {
178	struct ldb_dn *dn;
179	unsigned int num_elements;
180	struct ldb_message_element *elements;
181	void *private_data;
182};
183
184/*
185 * Wrap struct ldb_result
186 */
187
188%array_functions(struct ldb_message *, ldb_message_ptr_array);
189
190struct ldb_result {
191	unsigned int count;
192	struct ldb_message **msgs;
193	char **refs;
194	struct ldb_control **controls;
195};
196
197/*
198 * Wrap ldb functions
199 */
200
201/* Initialisation */
202
203int ldb_global_init(void);
204struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx);
205
206/* Error handling */
207
208const char *ldb_errstring(struct ldb_context *ldb);
209const char *ldb_strerror(int ldb_err);
210
211/* Top-level ldb operations */
212
213int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]);
214
215int ldb_search(struct ldb_context *ldb, const struct ldb_dn *base, enum ldb_scope scope, const char *expression, const char * const *attrs, struct ldb_result **OUT);
216
217int ldb_delete(struct ldb_context *ldb, const struct ldb_dn *dn);
218
219int ldb_rename(struct ldb_context *ldb, const struct ldb_dn *olddn, const struct ldb_dn *newdn);
220
221int ldb_add(struct ldb_context *ldb, const struct ldb_message *message);
222
223/* Ldb message operations */
224
225struct ldb_message *ldb_msg_new(void *mem_ctx);
226
227struct ldb_message_element *ldb_msg_find_element(const struct ldb_message *msg, const char *attr_name);
228
229int ldb_msg_add_value(struct ldb_message *msg, const char *attr_name, const struct ldb_val *INPUT);
230
231void ldb_msg_remove_attr(struct ldb_message *msg, const char *attr);
232
233int ldb_msg_sanity_check(struct ldb_message *msg);
234
235/* DN operations */
236
237struct ldb_dn *ldb_dn_explode(void *mem_ctx, const char *dn);
238
239char *ldb_dn_linearize(void *mem_ctx, const struct ldb_dn *dn);
240