wow32: Use spec file imports.
[wine.git] / dlls / wldap32 / error.c
blobc8897165d1d5f98bb8445526df245d0b9f133e4f
1 /*
2 * WLDAP32 - LDAP support for Wine
4 * Copyright 2005 Hans Leidekker
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library 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 GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <stdarg.h>
22 #include "windef.h"
23 #include "winbase.h"
24 #include "winuser.h"
25 #include "winnls.h"
27 #include "wine/debug.h"
28 #include "winldap_private.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
32 extern HINSTANCE hwldap32 DECLSPEC_HIDDEN;
34 ULONG map_error( int error )
36 switch (error)
38 case LDAP_SUCCESS: return WLDAP32_LDAP_SUCCESS;
39 case LDAP_OPERATIONS_ERROR: return WLDAP32_LDAP_OPERATIONS_ERROR;
40 case LDAP_PROTOCOL_ERROR: return WLDAP32_LDAP_PROTOCOL_ERROR;
41 case LDAP_TIMELIMIT_EXCEEDED: return WLDAP32_LDAP_TIMELIMIT_EXCEEDED;
42 case LDAP_SIZELIMIT_EXCEEDED: return WLDAP32_LDAP_SIZELIMIT_EXCEEDED;
43 case LDAP_COMPARE_FALSE: return WLDAP32_LDAP_COMPARE_FALSE;
44 case LDAP_COMPARE_TRUE: return WLDAP32_LDAP_COMPARE_TRUE;
45 case LDAP_AUTH_METHOD_NOT_SUPPORTED: return WLDAP32_LDAP_AUTH_METHOD_NOT_SUPPORTED;
46 case LDAP_STRONG_AUTH_REQUIRED: return WLDAP32_LDAP_STRONG_AUTH_REQUIRED;
47 case LDAP_PARTIAL_RESULTS: return WLDAP32_LDAP_PARTIAL_RESULTS;
48 case LDAP_REFERRAL: return WLDAP32_LDAP_REFERRAL;
49 case LDAP_ADMINLIMIT_EXCEEDED: return WLDAP32_LDAP_ADMIN_LIMIT_EXCEEDED;
50 case LDAP_UNAVAILABLE_CRITICAL_EXTENSION: return WLDAP32_LDAP_UNAVAILABLE_CRIT_EXTENSION;
51 case LDAP_CONFIDENTIALITY_REQUIRED: return WLDAP32_LDAP_CONFIDENTIALITY_REQUIRED;
52 case LDAP_SASL_BIND_IN_PROGRESS: return WLDAP32_LDAP_SASL_BIND_IN_PROGRESS;
53 case LDAP_NO_SUCH_ATTRIBUTE: return WLDAP32_LDAP_NO_SUCH_ATTRIBUTE;
54 case LDAP_UNDEFINED_TYPE: return WLDAP32_LDAP_UNDEFINED_TYPE;
55 case LDAP_INAPPROPRIATE_MATCHING: return WLDAP32_LDAP_INAPPROPRIATE_MATCHING;
56 case LDAP_CONSTRAINT_VIOLATION: return WLDAP32_LDAP_CONSTRAINT_VIOLATION;
57 case LDAP_TYPE_OR_VALUE_EXISTS: return WLDAP32_LDAP_ATTRIBUTE_OR_VALUE_EXISTS;
58 case LDAP_INVALID_SYNTAX: return WLDAP32_LDAP_INVALID_SYNTAX;
59 case LDAP_NO_SUCH_OBJECT: return WLDAP32_LDAP_NO_SUCH_OBJECT;
60 case LDAP_ALIAS_PROBLEM: return WLDAP32_LDAP_ALIAS_PROBLEM;
61 case LDAP_INVALID_DN_SYNTAX: return WLDAP32_LDAP_INVALID_DN_SYNTAX;
62 case LDAP_IS_LEAF: return WLDAP32_LDAP_IS_LEAF;
63 case LDAP_ALIAS_DEREF_PROBLEM: return WLDAP32_LDAP_ALIAS_DEREF_PROBLEM;
64 case LDAP_INAPPROPRIATE_AUTH: return WLDAP32_LDAP_INAPPROPRIATE_AUTH;
65 case LDAP_INVALID_CREDENTIALS: return WLDAP32_LDAP_INVALID_CREDENTIALS;
66 case LDAP_INSUFFICIENT_ACCESS: return WLDAP32_LDAP_INSUFFICIENT_RIGHTS;
67 case LDAP_BUSY: return WLDAP32_LDAP_BUSY;
68 case LDAP_UNAVAILABLE: return WLDAP32_LDAP_UNAVAILABLE;
69 case LDAP_UNWILLING_TO_PERFORM: return WLDAP32_LDAP_UNWILLING_TO_PERFORM;
70 case LDAP_LOOP_DETECT: return WLDAP32_LDAP_LOOP_DETECT;
71 case LDAP_NAMING_VIOLATION: return WLDAP32_LDAP_NAMING_VIOLATION;
72 case LDAP_OBJECT_CLASS_VIOLATION: return WLDAP32_LDAP_OBJECT_CLASS_VIOLATION;
73 case LDAP_NOT_ALLOWED_ON_NONLEAF: return WLDAP32_LDAP_NOT_ALLOWED_ON_NONLEAF;
74 case LDAP_NOT_ALLOWED_ON_RDN: return WLDAP32_LDAP_NOT_ALLOWED_ON_RDN;
75 case LDAP_ALREADY_EXISTS: return WLDAP32_LDAP_ALREADY_EXISTS;
76 case LDAP_NO_OBJECT_CLASS_MODS: return WLDAP32_LDAP_NO_OBJECT_CLASS_MODS;
77 case LDAP_RESULTS_TOO_LARGE: return WLDAP32_LDAP_RESULTS_TOO_LARGE;
78 case LDAP_AFFECTS_MULTIPLE_DSAS: return WLDAP32_LDAP_AFFECTS_MULTIPLE_DSAS;
79 case LDAP_VLV_ERROR: return WLDAP32_LDAP_VIRTUAL_LIST_VIEW_ERROR;
80 case LDAP_OTHER: return WLDAP32_LDAP_OTHER;
81 case LDAP_SERVER_DOWN: return WLDAP32_LDAP_SERVER_DOWN;
82 case LDAP_LOCAL_ERROR: return WLDAP32_LDAP_LOCAL_ERROR;
83 case LDAP_ENCODING_ERROR: return WLDAP32_LDAP_ENCODING_ERROR;
84 case LDAP_DECODING_ERROR: return WLDAP32_LDAP_DECODING_ERROR;
85 case LDAP_TIMEOUT: return WLDAP32_LDAP_TIMEOUT;
86 case LDAP_AUTH_UNKNOWN: return WLDAP32_LDAP_AUTH_UNKNOWN;
87 case LDAP_FILTER_ERROR: return WLDAP32_LDAP_FILTER_ERROR;
88 case LDAP_USER_CANCELLED: return WLDAP32_LDAP_USER_CANCELLED;
89 case LDAP_PARAM_ERROR: return WLDAP32_LDAP_PARAM_ERROR;
90 case LDAP_NO_MEMORY: return WLDAP32_LDAP_NO_MEMORY;
91 case LDAP_CONNECT_ERROR: return WLDAP32_LDAP_CONNECT_ERROR;
92 case LDAP_NOT_SUPPORTED: return WLDAP32_LDAP_NOT_SUPPORTED;
93 case LDAP_CONTROL_NOT_FOUND: return WLDAP32_LDAP_CONTROL_NOT_FOUND;
94 case LDAP_NO_RESULTS_RETURNED: return WLDAP32_LDAP_NO_RESULTS_RETURNED;
95 case LDAP_MORE_RESULTS_TO_RETURN: return WLDAP32_LDAP_MORE_RESULTS_TO_RETURN;
96 case LDAP_CLIENT_LOOP: return WLDAP32_LDAP_CLIENT_LOOP;
97 case LDAP_REFERRAL_LIMIT_EXCEEDED: return WLDAP32_LDAP_REFERRAL_LIMIT_EXCEEDED;
98 default:
99 FIXME( "no mapping for %d\n", error );
100 return error;
104 /***********************************************************************
105 * ldap_err2stringA (WLDAP32.@)
107 char * CDECL ldap_err2stringA( ULONG err )
109 static char buf[256] = "";
111 TRACE( "(%#lx)\n", err );
113 if (err <= WLDAP32_LDAP_REFERRAL_LIMIT_EXCEEDED)
114 LoadStringA( hwldap32, err, buf, 256 );
115 else
116 LoadStringA( hwldap32, WLDAP32_LDAP_LOCAL_ERROR, buf, 256 );
118 return buf;
121 /***********************************************************************
122 * ldap_err2stringW (WLDAP32.@)
124 WCHAR * CDECL ldap_err2stringW( ULONG err )
126 static WCHAR buf[256] = { 0 };
128 TRACE( "(%#lx)\n", err );
130 if (err <= WLDAP32_LDAP_REFERRAL_LIMIT_EXCEEDED)
131 LoadStringW( hwldap32, err, buf, 256 );
132 else
133 LoadStringW( hwldap32, WLDAP32_LDAP_LOCAL_ERROR, buf, 256 );
135 return buf;
138 /***********************************************************************
139 * ldap_perror (WLDAP32.@)
141 void CDECL WLDAP32_ldap_perror( LDAP *ld, const PCHAR msg )
143 TRACE( "(%p, %s)\n", ld, debugstr_a(msg) );
146 /***********************************************************************
147 * ldap_result2error (WLDAP32.@)
149 ULONG CDECL WLDAP32_ldap_result2error( LDAP *ld, LDAPMessage *res, ULONG free )
151 int error;
153 TRACE( "(%p, %p, %#lx)\n", ld, res, free );
155 if (ld && res && !ldap_parse_result( CTX(ld), MSG(res), &error, NULL, NULL, NULL, NULL, free ))
156 return error;
158 return ~0u;
161 /***********************************************************************
162 * LdapGetLastError (WLDAP32.@)
164 ULONG CDECL LdapGetLastError( void )
166 TRACE( "\n" );
167 return GetLastError();
170 static const ULONG errormap[] = {
171 /* LDAP_SUCCESS */ ERROR_SUCCESS,
172 /* LDAP_OPERATIONS_ERROR */ ERROR_OPEN_FAILED,
173 /* LDAP_PROTOCOL_ERROR */ ERROR_INVALID_LEVEL,
174 /* LDAP_TIMELIMIT_EXCEEDED */ ERROR_TIMEOUT,
175 /* LDAP_SIZELIMIT_EXCEEDED */ ERROR_MORE_DATA,
176 /* LDAP_COMPARE_FALSE */ ERROR_DS_GENERIC_ERROR,
177 /* LDAP_COMPARE_TRUE */ ERROR_DS_GENERIC_ERROR,
178 /* LDAP_AUTH_METHOD_NOT_SUPPORTED */ ERROR_ACCESS_DENIED,
179 /* LDAP_STRONG_AUTH_REQUIRED */ ERROR_ACCESS_DENIED,
180 /* LDAP_REFERRAL_V2 */ ERROR_MORE_DATA,
181 /* LDAP_REFERRAL */ ERROR_MORE_DATA,
182 /* LDAP_ADMIN_LIMIT_EXCEEDED */ ERROR_NOT_ENOUGH_QUOTA,
183 /* LDAP_UNAVAILABLE_CRIT_EXTENSION */ ERROR_CAN_NOT_COMPLETE,
184 /* LDAP_CONFIDENTIALITY_REQUIRED */ ERROR_DS_GENERIC_ERROR,
185 /* LDAP_SASL_BIND_IN_PROGRESS */ ERROR_DS_GENERIC_ERROR,
186 /* 0x0f */ ERROR_DS_GENERIC_ERROR,
187 /* LDAP_NO_SUCH_ATTRIBUTE */ ERROR_INVALID_PARAMETER,
188 /* LDAP_UNDEFINED_TYPE */ ERROR_DS_GENERIC_ERROR,
189 /* LDAP_INAPPROPRIATE_MATCHING */ ERROR_INVALID_PARAMETER,
190 /* LDAP_CONSTRAINT_VIOLATION */ ERROR_INVALID_PARAMETER,
191 /* LDAP_ATTRIBUTE_OR_VALUE_EXISTS */ ERROR_ALREADY_EXISTS,
192 /* LDAP_INVALID_SYNTAX */ ERROR_INVALID_NAME,
193 /* 0x16 */ ERROR_DS_GENERIC_ERROR,
194 /* 0x17 */ ERROR_DS_GENERIC_ERROR,
195 /* 0x18 */ ERROR_DS_GENERIC_ERROR,
196 /* 0x19 */ ERROR_DS_GENERIC_ERROR,
197 /* 0x1a */ ERROR_DS_GENERIC_ERROR,
198 /* 0x1b */ ERROR_DS_GENERIC_ERROR,
199 /* 0x1c */ ERROR_DS_GENERIC_ERROR,
200 /* 0x1d */ ERROR_DS_GENERIC_ERROR,
201 /* 0x1e */ ERROR_DS_GENERIC_ERROR,
202 /* 0x1f */ ERROR_DS_GENERIC_ERROR,
203 /* LDAP_NO_SUCH_OBJECT */ ERROR_FILE_NOT_FOUND,
204 /* LDAP_ALIAS_PROBLEM */ ERROR_DS_GENERIC_ERROR,
205 /* LDAP_INVALID_DN_SYNTAX */ ERROR_INVALID_PARAMETER,
206 /* LDAP_IS_LEAF */ ERROR_DS_GENERIC_ERROR,
207 /* LDAP_ALIAS_DEREF_PROBLEM */ ERROR_DS_GENERIC_ERROR,
208 /* 0x25 */ ERROR_DS_GENERIC_ERROR,
209 /* 0x26 */ ERROR_DS_GENERIC_ERROR,
210 /* 0x27 */ ERROR_DS_GENERIC_ERROR,
211 /* 0x28 */ ERROR_DS_GENERIC_ERROR,
212 /* 0x29 */ ERROR_DS_GENERIC_ERROR,
213 /* 0x2a */ ERROR_DS_GENERIC_ERROR,
214 /* 0x2b */ ERROR_DS_GENERIC_ERROR,
215 /* 0x2c */ ERROR_DS_GENERIC_ERROR,
216 /* 0x2d */ ERROR_DS_GENERIC_ERROR,
217 /* 0x2e */ ERROR_DS_GENERIC_ERROR,
218 /* 0x2f */ ERROR_DS_GENERIC_ERROR,
219 /* LDAP_INAPPROPRIATE_AUTH */ ERROR_ACCESS_DENIED,
220 /* LDAP_INVALID_CREDENTIALS */ ERROR_WRONG_PASSWORD,
221 /* LDAP_INSUFFICIENT_RIGHTS */ ERROR_ACCESS_DENIED,
222 /* LDAP_BUSY */ ERROR_BUSY,
223 /* LDAP_UNAVAILABLE */ ERROR_DEV_NOT_EXIST,
224 /* LDAP_UNWILLING_TO_PERFORM */ ERROR_CAN_NOT_COMPLETE,
225 /* LDAP_LOOP_DETECT */ ERROR_DS_GENERIC_ERROR,
226 /* 0x37 */ ERROR_DS_GENERIC_ERROR,
227 /* 0x38 */ ERROR_DS_GENERIC_ERROR,
228 /* 0x39 */ ERROR_DS_GENERIC_ERROR,
229 /* 0x3a */ ERROR_DS_GENERIC_ERROR,
230 /* 0x3b */ ERROR_DS_GENERIC_ERROR,
231 /* LDAP_SORT_CONTROL_MISSING */ 8261,
232 /* LDAP_OFFSET_RANGE_ERROR */ 8262,
233 /* 0x3e */ ERROR_DS_GENERIC_ERROR,
234 /* 0x3f */ ERROR_DS_GENERIC_ERROR,
235 /* LDAP_NAMING_VIOLATION */ ERROR_INVALID_PARAMETER,
236 /* LDAP_OBJECT_CLASS_VIOLATION */ ERROR_INVALID_PARAMETER,
237 /* LDAP_NOT_ALLOWED_ON_NONLEAF */ ERROR_CAN_NOT_COMPLETE,
238 /* LDAP_NOT_ALLOWED_ON_RDN */ ERROR_ACCESS_DENIED,
239 /* LDAP_ALREADY_EXISTS */ ERROR_ALREADY_EXISTS,
240 /* LDAP_NO_OBJECT_CLASS_MODS */ ERROR_ACCESS_DENIED,
241 /* LDAP_RESULTS_TOO_LARGE */ ERROR_INSUFFICIENT_BUFFER,
242 /* LDAP_AFFECTS_MULTIPLE_DSAS */ ERROR_CAN_NOT_COMPLETE,
243 /* 0x48 */ ERROR_DS_GENERIC_ERROR,
244 /* 0x49 */ ERROR_DS_GENERIC_ERROR,
245 /* 0x4a */ ERROR_DS_GENERIC_ERROR,
246 /* 0x4b */ ERROR_DS_GENERIC_ERROR,
247 /* LDAP_VIRTUAL_LIST_VIEW_ERROR */ ERROR_DS_GENERIC_ERROR,
248 /* 0x4d */ ERROR_DS_GENERIC_ERROR,
249 /* 0x4e */ ERROR_DS_GENERIC_ERROR,
250 /* 0x4f */ ERROR_DS_GENERIC_ERROR,
251 /* LDAP_OTHER */ ERROR_DS_GENERIC_ERROR,
252 /* LDAP_SERVER_DOWN */ ERROR_BAD_NET_RESP,
253 /* LDAP_LOCAL_ERROR */ ERROR_DS_GENERIC_ERROR,
254 /* LDAP_ENCODING_ERROR */ ERROR_UNEXP_NET_ERR,
255 /* LDAP_DECODING_ERROR */ ERROR_UNEXP_NET_ERR,
256 /* LDAP_TIMEOUT */ ERROR_SERVICE_REQUEST_TIMEOUT,
257 /* LDAP_AUTH_UNKNOWN */ ERROR_WRONG_PASSWORD,
258 /* LDAP_FILTER_ERROR */ ERROR_INVALID_PARAMETER,
259 /* LDAP_USER_CANCELLED */ ERROR_CANCELLED,
260 /* LDAP_PARAM_ERROR */ ERROR_INVALID_PARAMETER,
261 /* LDAP_NO_MEMORY */ ERROR_NOT_ENOUGH_MEMORY,
262 /* LDAP_CONNECT_ERROR */ ERROR_CONNECTION_REFUSED,
263 /* LDAP_NOT_SUPPORTED */ ERROR_CAN_NOT_COMPLETE,
264 /* LDAP_CONTROL_NOT_FOUND */ ERROR_NOT_FOUND,
265 /* LDAP_NO_RESULTS_RETURNED */ ERROR_MORE_DATA,
266 /* LDAP_MORE_RESULTS_TO_RETURN */ ERROR_MORE_DATA,
267 /* LDAP_CLIENT_LOOP */ ERROR_DS_GENERIC_ERROR,
268 /* LDAP_REFERRAL_LIMIT_EXCEEDED */ ERROR_DS_GENERIC_ERROR
271 /***********************************************************************
272 * LdapMapErrorToWin32 (WLDAP32.@)
274 ULONG CDECL LdapMapErrorToWin32( ULONG err )
276 TRACE( "(%#lx)\n", err );
278 if (err >= ARRAY_SIZE( errormap )) return ERROR_DS_GENERIC_ERROR;
279 return errormap[err];