2 Unix SMB/CIFS Implementation.
3 LDAP protocol helper functions for SAMBA
4 Copyright (C) Volker Lendecke 2004
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 2 of the License, or
9 (at your option) any later version.
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.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 enum ldap_request_tag
{
26 LDAP_TAG_BindRequest
= 0,
27 LDAP_TAG_BindResponse
= 1,
28 LDAP_TAG_UnbindRequest
= 2,
29 LDAP_TAG_SearchRequest
= 3,
30 LDAP_TAG_SearchResultEntry
= 4,
31 LDAP_TAG_SearchResultDone
= 5,
32 LDAP_TAG_ModifyRequest
= 6,
33 LDAP_TAG_ModifyResponse
= 7,
34 LDAP_TAG_AddRequest
= 8,
35 LDAP_TAG_AddResponse
= 9,
36 LDAP_TAG_DelRequest
= 10,
37 LDAP_TAG_DelResponse
= 11,
38 LDAP_TAG_ModifyDNRequest
= 12,
39 LDAP_TAG_ModifyDNResponse
= 13,
40 LDAP_TAG_CompareRequest
= 14,
41 LDAP_TAG_CompareResponse
= 15,
42 LDAP_TAG_AbandonRequest
= 16,
43 LDAP_TAG_SearchResultReference
= 19,
44 LDAP_TAG_ExtendedRequest
= 23,
45 LDAP_TAG_ExtendedResponse
= 24
48 enum ldap_auth_mechanism
{
49 LDAP_AUTH_MECH_SIMPLE
= 0,
50 LDAP_AUTH_MECH_SASL
= 3
54 enum ldap_result_code
{
56 LDAP_SASL_BIND_IN_PROGRESS
= 0x0e,
57 LDAP_INVALID_CREDENTIALS
= 0x31,
60 #endif /* LDAP_SUCCESS */
65 const char *errormessage
;
69 struct ldap_attribute
{
75 struct ldap_BindRequest
{
78 enum ldap_auth_mechanism mechanism
;
82 const char *mechanism
;
88 struct ldap_BindResponse
{
89 struct ldap_Result response
;
95 struct ldap_UnbindRequest
{
100 LDAP_SEARCH_SCOPE_BASE
= 0,
101 LDAP_SEARCH_SCOPE_SINGLE
= 1,
102 LDAP_SEARCH_SCOPE_SUB
= 2
106 LDAP_DEREFERENCE_NEVER
= 0,
107 LDAP_DEREFERENCE_IN_SEARCHING
= 1,
108 LDAP_DEREFERENCE_FINDING_BASE
= 2,
109 LDAP_DEREFERENCE_ALWAYS
112 struct ldap_SearchRequest
{
114 enum ldap_scope scope
;
115 enum ldap_deref deref
;
121 const char **attributes
;
124 struct ldap_SearchResEntry
{
127 struct ldap_attribute
*attributes
;
130 struct ldap_SearchResRef
{
132 const char **referrals
;
135 enum ldap_modify_type
{
136 LDAP_MODIFY_NONE
= -1,
138 LDAP_MODIFY_DELETE
= 1,
139 LDAP_MODIFY_REPLACE
= 2
143 enum ldap_modify_type type
;
144 struct ldap_attribute attrib
;
147 struct ldap_ModifyRequest
{
150 struct ldap_mod
*mods
;
153 struct ldap_AddRequest
{
156 struct ldap_attribute
*attributes
;
159 struct ldap_DelRequest
{
163 struct ldap_ModifyDNRequest
{
167 const char *newsuperior
;
170 struct ldap_CompareRequest
{
172 const char *attribute
;
176 struct ldap_AbandonRequest
{
180 struct ldap_ExtendedRequest
{
185 struct ldap_ExtendedResponse
{
186 struct ldap_Result response
;
192 struct ldap_BindRequest BindRequest
;
193 struct ldap_BindResponse BindResponse
;
194 struct ldap_UnbindRequest UnbindRequest
;
195 struct ldap_SearchRequest SearchRequest
;
196 struct ldap_SearchResEntry SearchResultEntry
;
197 struct ldap_Result SearchResultDone
;
198 struct ldap_SearchResRef SearchResultReference
;
199 struct ldap_ModifyRequest ModifyRequest
;
200 struct ldap_Result ModifyResponse
;
201 struct ldap_AddRequest AddRequest
;
202 struct ldap_Result AddResponse
;
203 struct ldap_DelRequest DelRequest
;
204 struct ldap_Result DelResponse
;
205 struct ldap_ModifyDNRequest ModifyDNRequest
;
206 struct ldap_Result ModifyDNResponse
;
207 struct ldap_CompareRequest CompareRequest
;
208 struct ldap_Result CompareResponse
;
209 struct ldap_AbandonRequest AbandonRequest
;
210 struct ldap_ExtendedRequest ExtendedRequest
;
211 struct ldap_ExtendedResponse ExtendedResponse
;
214 struct ldap_Control
{
220 struct ldap_message
{
224 union ldap_Request r
;
226 struct ldap_Control
*controls
;
229 struct ldap_queue_entry
{
230 struct ldap_queue_entry
*next
, *prev
;
232 struct ldap_message
*msg
;
235 struct ldap_connection
{
244 const char *simple_pw
;
246 /* Current outstanding search entry */
249 /* List for incoming search entries */
250 struct ldap_queue_entry
*search_entries
;
252 /* Outstanding LDAP requests that have not yet been replied to */
253 struct ldap_queue_entry
*outstanding
;