source: branches/samba-3.5.x/source3/lib/ldb/swig/ldb.i

Last change on this file was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

File size: 6.1 KB
Line 
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);
Note: See TracBrowser for help on using the repository browser.