~zulcss/samba/server-dailies-3.0.37

1 by Chuck Short
Initial commit
1
/* 
2
   Unix SMB/CIFS Implementation.
3
   LDAP protocol helper functions for SAMBA
4
   Copyright (C) Volker Lendecke 2004
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 2 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, write to the Free Software
18
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
   
20
*/
21
22
#ifndef _SMB_LDAP_H
23
#define _SMB_LDAP_H
24
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
46
};
47
48
enum ldap_auth_mechanism {
49
	LDAP_AUTH_MECH_SIMPLE = 0,
50
	LDAP_AUTH_MECH_SASL = 3
51
};
52
53
#ifndef LDAP_SUCCESS
54
enum ldap_result_code {
55
	LDAP_SUCCESS = 0,
56
	LDAP_SASL_BIND_IN_PROGRESS = 0x0e,
57
	LDAP_INVALID_CREDENTIALS = 0x31,
58
	LDAP_OTHER = 0x50
59
};
60
#endif /* LDAP_SUCCESS */
61
62
struct ldap_Result {
63
	int resultcode;
64
	const char *dn;
65
	const char *errormessage;
66
	const char *referral;
67
};
68
69
struct ldap_attribute {
70
	const char *name;
71
	int num_values;
72
	DATA_BLOB *values;
73
};
74
75
struct ldap_BindRequest {
76
	int version;
77
	const char *dn;
78
	enum ldap_auth_mechanism mechanism;
79
	union {
80
		const char *password;
81
		struct {
82
			const char *mechanism;
83
			DATA_BLOB secblob;
84
		} SASL;
85
	} creds;
86
};
87
88
struct ldap_BindResponse {
89
	struct ldap_Result response;
90
	union {
91
		DATA_BLOB secblob;
92
	} SASL;
93
};
94
95
struct ldap_UnbindRequest {
96
	uint8 __dummy;
97
};
98
99
enum ldap_scope {
100
	LDAP_SEARCH_SCOPE_BASE = 0,
101
	LDAP_SEARCH_SCOPE_SINGLE = 1,
102
	LDAP_SEARCH_SCOPE_SUB = 2
103
};
104
105
enum ldap_deref {
106
	LDAP_DEREFERENCE_NEVER = 0,
107
	LDAP_DEREFERENCE_IN_SEARCHING = 1,
108
	LDAP_DEREFERENCE_FINDING_BASE = 2,
109
	LDAP_DEREFERENCE_ALWAYS
110
};
111
112
struct ldap_SearchRequest {
113
	const char *basedn;
114
	enum ldap_scope scope;
115
	enum ldap_deref deref;
116
	uint32 timelimit;
117
	uint32 sizelimit;
118
	BOOL attributesonly;
119
	char *filter;
120
	int num_attributes;
121
	const char **attributes;
122
};
123
124
struct ldap_SearchResEntry {
125
	const char *dn;
126
	int num_attributes;
127
	struct ldap_attribute *attributes;
128
};
129
130
struct ldap_SearchResRef {
131
	int num_referrals;
132
	const char **referrals;
133
};
134
135
enum ldap_modify_type {
136
	LDAP_MODIFY_NONE = -1,
137
	LDAP_MODIFY_ADD = 0,
138
	LDAP_MODIFY_DELETE = 1,
139
	LDAP_MODIFY_REPLACE = 2
140
};
141
142
struct ldap_mod {
143
	enum ldap_modify_type type;
144
	struct ldap_attribute attrib;
145
};
146
147
struct ldap_ModifyRequest {
148
	const char *dn;
149
	int num_mods;
150
	struct ldap_mod *mods;
151
};
152
153
struct ldap_AddRequest {
154
	const char *dn;
155
	int num_attributes;
156
	struct ldap_attribute *attributes;
157
};
158
159
struct ldap_DelRequest {
160
	const char *dn;
161
};
162
163
struct ldap_ModifyDNRequest {
164
	const char *dn;
165
	const char *newrdn;
166
	BOOL deleteolddn;
167
	const char *newsuperior;
168
};
169
170
struct ldap_CompareRequest {
171
	const char *dn;
172
	const char *attribute;
173
	const char *value;
174
};
175
176
struct ldap_AbandonRequest {
177
	uint32 messageid;
178
};
179
180
struct ldap_ExtendedRequest {
181
	const char *oid;
182
	DATA_BLOB value;
183
};
184
185
struct ldap_ExtendedResponse {
186
	struct ldap_Result response;
187
	const char *name;
188
	DATA_BLOB value;
189
};
190
191
union ldap_Request {
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;
212
};
213
214
struct ldap_Control {
215
	const char *oid;
216
	BOOL        critical;
217
	DATA_BLOB   value;
218
};
219
220
struct ldap_message {
221
	TALLOC_CTX	       *mem_ctx;
222
	uint32                  messageid;
223
	uint8                   type;
224
	union  ldap_Request     r;
225
	int			num_controls;
226
	struct ldap_Control    *controls;
227
};
228
229
struct ldap_queue_entry {
230
	struct ldap_queue_entry *next, *prev;
231
	int msgid;
232
	struct ldap_message *msg;
233
};
234
235
struct ldap_connection {
236
	TALLOC_CTX *mem_ctx;
237
	int sock;
238
	int next_msgid;
239
	char *host;
240
	uint16 port;
241
	BOOL ldaps;
242
243
	const char *auth_dn;
244
	const char *simple_pw;
245
246
	/* Current outstanding search entry */
247
	int searchid;
248
249
	/* List for incoming search entries */
250
	struct ldap_queue_entry *search_entries;
251
252
	/* Outstanding LDAP requests that have not yet been replied to */
253
	struct ldap_queue_entry *outstanding;
254
};
255
256
#endif