1 | /*
|
---|
2 | Unix SMB/CIFS implementation.
|
---|
3 | Infrastructure for async ldap client requests
|
---|
4 | Copyright (C) Volker Lendecke 2009
|
---|
5 |
|
---|
6 | This program is free software; you can redistribute it and/or modify
|
---|
7 | it under the terms of the GNU General Public License as published by
|
---|
8 | the Free Software Foundation; either version 3 of the License, or
|
---|
9 | (at your option) any later version.
|
---|
10 |
|
---|
11 | This program is distributed in the hope that it will be useful,
|
---|
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
14 | GNU General Public License for more details.
|
---|
15 |
|
---|
16 | You should have received a copy of the GNU General Public License
|
---|
17 | along with this program. If not, see <http://www.gnu.org/licenses/>.
|
---|
18 | */
|
---|
19 |
|
---|
20 | #ifndef __TLDAP_H__
|
---|
21 | #define __TLDAP_H__
|
---|
22 |
|
---|
23 | #include <talloc.h>
|
---|
24 | #include <tevent.h>
|
---|
25 |
|
---|
26 | struct tldap_context;
|
---|
27 | struct tldap_message;
|
---|
28 |
|
---|
29 | struct tldap_control {
|
---|
30 | const char *oid;
|
---|
31 | DATA_BLOB value;
|
---|
32 | bool critical;
|
---|
33 | };
|
---|
34 |
|
---|
35 | struct tldap_attribute {
|
---|
36 | char *name;
|
---|
37 | int num_values;
|
---|
38 | DATA_BLOB *values;
|
---|
39 | };
|
---|
40 |
|
---|
41 | struct tldap_mod {
|
---|
42 | int mod_op;
|
---|
43 | char *attribute;
|
---|
44 | int num_values;
|
---|
45 | DATA_BLOB *values;
|
---|
46 | };
|
---|
47 |
|
---|
48 | bool tevent_req_is_ldap_error(struct tevent_req *req, int *perr);
|
---|
49 |
|
---|
50 | struct tldap_context *tldap_context_create(TALLOC_CTX *mem_ctx, int fd);
|
---|
51 | bool tldap_connection_ok(struct tldap_context *ld);
|
---|
52 | bool tldap_context_setattr(struct tldap_context *ld,
|
---|
53 | const char *name, const void *pptr);
|
---|
54 | void *tldap_context_getattr(struct tldap_context *ld, const char *name);
|
---|
55 |
|
---|
56 | struct tevent_req *tldap_sasl_bind_send(TALLOC_CTX *mem_ctx,
|
---|
57 | struct tevent_context *ev,
|
---|
58 | struct tldap_context *ld,
|
---|
59 | const char *dn,
|
---|
60 | const char *mechanism,
|
---|
61 | DATA_BLOB *creds,
|
---|
62 | struct tldap_control *sctrls,
|
---|
63 | int num_sctrls,
|
---|
64 | struct tldap_control *cctrls,
|
---|
65 | int num_cctrls);
|
---|
66 | int tldap_sasl_bind_recv(struct tevent_req *req);
|
---|
67 | int tldap_sasl_bind(struct tldap_context *ldap,
|
---|
68 | const char *dn,
|
---|
69 | const char *mechanism,
|
---|
70 | DATA_BLOB *creds,
|
---|
71 | struct tldap_control *sctrls,
|
---|
72 | int num_sctrls,
|
---|
73 | struct tldap_control *cctrls,
|
---|
74 | int num_ctrls);
|
---|
75 |
|
---|
76 | struct tevent_req *tldap_simple_bind_send(TALLOC_CTX *mem_ctx,
|
---|
77 | struct tevent_context *ev,
|
---|
78 | struct tldap_context *ldap,
|
---|
79 | const char *dn,
|
---|
80 | const char *passwd);
|
---|
81 | int tldap_simple_bind_recv(struct tevent_req *req);
|
---|
82 | int tldap_simple_bind(struct tldap_context *ldap, const char *dn,
|
---|
83 | const char *passwd);
|
---|
84 |
|
---|
85 | struct tevent_req *tldap_search_send(TALLOC_CTX *mem_ctx,
|
---|
86 | struct tevent_context *ev,
|
---|
87 | struct tldap_context *ld,
|
---|
88 | const char *base, int scope,
|
---|
89 | const char *filter,
|
---|
90 | const char **attrs,
|
---|
91 | int num_attrs,
|
---|
92 | int attrsonly,
|
---|
93 | struct tldap_control *sctrls,
|
---|
94 | int num_sctrls,
|
---|
95 | struct tldap_control *cctrls,
|
---|
96 | int num_cctrls,
|
---|
97 | int timelimit,
|
---|
98 | int sizelimit,
|
---|
99 | int deref);
|
---|
100 | int tldap_search_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
|
---|
101 | struct tldap_message **pmsg);
|
---|
102 | int tldap_search(struct tldap_context *ld,
|
---|
103 | const char *base, int scope, const char *filter,
|
---|
104 | const char **attrs, int num_attrs, int attrsonly,
|
---|
105 | struct tldap_control *sctrls, int num_sctrls,
|
---|
106 | struct tldap_control *cctrls, int num_cctrls,
|
---|
107 | int timelimit, int sizelimit, int deref,
|
---|
108 | TALLOC_CTX *mem_ctx, struct tldap_message ***entries,
|
---|
109 | struct tldap_message ***refs);
|
---|
110 | bool tldap_entry_dn(struct tldap_message *msg, char **dn);
|
---|
111 | bool tldap_entry_attributes(struct tldap_message *msg, int *num_attributes,
|
---|
112 | struct tldap_attribute **attributes);
|
---|
113 |
|
---|
114 | struct tevent_req *tldap_add_send(TALLOC_CTX *mem_ctx,
|
---|
115 | struct tevent_context *ev,
|
---|
116 | struct tldap_context *ld,
|
---|
117 | const char *dn,
|
---|
118 | struct tldap_mod *attributes,
|
---|
119 | int num_attributes,
|
---|
120 | struct tldap_control *sctrls,
|
---|
121 | int num_sctrls,
|
---|
122 | struct tldap_control *cctrls,
|
---|
123 | int num_cctrls);
|
---|
124 | int tldap_add_recv(struct tevent_req *req);
|
---|
125 | int tldap_add(struct tldap_context *ld, const char *dn,
|
---|
126 | int num_attributes, struct tldap_mod *attributes,
|
---|
127 | struct tldap_control *sctrls, int num_sctrls,
|
---|
128 | struct tldap_control *cctrls, int num_cctrls);
|
---|
129 |
|
---|
130 | struct tevent_req *tldap_modify_send(TALLOC_CTX *mem_ctx,
|
---|
131 | struct tevent_context *ev,
|
---|
132 | struct tldap_context *ld,
|
---|
133 | const char *dn,
|
---|
134 | int num_mods, struct tldap_mod *mods,
|
---|
135 | struct tldap_control *sctrls,
|
---|
136 | int num_sctrls,
|
---|
137 | struct tldap_control *cctrls,
|
---|
138 | int num_cctrls);
|
---|
139 | int tldap_modify_recv(struct tevent_req *req);
|
---|
140 | int tldap_modify(struct tldap_context *ld, const char *dn,
|
---|
141 | int num_mods, struct tldap_mod *mods,
|
---|
142 | struct tldap_control *sctrls, int num_sctrls,
|
---|
143 | struct tldap_control *cctrls, int num_cctrls);
|
---|
144 |
|
---|
145 | struct tevent_req *tldap_delete_send(TALLOC_CTX *mem_ctx,
|
---|
146 | struct tevent_context *ev,
|
---|
147 | struct tldap_context *ld,
|
---|
148 | const char *dn,
|
---|
149 | struct tldap_control *sctrls,
|
---|
150 | int num_sctrls,
|
---|
151 | struct tldap_control *cctrls,
|
---|
152 | int num_cctrls);
|
---|
153 | int tldap_delete_recv(struct tevent_req *req);
|
---|
154 | int tldap_delete(struct tldap_context *ld, const char *dn,
|
---|
155 | struct tldap_control *sctrls, int num_sctrls,
|
---|
156 | struct tldap_control *cctrls, int num_cctrls);
|
---|
157 |
|
---|
158 | int tldap_msg_id(const struct tldap_message *msg);
|
---|
159 | int tldap_msg_type(const struct tldap_message *msg);
|
---|
160 | const char *tldap_msg_matcheddn(struct tldap_message *msg);
|
---|
161 | const char *tldap_msg_diagnosticmessage(struct tldap_message *msg);
|
---|
162 | const char *tldap_msg_referral(struct tldap_message *msg);
|
---|
163 | void tldap_msg_sctrls(struct tldap_message *msg, int *num_sctrls,
|
---|
164 | struct tldap_control **sctrls);
|
---|
165 | struct tldap_message *tldap_ctx_lastmsg(struct tldap_context *ld);
|
---|
166 | const char *tldap_err2string(int rc);
|
---|
167 |
|
---|
168 | /* DEBUG */
|
---|
169 | enum tldap_debug_level {
|
---|
170 | TLDAP_DEBUG_FATAL,
|
---|
171 | TLDAP_DEBUG_ERROR,
|
---|
172 | TLDAP_DEBUG_WARNING,
|
---|
173 | TLDAP_DEBUG_TRACE
|
---|
174 | };
|
---|
175 |
|
---|
176 | void tldap_set_debug(struct tldap_context *ld,
|
---|
177 | void (*log_fn)(void *log_private,
|
---|
178 | enum tldap_debug_level level,
|
---|
179 | const char *fmt,
|
---|
180 | va_list ap) PRINTF_ATTRIBUTE(3,0),
|
---|
181 | void *log_private);
|
---|
182 |
|
---|
183 | /*
|
---|
184 | * "+ 0x60" is from ASN1_APPLICATION
|
---|
185 | */
|
---|
186 | #define TLDAP_REQ_BIND (0 + 0x60)
|
---|
187 | #define TLDAP_RES_BIND (1 + 0x60)
|
---|
188 | #define TLDAP_REQ_UNBIND (2 + 0x60)
|
---|
189 | #define TLDAP_REQ_SEARCH (3 + 0x60)
|
---|
190 | #define TLDAP_RES_SEARCH_ENTRY (4 + 0x60)
|
---|
191 | #define TLDAP_RES_SEARCH_RESULT (5 + 0x60)
|
---|
192 | #define TLDAP_REQ_MODIFY (6 + 0x60)
|
---|
193 | #define TLDAP_RES_MODIFY (7 + 0x60)
|
---|
194 | #define TLDAP_REQ_ADD (8 + 0x60)
|
---|
195 | #define TLDAP_RES_ADD (9 + 0x60)
|
---|
196 | /* ASN1_APPLICATION_SIMPLE instead of ASN1_APPLICATION */
|
---|
197 | #define TLDAP_REQ_DELETE (10 + 0x40)
|
---|
198 | #define TLDAP_RES_DELETE (11 + 0x60)
|
---|
199 | #define TLDAP_REQ_MODDN (12 + 0x60)
|
---|
200 | #define TLDAP_RES_MODDN (13 + 0x60)
|
---|
201 | #define TLDAP_REQ_COMPARE (14 + 0x60)
|
---|
202 | #define TLDAP_RES_COMPARE (15 + 0x60)
|
---|
203 | /* ASN1_APPLICATION_SIMPLE instead of ASN1_APPLICATION */
|
---|
204 | #define TLDAP_REQ_ABANDON (16 + 0x40)
|
---|
205 | #define TLDAP_RES_SEARCH_REFERENCE (19 + 0x60)
|
---|
206 | #define TLDAP_REQ_EXTENDED (23 + 0x60)
|
---|
207 | #define TLDAP_RES_EXTENDED (24 + 0x60)
|
---|
208 | #define TLDAP_RES_INTERMEDIATE (25 + 0x60)
|
---|
209 |
|
---|
210 | #define TLDAP_SUCCESS (0x00)
|
---|
211 | #define TLDAP_OPERATIONS_ERROR (0x01)
|
---|
212 | #define TLDAP_PROTOCOL_ERROR (0x02)
|
---|
213 | #define TLDAP_TIMELIMIT_EXCEEDED (0x03)
|
---|
214 | #define TLDAP_SIZELIMIT_EXCEEDED (0x04)
|
---|
215 | #define TLDAP_COMPARE_FALSE (0x05)
|
---|
216 | #define TLDAP_COMPARE_TRUE (0x06)
|
---|
217 | #define TLDAP_STRONG_AUTH_NOT_SUPPORTED (0x07)
|
---|
218 | #define TLDAP_STRONG_AUTH_REQUIRED (0x08)
|
---|
219 | #define TLDAP_REFERRAL (0x0a)
|
---|
220 | #define TLDAP_ADMINLIMIT_EXCEEDED (0x0b)
|
---|
221 | #define TLDAP_UNAVAILABLE_CRITICAL_EXTENSION (0x0c)
|
---|
222 | #define TLDAP_CONFIDENTIALITY_REQUIRED (0x0d)
|
---|
223 | #define TLDAP_SASL_BIND_IN_PROGRESS (0x0e)
|
---|
224 | #define TLDAP_NO_SUCH_ATTRIBUTE (0x10)
|
---|
225 | #define TLDAP_UNDEFINED_TYPE (0x11)
|
---|
226 | #define TLDAP_INAPPROPRIATE_MATCHING (0x12)
|
---|
227 | #define TLDAP_CONSTRAINT_VIOLATION (0x13)
|
---|
228 | #define TLDAP_TYPE_OR_VALUE_EXISTS (0x14)
|
---|
229 | #define TLDAP_INVALID_SYNTAX (0x15)
|
---|
230 | #define TLDAP_NO_SUCH_OBJECT (0x20)
|
---|
231 | #define TLDAP_ALIAS_PROBLEM (0x21)
|
---|
232 | #define TLDAP_INVALID_DN_SYNTAX (0x22)
|
---|
233 | #define TLDAP_IS_LEAF (0x23)
|
---|
234 | #define TLDAP_ALIAS_DEREF_PROBLEM (0x24)
|
---|
235 | #define TLDAP_INAPPROPRIATE_AUTH (0x30)
|
---|
236 | #define TLDAP_INVALID_CREDENTIALS (0x31)
|
---|
237 | #define TLDAP_INSUFFICIENT_ACCESS (0x32)
|
---|
238 | #define TLDAP_BUSY (0x33)
|
---|
239 | #define TLDAP_UNAVAILABLE (0x34)
|
---|
240 | #define TLDAP_UNWILLING_TO_PERFORM (0x35)
|
---|
241 | #define TLDAP_LOOP_DETECT (0x36)
|
---|
242 | #define TLDAP_NAMING_VIOLATION (0x40)
|
---|
243 | #define TLDAP_OBJECT_CLASS_VIOLATION (0x41)
|
---|
244 | #define TLDAP_NOT_ALLOWED_ON_NONLEAF (0x42)
|
---|
245 | #define TLDAP_NOT_ALLOWED_ON_RDN (0x43)
|
---|
246 | #define TLDAP_ALREADY_EXISTS (0x44)
|
---|
247 | #define TLDAP_NO_OBJECT_CLASS_MODS (0x45)
|
---|
248 | #define TLDAP_RESULTS_TOO_LARGE (0x46)
|
---|
249 | #define TLDAP_AFFECTS_MULTIPLE_DSAS (0x47)
|
---|
250 | #define TLDAP_OTHER (0x50)
|
---|
251 | #define TLDAP_SERVER_DOWN (0x51)
|
---|
252 | #define TLDAP_LOCAL_ERROR (0x52)
|
---|
253 | #define TLDAP_ENCODING_ERROR (0x53)
|
---|
254 | #define TLDAP_DECODING_ERROR (0x54)
|
---|
255 | #define TLDAP_TIMEOUT (0x55)
|
---|
256 | #define TLDAP_AUTH_UNKNOWN (0x56)
|
---|
257 | #define TLDAP_FILTER_ERROR (0x57)
|
---|
258 | #define TLDAP_USER_CANCELLED (0x58)
|
---|
259 | #define TLDAP_PARAM_ERROR (0x59)
|
---|
260 | #define TLDAP_NO_MEMORY (0x5a)
|
---|
261 | #define TLDAP_CONNECT_ERROR (0x5b)
|
---|
262 | #define TLDAP_NOT_SUPPORTED (0x5c)
|
---|
263 | #define TLDAP_CONTROL_NOT_FOUND (0x5d)
|
---|
264 | #define TLDAP_NO_RESULTS_RETURNED (0x5e)
|
---|
265 | #define TLDAP_MORE_RESULTS_TO_RETURN (0x5f)
|
---|
266 | #define TLDAP_CLIENT_LOOP (0x60)
|
---|
267 | #define TLDAP_REFERRAL_LIMIT_EXCEEDED (0x61)
|
---|
268 |
|
---|
269 | #define TLDAP_MOD_ADD (0)
|
---|
270 | #define TLDAP_MOD_DELETE (1)
|
---|
271 | #define TLDAP_MOD_REPLACE (2)
|
---|
272 |
|
---|
273 | #define TLDAP_SCOPE_BASE (0)
|
---|
274 | #define TLDAP_SCOPE_ONE (1)
|
---|
275 | #define TLDAP_SCOPE_SUB (2)
|
---|
276 |
|
---|
277 | #define TLDAP_CONTROL_PAGEDRESULTS "1.2.840.113556.1.4.319"
|
---|
278 |
|
---|
279 | #endif
|
---|