r23790: LGPLv3+ conversion for our LGPLv2+ library code
[Samba.git] / source / lib / ldb / swig / ldb.i
blob050f6849160b13977bfdd6f7f7bc6083ebf0309e
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 3 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"
49 * Constants
52 #define LDB_SUCCESS 0
53 #define LDB_ERR_OPERATIONS_ERROR 1
54 #define LDB_ERR_PROTOCOL_ERROR 2
55 #define LDB_ERR_TIME_LIMIT_EXCEEDED 3
56 #define LDB_ERR_SIZE_LIMIT_EXCEEDED 4
57 #define LDB_ERR_COMPARE_FALSE 5
58 #define LDB_ERR_COMPARE_TRUE 6
59 #define LDB_ERR_AUTH_METHOD_NOT_SUPPORTED 7
60 #define LDB_ERR_STRONG_AUTH_REQUIRED 8
61 /* 9 RESERVED */
62 #define LDB_ERR_REFERRAL 10
63 #define LDB_ERR_ADMIN_LIMIT_EXCEEDED 11
64 #define LDB_ERR_UNSUPPORTED_CRITICAL_EXTENSION 12
65 #define LDB_ERR_CONFIDENTIALITY_REQUIRED 13
66 #define LDB_ERR_SASL_BIND_IN_PROGRESS 14
67 #define LDB_ERR_NO_SUCH_ATTRIBUTE 16
68 #define LDB_ERR_UNDEFINED_ATTRIBUTE_TYPE 17
69 #define LDB_ERR_INAPPROPRIATE_MATCHING 18
70 #define LDB_ERR_CONSTRAINT_VIOLATION 19
71 #define LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS 20
72 #define LDB_ERR_INVALID_ATTRIBUTE_SYNTAX 21
73 /* 22-31 unused */
74 #define LDB_ERR_NO_SUCH_OBJECT 32
75 #define LDB_ERR_ALIAS_PROBLEM 33
76 #define LDB_ERR_INVALID_DN_SYNTAX 34
77 /* 35 RESERVED */
78 #define LDB_ERR_ALIAS_DEREFERENCING_PROBLEM 36
79 /* 37-47 unused */
80 #define LDB_ERR_INAPPROPRIATE_AUTHENTICATION 48
81 #define LDB_ERR_INVALID_CREDENTIALS 49
82 #define LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS 50
83 #define LDB_ERR_BUSY 51
84 #define LDB_ERR_UNAVAILABLE 52
85 #define LDB_ERR_UNWILLING_TO_PERFORM 53
86 #define LDB_ERR_LOOP_DETECT 54
87 /* 55-63 unused */
88 #define LDB_ERR_NAMING_VIOLATION 64
89 #define LDB_ERR_OBJECT_CLASS_VIOLATION 65
90 #define LDB_ERR_NOT_ALLOWED_ON_NON_LEAF 66
91 #define LDB_ERR_NOT_ALLOWED_ON_RDN 67
92 #define LDB_ERR_ENTRY_ALREADY_EXISTS 68
93 #define LDB_ERR_OBJECT_CLASS_MODS_PROHIBITED 69
94 /* 70 RESERVED FOR CLDAP */
95 #define LDB_ERR_AFFECTS_MULTIPLE_DSAS 71
96 /* 72-79 unused */
97 #define LDB_ERR_OTHER 80
99 enum ldb_scope {LDB_SCOPE_DEFAULT=-1,
100 LDB_SCOPE_BASE=0,
101 LDB_SCOPE_ONELEVEL=1,
102 LDB_SCOPE_SUBTREE=2};
105 * Wrap struct ldb_context
108 /* The ldb functions will crash if a NULL ldb context is passed so
109 catch this before it happens. */
111 %typemap(check) struct ldb_context* {
112 if ($1 == NULL)
113 SWIG_exception(SWIG_ValueError,
114 "ldb context must be non-NULL");
118 * Wrap a small bit of talloc
121 /* Use talloc_init() to create a parameter to pass to ldb_init(). Don't
122 forget to free it using talloc_free() afterwards. */
124 TALLOC_CTX *talloc_init(char *name);
125 int talloc_free(TALLOC_CTX *ptr);
128 * Wrap struct ldb_val
131 %typemap(in) struct ldb_val *INPUT (struct ldb_val temp) {
132 $1 = &temp;
133 if (!PyString_Check($input)) {
134 PyErr_SetString(PyExc_TypeError, "string arg expected");
135 return NULL;
137 $1->length = PyString_Size($input);
138 $1->data = PyString_AsString($input);
141 %typemap(out) struct ldb_val {
142 $result = PyString_FromStringAndSize($1.data, $1.length);
146 * Wrap struct ldb_result
149 %typemap(in, numinputs=0) struct ldb_result **OUT (struct ldb_result *temp_ldb_result) {
150 $1 = &temp_ldb_result;
153 %typemap(argout) struct ldb_result ** {
154 resultobj = SWIG_NewPointerObj(*$1, SWIGTYPE_p_ldb_result, 0);
157 %types(struct ldb_result *);
160 * Wrap struct ldb_message_element
163 %array_functions(struct ldb_val, ldb_val_array);
165 struct ldb_message_element {
166 unsigned int flags;
167 const char *name;
168 unsigned int num_values;
169 struct ldb_val *values;
173 * Wrap struct ldb_message
176 %array_functions(struct ldb_message_element, ldb_message_element_array);
178 struct ldb_message {
179 struct ldb_dn *dn;
180 unsigned int num_elements;
181 struct ldb_message_element *elements;
182 void *private_data;
186 * Wrap struct ldb_result
189 %array_functions(struct ldb_message *, ldb_message_ptr_array);
191 struct ldb_result {
192 unsigned int count;
193 struct ldb_message **msgs;
194 char **refs;
195 struct ldb_control **controls;
199 * Wrap ldb functions
202 /* Initialisation */
204 int ldb_global_init(void);
205 struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx);
207 /* Error handling */
209 const char *ldb_errstring(struct ldb_context *ldb);
210 const char *ldb_strerror(int ldb_err);
212 /* Top-level ldb operations */
214 int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]);
216 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);
218 int ldb_delete(struct ldb_context *ldb, const struct ldb_dn *dn);
220 int ldb_rename(struct ldb_context *ldb, const struct ldb_dn *olddn, const struct ldb_dn *newdn);
222 int ldb_add(struct ldb_context *ldb, const struct ldb_message *message);
224 /* Ldb message operations */
226 struct ldb_message *ldb_msg_new(void *mem_ctx);
228 struct ldb_message_element *ldb_msg_find_element(const struct ldb_message *msg, const char *attr_name);
230 int ldb_msg_add_value(struct ldb_message *msg, const char *attr_name, const struct ldb_val *INPUT);
232 void ldb_msg_remove_attr(struct ldb_message *msg, const char *attr);
234 int ldb_msg_sanity_check(struct ldb_message *msg);
236 /* DN operations */
238 struct ldb_dn *ldb_dn_explode(void *mem_ctx, const char *dn);
240 char *ldb_dn_linearize(void *mem_ctx, const struct ldb_dn *dn);