2 Unix SMB
/CIFS implementation.
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
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
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
;
40 #include
"lib/ldb/include/ldb.h"
41 #include
"lib/talloc/talloc.h"
46 %include
"exception.i"
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
* {
57 SWIG_exception
(SWIG_ValueError
,
58 "ldb context must be non-NULL");
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
);
75 %typemap
(in
) struct ldb_val
{
76 if
(!PyString_Check
($input
)) {
77 PyErr_SetString
(PyExc_TypeError
, "string arg expected");
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) {
88 $result
= PyString_FromStringAndSize
($
1.data
, $
1.length
);
92 enum ldb_scope
{LDB_SCOPE_DEFAULT
=-1,
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
*);
118 %typemap
(in
) struct ldb_dn
* {
119 if
($input
== Py_None
) {
121 } else if
(!PyString_Check
($input
)) {
122 PyErr_SetString
(PyExc_TypeError
, "string arg expected");
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
{
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
);
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
;
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");
174 while
(PyDict_Next
(obj
, &pos, &key, &value)) {
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
);
191 struct ldb_message
**msgs
;
193 struct ldb_control
**controls
;
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
);
219 int ldb_add
(struct ldb_context
*ldb
, const struct ldb_message
*message
);