r23796: main COPYING file for samba4, plus some formatting varients
[samba.git] / source / lib / ldb / swig / ldb.i
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, write to the Free Software
25    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26 */
27
28 %module ldb
29
30 %{
31
32 /* Some typedefs to help swig along */
33
34 typedef unsigned char uint8_t;
35 typedef unsigned long long uint64_t;
36 typedef long long int64_t;
37
38 /* Include headers */
39
40 #include "lib/replace/replace.h"
41 #include "lib/talloc/talloc.h"
42 #include "lib/ldb/include/ldb.h"
43
44 %}
45
46 %include "carrays.i"
47 %include "exception.i"
48
49 /*
50  * Constants
51  */
52
53 #define LDB_SUCCESS                             0
54 #define LDB_ERR_OPERATIONS_ERROR                1
55 #define LDB_ERR_PROTOCOL_ERROR                  2
56 #define LDB_ERR_TIME_LIMIT_EXCEEDED             3
57 #define LDB_ERR_SIZE_LIMIT_EXCEEDED             4
58 #define LDB_ERR_COMPARE_FALSE                   5
59 #define LDB_ERR_COMPARE_TRUE                    6
60 #define LDB_ERR_AUTH_METHOD_NOT_SUPPORTED       7
61 #define LDB_ERR_STRONG_AUTH_REQUIRED            8
62 /* 9 RESERVED */
63 #define LDB_ERR_REFERRAL                        10
64 #define LDB_ERR_ADMIN_LIMIT_EXCEEDED            11
65 #define LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION  12
66 #define LDB_ERR_CONFIDENTIALITY_REQUIRED        13
67 #define LDB_ERR_SASL_BIND_IN_PROGRESS           14
68 #define LDB_ERR_NO_SUCH_ATTRIBUTE               16
69 #define LDB_ERR_UNDEFINED_ATTRIBUTE_TYPE        17
70 #define LDB_ERR_INAPPROPRIATE_MATCHING          18
71 #define LDB_ERR_CONSTRAINT_VIOLATION            19
72 #define LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS       20
73 #define LDB_ERR_INVALID_ATTRIBUTE_SYNTAX        21
74 /* 22-31 unused */
75 #define LDB_ERR_NO_SUCH_OBJECT                  32
76 #define LDB_ERR_ALIAS_PROBLEM                   33
77 #define LDB_ERR_INVALID_DN_SYNTAX               34
78 /* 35 RESERVED */
79 #define LDB_ERR_ALIAS_DEREFERENCING_PROBLEM     36
80 /* 37-47 unused */
81 #define LDB_ERR_INAPPROPRIATE_AUTHENTICATION    48
82 #define LDB_ERR_INVALID_CREDENTIALS             49
83 #define LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS      50
84 #define LDB_ERR_BUSY                            51
85 #define LDB_ERR_UNAVAILABLE                     52
86 #define LDB_ERR_UNWILLING_TO_PERFORM            53
87 #define LDB_ERR_LOOP_DETECT                     54
88 /* 55-63 unused */
89 #define LDB_ERR_NAMING_VIOLATION                64
90 #define LDB_ERR_OBJECT_CLASS_VIOLATION          65
91 #define LDB_ERR_NOT_ALLOWED_ON_NON_LEAF         66
92 #define LDB_ERR_NOT_ALLOWED_ON_RDN              67
93 #define LDB_ERR_ENTRY_ALREADY_EXISTS            68
94 #define LDB_ERR_OBJECT_CLASS_MODS_PROHIBITED    69
95 /* 70 RESERVED FOR CLDAP */
96 #define LDB_ERR_AFFECTS_MULTIPLE_DSAS           71
97 /* 72-79 unused */
98 #define LDB_ERR_OTHER                           80
99
100 enum ldb_scope {LDB_SCOPE_DEFAULT=-1, 
101                 LDB_SCOPE_BASE=0, 
102                 LDB_SCOPE_ONELEVEL=1,
103                 LDB_SCOPE_SUBTREE=2};
104
105 /* 
106  * Wrap struct ldb_context
107  */
108
109 /* The ldb functions will crash if a NULL ldb context is passed so
110    catch this before it happens. */
111
112 %typemap(check) struct ldb_context* {
113         if ($1 == NULL)
114                 SWIG_exception(SWIG_ValueError, 
115                         "ldb context must be non-NULL");
116 }
117
118 /* 
119  * Wrap a small bit of talloc
120  */
121
122 /* Use talloc_init() to create a parameter to pass to ldb_init().  Don't
123    forget to free it using talloc_free() afterwards. */
124
125 TALLOC_CTX *talloc_init(char *name);
126 int talloc_free(TALLOC_CTX *ptr);
127
128 /*
129  * Wrap struct ldb_val
130  */
131
132 %typemap(in) struct ldb_val *INPUT (struct ldb_val temp) {
133         $1 = &temp;
134         if (!PyString_Check($input)) {
135                 PyErr_SetString(PyExc_TypeError, "string arg expected");
136                 return NULL;
137         }
138         $1->length = PyString_Size($input);
139         $1->data = PyString_AsString($input);
140 }
141
142 %typemap(out) struct ldb_val {
143         $result = PyString_FromStringAndSize($1.data, $1.length);
144 }
145
146 /*
147  * Wrap struct ldb_result
148  */
149
150 %typemap(in, numinputs=0) struct ldb_result **OUT (struct ldb_result *temp_ldb_result) {
151         $1 = &temp_ldb_result;
152 }
153
154 %typemap(argout) struct ldb_result ** {
155         resultobj = SWIG_NewPointerObj(*$1, SWIGTYPE_p_ldb_result, 0);
156 }       
157
158 %types(struct ldb_result *);
159
160 /*
161  * Wrap struct ldb_message_element
162  */
163
164 %array_functions(struct ldb_val, ldb_val_array);
165
166 struct ldb_message_element {
167         unsigned int flags;
168         const char *name;
169         unsigned int num_values;
170         struct ldb_val *values;
171 };
172
173 /*
174  * Wrap struct ldb_message
175  */
176
177 %array_functions(struct ldb_message_element, ldb_message_element_array);
178
179 struct ldb_message {
180         struct ldb_dn *dn;
181         unsigned int num_elements;
182         struct ldb_message_element *elements;
183 };
184
185 /*
186  * Wrap struct ldb_result
187  */
188
189 %array_functions(struct ldb_message *, ldb_message_ptr_array);
190
191 struct ldb_result {
192         unsigned int count;
193         struct ldb_message **msgs;
194         char **refs;
195         struct ldb_control **controls;
196 };
197
198 /*
199  * Wrap ldb functions 
200  */
201
202 /* Initialisation */
203
204 int ldb_global_init(void);
205 struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx);
206
207 /* Error handling */
208
209 const char *ldb_errstring(struct ldb_context *ldb);
210 const char *ldb_strerror(int ldb_err);
211
212 /* Top-level ldb operations */
213
214 int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]);
215
216 int ldb_search(struct ldb_context *ldb, struct ldb_dn *base, enum ldb_scope scope, const char *expression, const char * const *attrs, struct ldb_result **OUT);
217
218 int ldb_delete(struct ldb_context *ldb, struct ldb_dn *dn);
219
220 int ldb_rename(struct ldb_context *ldb, struct ldb_dn *olddn, struct ldb_dn *newdn);
221
222 int ldb_add(struct ldb_context *ldb, const struct ldb_message *message);
223
224 /* Ldb message operations */
225
226 struct ldb_message *ldb_msg_new(void *mem_ctx);
227
228 struct ldb_message_element *ldb_msg_find_element(const struct ldb_message *msg, const char *attr_name);
229
230 int ldb_msg_add_value(struct ldb_message *msg, const char *attr_name, const struct ldb_val *val, struct ldb_message_element **return_el);
231
232 void ldb_msg_remove_attr(struct ldb_message *msg, const char *attr);
233
234 int ldb_msg_sanity_check(struct ldb_context *ldb, const struct ldb_message *msg);
235
236 /* DN operations */
237
238 struct ldb_dn *ldb_dn_explode(void *mem_ctx, const char *dn);
239
240 char *ldb_dn_linearize(void *mem_ctx, const struct ldb_dn *dn);