ReactOS  0.4.15-dev-1171-gab82533
error.c
Go to the documentation of this file.
1 /*
2  * WLDAP32 - LDAP support for Wine
3  *
4  * Copyright 2005 Hans Leidekker
5  *
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.
10  *
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.
15  *
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
19  */
20 
21 #include "config.h"
22 #include "wine/port.h"
23 
24 #include <stdarg.h>
25 #ifdef HAVE_LDAP_H
26 #include <ldap.h>
27 #endif
28 
29 #include "windef.h"
30 #include "winbase.h"
31 #include "winuser.h"
32 #include "winnls.h"
33 
34 #include "winldap_private.h"
35 #include "wldap32.h"
36 #include "wine/debug.h"
37 
39 
41 {
42  switch (error)
43  {
44 #ifdef HAVE_LDAP_H
61 #endif
62  default: return error;
63  }
64 }
65 
66 /***********************************************************************
67  * ldap_err2stringA (WLDAP32.@)
68  *
69  * See ldap_err2stringW.
70  */
72 {
73  static char buf[256] = "";
74 
75  TRACE( "(0x%08x)\n", err );
76 
78  LoadStringA( hwldap32, err, buf, 256 );
79  else
81 
82  return buf;
83 }
84 
85 /***********************************************************************
86  * ldap_err2stringW (WLDAP32.@)
87  *
88  * Convert an error code into a string describing the error.
89  *
90  * PARAMS
91  * err [I] Error code to convert.
92  *
93  * RETURNS
94  * Success: Pointer to a string containing the error description.
95  * Failure: NULL
96  *
97  * NOTES
98  * The returned string is statically allocated, you must not
99  * free this string.
100  */
102 {
103  static WCHAR buf[256] = { 0 };
104 
105  TRACE( "(0x%08x)\n", err );
106 
108  LoadStringW( hwldap32, err, buf, 256 );
109  else
111 
112  return buf;
113 }
114 
115 /***********************************************************************
116  * ldap_perror (WLDAP32.@)
117  *
118  * Print a given error string.
119  *
120  * PARAMS
121  * ld [I] Pointer to an LDAP context.
122  * msg [I] Error string.
123  *
124  * RETURNS
125  * Nothing.
126  *
127  * NOTES
128  * Like native, this function does nothing.
129  */
131 {
132  TRACE( "(%p, %s)\n", ld, debugstr_a(msg) );
133 }
134 
135 /***********************************************************************
136  * ldap_result2error (WLDAP32.@)
137  *
138  * Parse an LDAP message and return the error obtained from it.
139  *
140  * PARAMS
141  * ld [I] Pointer to an LDAP context.
142  * res [I] Pointer to an LDAPMessage structure.
143  * free [I] Ask for the LDAPMessage structure to be freed.
144  *
145  * RETURNS
146  * Success: LDAP_SUCCESS
147  * Failure: An LDAP error code.
148  *
149  * NOTES
150  * If not asked for, use ldap_msgfree to free the LDAPMessage.
151  */
153 {
155 #ifdef HAVE_LDAP
156  int error;
157 
158  TRACE( "(%p, %p, 0x%08x)\n", ld, res, free );
159 
160  if (!ld || !res) return ~0u;
161 
162  ret = ldap_parse_result( ld, res, &error, NULL, NULL, NULL, NULL, free );
163 
164  if (ret == LDAP_SUCCESS)
165  ret = error;
166  else
167  ret = ~0u;
168 
169 #endif
170  return ret;
171 }
172 
173 /***********************************************************************
174  * LdapGetLastError (WLDAP32.@)
175  *
176  * Return the last error set by an LDAP function call.
177  *
178  * PARAMS
179  * None.
180  *
181  * RETURNS
182  * An LDAP error code.
183  */
185 {
186  TRACE( "\n" );
187  return GetLastError();
188 }
189 
190 static const ULONG WLDAP32_errormap[] = {
191  /* LDAP_SUCCESS */ ERROR_SUCCESS,
192  /* LDAP_OPERATIONS_ERROR */ ERROR_OPEN_FAILED,
193  /* LDAP_PROTOCOL_ERROR */ ERROR_INVALID_LEVEL,
194  /* LDAP_TIMELIMIT_EXCEEDED */ ERROR_TIMEOUT,
195  /* LDAP_SIZELIMIT_EXCEEDED */ ERROR_MORE_DATA,
196  /* LDAP_COMPARE_FALSE */ ERROR_DS_GENERIC_ERROR,
197  /* LDAP_COMPARE_TRUE */ ERROR_DS_GENERIC_ERROR,
198  /* LDAP_AUTH_METHOD_NOT_SUPPORTED */ ERROR_ACCESS_DENIED,
199  /* LDAP_STRONG_AUTH_REQUIRED */ ERROR_ACCESS_DENIED,
200  /* LDAP_REFERRAL_V2 */ ERROR_MORE_DATA,
201  /* LDAP_REFERRAL */ ERROR_MORE_DATA,
202  /* LDAP_ADMIN_LIMIT_EXCEEDED */ ERROR_NOT_ENOUGH_QUOTA,
203  /* LDAP_UNAVAILABLE_CRIT_EXTENSION */ ERROR_CAN_NOT_COMPLETE,
204  /* LDAP_CONFIDENTIALITY_REQUIRED */ ERROR_DS_GENERIC_ERROR,
205  /* LDAP_SASL_BIND_IN_PROGRESS */ ERROR_DS_GENERIC_ERROR,
206  /* 0x0f */ ERROR_DS_GENERIC_ERROR,
207  /* LDAP_NO_SUCH_ATTRIBUTE */ ERROR_INVALID_PARAMETER,
208  /* LDAP_UNDEFINED_TYPE */ ERROR_DS_GENERIC_ERROR,
209  /* LDAP_INAPPROPRIATE_MATCHING */ ERROR_INVALID_PARAMETER,
210  /* LDAP_CONSTRAINT_VIOLATION */ ERROR_INVALID_PARAMETER,
211  /* LDAP_ATTRIBUTE_OR_VALUE_EXISTS */ ERROR_ALREADY_EXISTS,
212  /* LDAP_INVALID_SYNTAX */ ERROR_INVALID_NAME,
213  /* 0x16 */ ERROR_DS_GENERIC_ERROR,
214  /* 0x17 */ ERROR_DS_GENERIC_ERROR,
215  /* 0x18 */ ERROR_DS_GENERIC_ERROR,
216  /* 0x19 */ ERROR_DS_GENERIC_ERROR,
217  /* 0x1a */ ERROR_DS_GENERIC_ERROR,
218  /* 0x1b */ ERROR_DS_GENERIC_ERROR,
219  /* 0x1c */ ERROR_DS_GENERIC_ERROR,
220  /* 0x1d */ ERROR_DS_GENERIC_ERROR,
221  /* 0x1e */ ERROR_DS_GENERIC_ERROR,
222  /* 0x1f */ ERROR_DS_GENERIC_ERROR,
223  /* LDAP_NO_SUCH_OBJECT */ ERROR_FILE_NOT_FOUND,
224  /* LDAP_ALIAS_PROBLEM */ ERROR_DS_GENERIC_ERROR,
225  /* LDAP_INVALID_DN_SYNTAX */ ERROR_INVALID_PARAMETER,
226  /* LDAP_IS_LEAF */ ERROR_DS_GENERIC_ERROR,
227  /* LDAP_ALIAS_DEREF_PROBLEM */ ERROR_DS_GENERIC_ERROR,
228  /* 0x25 */ ERROR_DS_GENERIC_ERROR,
229  /* 0x26 */ ERROR_DS_GENERIC_ERROR,
230  /* 0x27 */ ERROR_DS_GENERIC_ERROR,
231  /* 0x28 */ ERROR_DS_GENERIC_ERROR,
232  /* 0x29 */ ERROR_DS_GENERIC_ERROR,
233  /* 0x2a */ ERROR_DS_GENERIC_ERROR,
234  /* 0x2b */ ERROR_DS_GENERIC_ERROR,
235  /* 0x2c */ ERROR_DS_GENERIC_ERROR,
236  /* 0x2d */ ERROR_DS_GENERIC_ERROR,
237  /* 0x2e */ ERROR_DS_GENERIC_ERROR,
238  /* 0x2f */ ERROR_DS_GENERIC_ERROR,
239  /* LDAP_INAPPROPRIATE_AUTH */ ERROR_ACCESS_DENIED,
240  /* LDAP_INVALID_CREDENTIALS */ ERROR_WRONG_PASSWORD,
241  /* LDAP_INSUFFICIENT_RIGHTS */ ERROR_ACCESS_DENIED,
242  /* LDAP_BUSY */ ERROR_BUSY,
243  /* LDAP_UNAVAILABLE */ ERROR_DEV_NOT_EXIST,
244  /* LDAP_UNWILLING_TO_PERFORM */ ERROR_CAN_NOT_COMPLETE,
245  /* LDAP_LOOP_DETECT */ ERROR_DS_GENERIC_ERROR,
246  /* 0x37 */ ERROR_DS_GENERIC_ERROR,
247  /* 0x38 */ ERROR_DS_GENERIC_ERROR,
248  /* 0x39 */ ERROR_DS_GENERIC_ERROR,
249  /* 0x3a */ ERROR_DS_GENERIC_ERROR,
250  /* 0x3b */ ERROR_DS_GENERIC_ERROR,
251  /* LDAP_SORT_CONTROL_MISSING */ 8261,
252  /* LDAP_OFFSET_RANGE_ERROR */ 8262,
253  /* 0x3e */ ERROR_DS_GENERIC_ERROR,
254  /* 0x3f */ ERROR_DS_GENERIC_ERROR,
255  /* LDAP_NAMING_VIOLATION */ ERROR_INVALID_PARAMETER,
256  /* LDAP_OBJECT_CLASS_VIOLATION */ ERROR_INVALID_PARAMETER,
257  /* LDAP_NOT_ALLOWED_ON_NONLEAF */ ERROR_CAN_NOT_COMPLETE,
258  /* LDAP_NOT_ALLOWED_ON_RDN */ ERROR_ACCESS_DENIED,
259  /* LDAP_ALREADY_EXISTS */ ERROR_ALREADY_EXISTS,
260  /* LDAP_NO_OBJECT_CLASS_MODS */ ERROR_ACCESS_DENIED,
261  /* LDAP_RESULTS_TOO_LARGE */ ERROR_INSUFFICIENT_BUFFER,
262  /* LDAP_AFFECTS_MULTIPLE_DSAS */ ERROR_CAN_NOT_COMPLETE,
263  /* 0x48 */ ERROR_DS_GENERIC_ERROR,
264  /* 0x49 */ ERROR_DS_GENERIC_ERROR,
265  /* 0x4a */ ERROR_DS_GENERIC_ERROR,
266  /* 0x4b */ ERROR_DS_GENERIC_ERROR,
267  /* LDAP_VIRTUAL_LIST_VIEW_ERROR */ ERROR_DS_GENERIC_ERROR,
268  /* 0x4d */ ERROR_DS_GENERIC_ERROR,
269  /* 0x4e */ ERROR_DS_GENERIC_ERROR,
270  /* 0x4f */ ERROR_DS_GENERIC_ERROR,
271  /* LDAP_OTHER */ ERROR_DS_GENERIC_ERROR,
272  /* LDAP_SERVER_DOWN */ ERROR_BAD_NET_RESP,
273  /* LDAP_LOCAL_ERROR */ ERROR_DS_GENERIC_ERROR,
274  /* LDAP_ENCODING_ERROR */ ERROR_UNEXP_NET_ERR,
275  /* LDAP_DECODING_ERROR */ ERROR_UNEXP_NET_ERR,
276  /* LDAP_TIMEOUT */ ERROR_SERVICE_REQUEST_TIMEOUT,
277  /* LDAP_AUTH_UNKNOWN */ ERROR_WRONG_PASSWORD,
278  /* LDAP_FILTER_ERROR */ ERROR_INVALID_PARAMETER,
279  /* LDAP_USER_CANCELLED */ ERROR_CANCELLED,
280  /* LDAP_PARAM_ERROR */ ERROR_INVALID_PARAMETER,
281  /* LDAP_NO_MEMORY */ ERROR_NOT_ENOUGH_MEMORY,
282  /* LDAP_CONNECT_ERROR */ ERROR_CONNECTION_REFUSED,
283  /* LDAP_NOT_SUPPORTED */ ERROR_CAN_NOT_COMPLETE,
284  /* LDAP_CONTROL_NOT_FOUND */ ERROR_NOT_FOUND,
285  /* LDAP_NO_RESULTS_RETURNED */ ERROR_MORE_DATA,
286  /* LDAP_MORE_RESULTS_TO_RETURN */ ERROR_MORE_DATA,
287  /* LDAP_CLIENT_LOOP */ ERROR_DS_GENERIC_ERROR,
288  /* LDAP_REFERRAL_LIMIT_EXCEEDED */ ERROR_DS_GENERIC_ERROR
289 };
290 
291 /***********************************************************************
292  * LdapMapErrorToWin32 (WLDAP32.@)
293  *
294  * Map an LDAP error code to a Win32 error code.
295  *
296  * PARAMS
297  * err [I] An LDAP error code.
298  *
299  * RETURNS
300  * A Win32 error code.
301  */
303 {
304  TRACE( "(0x%08x)\n", err );
305 
306  if (err >= ARRAY_SIZE( WLDAP32_errormap ))
307  return ERROR_DS_GENERIC_ERROR;
308  return WLDAP32_errormap[err];
309 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
signed char * PCHAR
Definition: retypes.h:7
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define ERROR_SUCCESS
Definition: deptool.c:10
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define LDAP_AUTH_UNKNOWN
Definition: winldap.h:106
#define ERROR_TIMEOUT
Definition: winerror.h:941
#define free
Definition: debug_ros.c:5
int WINAPI LoadStringA(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPSTR lpBuffer, _In_ int cchBufferMax)
#define ERROR_SERVICE_REQUEST_TIMEOUT
Definition: winerror.h:604
#define LDAP_DECODING_ERROR
Definition: winldap.h:104
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1044
#define LDAP_PARAM_ERROR
Definition: winldap.h:109
#define LDAP_CONNECT_ERROR
Definition: winldap.h:111
PCHAR CDECL ldap_err2stringA(ULONG err)
Definition: error.c:71
uint16_t * PWCHAR
Definition: typedefs.h:56
#define LDAP_CONTROL_NOT_FOUND
Definition: winldap.h:113
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
void CDECL WLDAP32_ldap_perror(WLDAP32_LDAP *ld, const PCHAR msg)
Definition: error.c:130
#define ERROR_BUSY
Definition: dderror.h:12
#define ERROR_WRONG_PASSWORD
Definition: winerror.h:805
#define ERROR_BAD_NET_RESP
Definition: winerror.h:150
#define LDAP_TIMEOUT
Definition: winldap.h:105
ULONG CDECL LdapMapErrorToWin32(ULONG err)
Definition: error.c:302
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
#define ERROR_CAN_NOT_COMPLETE
Definition: winerror.h:582
WINE_DEFAULT_DEBUG_CHANNEL(jscript)
#define ldap_parse_result
Definition: winldap.h:675
#define ERROR_NOT_ENOUGH_QUOTA
Definition: winerror.h:1123
ULONG map_error(int error)
Definition: error.c:40
smooth NULL
Definition: ftsmooth.c:416
#define LDAP_CLIENT_LOOP
Definition: winldap.h:116
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define LDAP_NO_RESULTS_RETURNED
Definition: winldap.h:114
ULONG CDECL WLDAP32_ldap_result2error(WLDAP32_LDAP *ld, WLDAP32_LDAPMessage *res, ULONG free)
Definition: error.c:152
#define LDAP_USER_CANCELLED
Definition: winldap.h:108
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
#define LDAP_NO_MEMORY
Definition: winldap.h:110
#define ERROR_UNEXP_NET_ERR
Definition: winerror.h:151
static const ULONG WLDAP32_errormap[]
Definition: error.c:190
#define ERROR_DS_GENERIC_ERROR
Definition: winerror.h:1575
int ret
#define err(...)
#define LDAP_FILTER_ERROR
Definition: winldap.h:107
PWCHAR CDECL ldap_err2stringW(ULONG err)
Definition: error.c:101
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define LDAP_SERVER_DOWN
Definition: winldap.h:101
#define LDAP_REFERRAL_LIMIT_EXCEEDED
Definition: winldap.h:117
#define LDAP_MORE_RESULTS_TO_RETURN
Definition: winldap.h:115
ULONG CDECL LdapGetLastError(void)
Definition: error.c:184
HINSTANCE hwldap32
Definition: main.c:29
#define ERROR_CANCELLED
Definition: winerror.h:726
#define ERROR_OPEN_FAILED
Definition: winerror.h:184
#define CDECL
Definition: compat.h:29
#define ARRAY_SIZE(a)
Definition: main.h:24
#define LDAP_NOT_SUPPORTED
Definition: winldap.h:112
#define LDAP_LOCAL_ERROR
Definition: winldap.h:102
#define ERROR_NOT_FOUND
Definition: winerror.h:690
#define LDAP_SUCCESS
Definition: winldap.h:59
#define msg(x)
Definition: auth_time.c:54
#define ERROR_CONNECTION_REFUSED
Definition: winerror.h:728
GLuint res
Definition: glext.h:9613
unsigned int ULONG
Definition: retypes.h:1
#define ERROR_INVALID_NAME
Definition: compat.h:103
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define ERROR_INVALID_LEVEL
Definition: winerror.h:196
#define ERROR_DEV_NOT_EXIST
Definition: dderror.h:8
EXPORT int error(char *fmt, va_alist)
Definition: error.c:46
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10