r14968: Move tdb and ldb swig wrappers in to lib/tdb and lib/ldb directories.
[Samba/bb.git] / source4 / lib / ldb / swig / ldb.i
blob31c1ffe3e4dd0d976ac392e9343c0e539e96f679
1 /*
2 Unix SMB/CIFS implementation.
4 Swig interface to ldb.
6 Copyright (C) 2005,2006 Tim Potter <tpot@samba.org>
7 Copyright (C) 2006 Simo Sorce <idra@samba.org>
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
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 2 of the License, or (at your option) any later version.
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.
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
28 %module ldb
32 /* Some typedefs to help swig along */
34 typedef unsigned char uint8_t;
35 typedef unsigned long long uint64_t;
36 typedef long long int64_t;
38 /* Include headers */
40 #include "lib/ldb/include/ldb.h"
41 #include "lib/talloc/talloc.h"
45 %include "carrays.i"
46 %include "exception.i"
48 /*
49 * Wrap struct ldb_context
52 /* The ldb functions will crash if a NULL ldb context is passed so
53 catch this before it happens. */
55 %typemap(check) struct ldb_context* {
56 if ($1 == NULL)
57 SWIG_exception(SWIG_ValueError,
58 "ldb context must be non-NULL");
61 /*
62 * Wrap TALLOC_CTX
65 /* Use talloc_init() to create a parameter to pass to ldb_init(). Don't
66 forget to free it using talloc_free() afterwards. */
68 TALLOC_CTX *talloc_init(char *name);
69 int talloc_free(TALLOC_CTX *ptr);
72 * Wrap struct ldb_val
75 %typemap(in) struct ldb_val {
76 if (!PyString_Check($input)) {
77 PyErr_SetString(PyExc_TypeError, "string arg expected");
78 return NULL;
80 $1.length = PyString_Size($input);
81 $1.data = PyString_AsString($input);
84 %typemap(out) struct ldb_val {
85 if ($1.data == NULL && $1.length == 0) {
86 $result = Py_None;
87 } else {
88 $result = PyString_FromStringAndSize($1.data, $1.length);
92 enum ldb_scope {LDB_SCOPE_DEFAULT=-1,
93 LDB_SCOPE_BASE=0,
94 LDB_SCOPE_ONELEVEL=1,
95 LDB_SCOPE_SUBTREE=2};
98 * Wrap struct ldb_result
101 %typemap(in, numinputs=0) struct ldb_result **OUT (struct ldb_result *temp_ldb_result) {
102 $1 = &temp_ldb_result;
105 %typemap(argout) struct ldb_result ** {
107 /* XXX: Check result for error and throw exception if necessary */
109 resultobj = SWIG_NewPointerObj(*$1, SWIGTYPE_p_ldb_result, 0);
112 %types(struct ldb_result *);
115 * Wrap struct ldb_dn
118 %typemap(in) struct ldb_dn * {
119 if ($input == Py_None) {
120 $1 = NULL;
121 } else if (!PyString_Check($input)) {
122 PyErr_SetString(PyExc_TypeError, "string arg expected");
123 return NULL;
124 } else {
125 $1 = ldb_dn_explode(NULL, PyString_AsString($input));
129 %typemap(out) struct ldb_dn * {
130 $result = PyString_FromString(ldb_dn_linearize($1, $1));
134 * Wrap struct ldb_message_element
137 %array_functions(struct ldb_val, ldb_val_array);
139 struct ldb_message_element {
140 unsigned int flags;
141 const char *name;
142 unsigned int num_values;
143 struct ldb_val *values;
147 * Wrap struct ldb_message
150 %array_functions(struct ldb_message_element, ldb_message_element_array);
152 struct ldb_message {
153 struct ldb_dn *dn;
154 unsigned int num_elements;
155 struct ldb_message_element *elements;
156 void *private_data; /* private to the backend */
159 %typemap(in) struct ldb_message * {
160 PyObject *obj, *key, *value;
161 int pos;
163 $1 = ldb_msg_new(NULL);
165 obj = PyObject_GetAttrString($input, "dn");
166 $1->dn = ldb_dn_explode(NULL, PyString_AsString(obj));
168 obj = PyObject_GetAttrString($input, "private_data");
169 $1->private_data = PyString_AsString(obj);
171 obj = PyObject_GetAttrString($input, "elements");
173 pos = 0;
174 while (PyDict_Next(obj, &pos, &key, &value)) {
175 struct ldb_val v;
177 v.data = PyString_AsString(value);
178 v.length = PyString_Size(value);
179 ldb_msg_add_value($1, PyString_AsString(key), &v);
184 * Wrap struct ldb_result
187 %array_functions(struct ldb_message *, ldb_message_ptr_array);
189 struct ldb_result {
190 unsigned int count;
191 struct ldb_message **msgs;
192 char **refs;
193 struct ldb_control **controls;
197 * Wrap ldb functions
200 %rename ldb_init init;
201 struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx);
203 %rename ldb_errstring errstring;
204 const char *ldb_errstring(struct ldb_context *ldb);
206 %rename ldb_connect connect;
207 int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]);
209 %rename ldb_search search;
210 int 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);
212 %rename ldb_delete delete;
213 int ldb_delete(struct ldb_context *ldb, const struct ldb_dn *dn);
215 %rename ldb_rename rename;
216 int ldb_rename(struct ldb_context *ldb, const struct ldb_dn *olddn, const struct ldb_dn *newdn);
218 %rename ldb_add add;
219 int ldb_add(struct ldb_context *ldb, const struct ldb_message *message);