4 * Copyright (c) International Business Machines Corp., 2002,2008
5 * Author(s): Steve French (sfrench@us.ibm.com)
7 * Error mapping routines from Samba libsmb/errormap.c
8 * Copyright (C) Andrew Tridgell 2001
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
18 * the GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include <linux/net.h>
26 #include <linux/string.h>
28 #include <linux/ctype.h>
30 #include <asm/div64.h>
31 #include <asm/byteorder.h>
32 #include <linux/inet.h>
36 #include "cifsproto.h"
38 #include "cifs_debug.h"
41 struct smb_to_posix_error {
46 static const struct smb_to_posix_error mapping_table_ERRDOS[] = {
47 {ERRbadfunc, -EINVAL},
48 {ERRbadfile, -ENOENT},
49 {ERRbadpath, -ENOTDIR},
51 {ERRnoaccess, -EACCES},
57 {ERRbadformat, -EINVAL},
58 {ERRbadaccess, -EACCES},
60 {ERRbaddrive, -ENXIO},
62 {ERRdiffdevice, -EXDEV},
63 {ERRnofiles, -ENOENT},
64 {ERRbadshare, -ETXTBSY},
67 {ERRnosuchshare, -ENXIO},
68 {ERRfilexists, -EEXIST},
69 {ERRinvparm, -EINVAL},
70 {ERRdiskfull, -ENOSPC},
71 {ERRinvname, -ENOENT},
72 {ERRinvlevel, -EOPNOTSUPP},
73 {ERRdirnotempty, -ENOTEMPTY},
74 {ERRnotlocked, -ENOLCK},
75 {ERRcancelviolation, -ENOLCK},
76 {ERRalreadyexists, -EEXIST},
77 {ERRmoredata, -EOVERFLOW},
78 {ERReasnotsupported, -EOPNOTSUPP},
80 {ErrNotALink, -ENOLINK},
81 {ERRnetlogonNotStarted, -ENOPROTOOPT},
82 {ErrTooManyLinks, -EMLINK},
86 static const struct smb_to_posix_error mapping_table_ERRSRV[] = {
88 {ERRbadpw, -EACCES}, /* was EPERM */
89 {ERRbadtype, -EREMOTE},
92 {ERRinvnetname, -ENXIO},
93 {ERRinvdevice, -ENXIO},
95 {ERRqtoobig, -ENOSPC},
98 {ERRsmbcmd, -EBADRQC},
101 {ERRfilespecs, -EINVAL},
103 {ERRbadpermits, -EINVAL},
105 {ERRsetattrmode, -EINVAL},
106 {ERRpaused, -EHOSTDOWN},
107 {ERRmsgoff, -EHOSTDOWN},
108 {ERRnoroom, -ENOSPC},
110 {ERRtimeout, -ETIME},
111 {ERRnoresource, -ENOBUFS},
112 {ERRtoomanyuids, -EUSERS},
113 {ERRbaduid, -EACCES},
116 {ERR_NOTIFY_ENUM_DIR, -ENOBUFS},
117 {ERRnoSuchUser, -EACCES},
118 /* {ERRaccountexpired, -EACCES},
119 {ERRbadclient, -EACCES},
120 {ERRbadLogonTime, -EACCES},
121 {ERRpasswordExpired, -EACCES},*/
122 {ERRaccountexpired, -EKEYEXPIRED},
123 {ERRbadclient, -EACCES},
124 {ERRbadLogonTime, -EACCES},
125 {ERRpasswordExpired, -EKEYEXPIRED},
127 {ERRnosupport, -EINVAL},
131 static const struct smb_to_posix_error mapping_table_ERRHRD[] = {
136 /* if the mount helper is missing we need to reverse the 1st slash
137 from '/' to backslash in order to format the UNC properly for
138 ip address parsing and for tree connect (unless the user
139 remembered to put the UNC name in properly). Fortunately we do
140 not have to call this twice (we check for IPv4 addresses
141 first, so it is already converted by the time we
142 try IPv6 addresses */
143 static int canonicalize_unc(char *cp)
147 for (i = 0; i <= 46 /* INET6_ADDRSTRLEN */ ; i++) {
153 #ifdef CONFIG_CIFS_DEBUG2
154 cFYI(1, ("change slash to backslash in malformed UNC"));
163 /* Convert string containing dotted ip address to binary form */
164 /* returns 0 if invalid address */
167 cifs_inet_pton(int address_family, char *cp, void *dst)
171 /* calculate length by finding first slash or NULL */
172 if (address_family == AF_INET) {
173 ret = in4_pton(cp, -1 /* len */, dst, '\\', NULL);
175 if (canonicalize_unc(cp))
176 ret = in4_pton(cp, -1, dst, '\\', NULL);
178 } else if (address_family == AF_INET6) {
179 ret = in6_pton(cp, -1 /* len */, dst , '\\', NULL);
181 #ifdef CONFIG_CIFS_DEBUG2
182 cFYI(1, ("address conversion returned %d for %s", ret, cp));
189 /*****************************************************************************
190 convert a NT status code to a dos class/code
191 *****************************************************************************/
192 /* NT status -> dos error map */
193 static const struct {
197 } ntstatus_to_dos_map[] = {
199 ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL}, {
200 ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED}, {
201 ERRDOS, ERRinvlevel, NT_STATUS_INVALID_INFO_CLASS}, {
202 ERRDOS, 24, NT_STATUS_INFO_LENGTH_MISMATCH}, {
203 ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION}, {
204 ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR}, {
205 ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA}, {
206 ERRDOS, ERRbadfid, NT_STATUS_INVALID_HANDLE}, {
207 ERRHRD, ERRgeneral, NT_STATUS_BAD_INITIAL_STACK}, {
208 ERRDOS, 193, NT_STATUS_BAD_INITIAL_PC}, {
209 ERRDOS, 87, NT_STATUS_INVALID_CID}, {
210 ERRHRD, ERRgeneral, NT_STATUS_TIMER_NOT_CANCELED}, {
211 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER}, {
212 ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_DEVICE}, {
213 ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_FILE}, {
214 ERRDOS, ERRbadfunc, NT_STATUS_INVALID_DEVICE_REQUEST}, {
215 ERRDOS, 38, NT_STATUS_END_OF_FILE}, {
216 ERRDOS, 34, NT_STATUS_WRONG_VOLUME}, {
217 ERRDOS, 21, NT_STATUS_NO_MEDIA_IN_DEVICE}, {
218 ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_MEDIA}, {
219 ERRDOS, 27, NT_STATUS_NONEXISTENT_SECTOR},
220 /* { This NT error code was 'sqashed'
221 from NT_STATUS_MORE_PROCESSING_REQUIRED to NT_STATUS_OK
222 during the session setup } */
224 ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY}, {
225 ERRDOS, 487, NT_STATUS_CONFLICTING_ADDRESSES}, {
226 ERRDOS, 487, NT_STATUS_NOT_MAPPED_VIEW}, {
227 ERRDOS, 87, NT_STATUS_UNABLE_TO_FREE_VM}, {
228 ERRDOS, 87, NT_STATUS_UNABLE_TO_DELETE_SECTION}, {
229 ERRDOS, 2142, NT_STATUS_INVALID_SYSTEM_SERVICE}, {
230 ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_INSTRUCTION}, {
231 ERRDOS, ERRnoaccess, NT_STATUS_INVALID_LOCK_SEQUENCE}, {
232 ERRDOS, ERRnoaccess, NT_STATUS_INVALID_VIEW_SIZE}, {
233 ERRDOS, 193, NT_STATUS_INVALID_FILE_FOR_SECTION}, {
234 ERRDOS, ERRnoaccess, NT_STATUS_ALREADY_COMMITTED},
235 /* { This NT error code was 'sqashed'
236 from NT_STATUS_ACCESS_DENIED to NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE
237 during the session setup } */
239 ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED}, {
240 ERRDOS, 111, NT_STATUS_BUFFER_TOO_SMALL}, {
241 ERRDOS, ERRbadfid, NT_STATUS_OBJECT_TYPE_MISMATCH}, {
242 ERRHRD, ERRgeneral, NT_STATUS_NONCONTINUABLE_EXCEPTION}, {
243 ERRHRD, ERRgeneral, NT_STATUS_INVALID_DISPOSITION}, {
244 ERRHRD, ERRgeneral, NT_STATUS_UNWIND}, {
245 ERRHRD, ERRgeneral, NT_STATUS_BAD_STACK}, {
246 ERRHRD, ERRgeneral, NT_STATUS_INVALID_UNWIND_TARGET}, {
247 ERRDOS, 158, NT_STATUS_NOT_LOCKED}, {
248 ERRHRD, ERRgeneral, NT_STATUS_PARITY_ERROR}, {
249 ERRDOS, 487, NT_STATUS_UNABLE_TO_DECOMMIT_VM}, {
250 ERRDOS, 487, NT_STATUS_NOT_COMMITTED}, {
251 ERRHRD, ERRgeneral, NT_STATUS_INVALID_PORT_ATTRIBUTES}, {
252 ERRHRD, ERRgeneral, NT_STATUS_PORT_MESSAGE_TOO_LONG}, {
253 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_MIX}, {
254 ERRHRD, ERRgeneral, NT_STATUS_INVALID_QUOTA_LOWER}, {
255 ERRHRD, ERRgeneral, NT_STATUS_DISK_CORRUPT_ERROR}, {
256 /* mapping changed since shell does lookup on * expects FileNotFound */
257 ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_INVALID}, {
258 ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND}, {
259 ERRDOS, ERRalreadyexists, NT_STATUS_OBJECT_NAME_COLLISION}, {
260 ERRHRD, ERRgeneral, NT_STATUS_HANDLE_NOT_WAITABLE}, {
261 ERRDOS, ERRbadfid, NT_STATUS_PORT_DISCONNECTED}, {
262 ERRHRD, ERRgeneral, NT_STATUS_DEVICE_ALREADY_ATTACHED}, {
263 ERRDOS, 161, NT_STATUS_OBJECT_PATH_INVALID}, {
264 ERRDOS, ERRbadpath, NT_STATUS_OBJECT_PATH_NOT_FOUND}, {
265 ERRDOS, 161, NT_STATUS_OBJECT_PATH_SYNTAX_BAD}, {
266 ERRHRD, ERRgeneral, NT_STATUS_DATA_OVERRUN}, {
267 ERRHRD, ERRgeneral, NT_STATUS_DATA_LATE_ERROR}, {
268 ERRDOS, 23, NT_STATUS_DATA_ERROR}, {
269 ERRDOS, 23, NT_STATUS_CRC_ERROR}, {
270 ERRDOS, ERRnomem, NT_STATUS_SECTION_TOO_BIG}, {
271 ERRDOS, ERRnoaccess, NT_STATUS_PORT_CONNECTION_REFUSED}, {
272 ERRDOS, ERRbadfid, NT_STATUS_INVALID_PORT_HANDLE}, {
273 ERRDOS, ERRbadshare, NT_STATUS_SHARING_VIOLATION}, {
274 ERRHRD, ERRgeneral, NT_STATUS_QUOTA_EXCEEDED}, {
275 ERRDOS, 87, NT_STATUS_INVALID_PAGE_PROTECTION}, {
276 ERRDOS, 288, NT_STATUS_MUTANT_NOT_OWNED}, {
277 ERRDOS, 298, NT_STATUS_SEMAPHORE_LIMIT_EXCEEDED}, {
278 ERRDOS, 87, NT_STATUS_PORT_ALREADY_SET}, {
279 ERRDOS, 87, NT_STATUS_SECTION_NOT_IMAGE}, {
280 ERRDOS, 156, NT_STATUS_SUSPEND_COUNT_EXCEEDED}, {
281 ERRDOS, ERRnoaccess, NT_STATUS_THREAD_IS_TERMINATING}, {
282 ERRDOS, 87, NT_STATUS_BAD_WORKING_SET_LIMIT}, {
283 ERRDOS, 87, NT_STATUS_INCOMPATIBLE_FILE_MAP}, {
284 ERRDOS, 87, NT_STATUS_SECTION_PROTECTION}, {
285 ERRDOS, ERReasnotsupported, NT_STATUS_EAS_NOT_SUPPORTED}, {
286 ERRDOS, 255, NT_STATUS_EA_TOO_LARGE}, {
287 ERRHRD, ERRgeneral, NT_STATUS_NONEXISTENT_EA_ENTRY}, {
288 ERRHRD, ERRgeneral, NT_STATUS_NO_EAS_ON_FILE}, {
289 ERRHRD, ERRgeneral, NT_STATUS_EA_CORRUPT_ERROR}, {
290 ERRDOS, ERRlock, NT_STATUS_FILE_LOCK_CONFLICT}, {
291 ERRDOS, ERRlock, NT_STATUS_LOCK_NOT_GRANTED}, {
292 ERRDOS, ERRbadfile, NT_STATUS_DELETE_PENDING}, {
293 ERRDOS, ERRunsup, NT_STATUS_CTL_FILE_NOT_SUPPORTED}, {
294 ERRHRD, ERRgeneral, NT_STATUS_UNKNOWN_REVISION}, {
295 ERRHRD, ERRgeneral, NT_STATUS_REVISION_MISMATCH}, {
296 ERRHRD, ERRgeneral, NT_STATUS_INVALID_OWNER}, {
297 ERRHRD, ERRgeneral, NT_STATUS_INVALID_PRIMARY_GROUP}, {
298 ERRHRD, ERRgeneral, NT_STATUS_NO_IMPERSONATION_TOKEN}, {
299 ERRHRD, ERRgeneral, NT_STATUS_CANT_DISABLE_MANDATORY}, {
300 ERRDOS, 2215, NT_STATUS_NO_LOGON_SERVERS}, {
301 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_LOGON_SESSION}, {
302 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PRIVILEGE}, {
303 ERRDOS, ERRnoaccess, NT_STATUS_PRIVILEGE_NOT_HELD}, {
304 ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACCOUNT_NAME}, {
305 ERRHRD, ERRgeneral, NT_STATUS_USER_EXISTS},
306 /* { This NT error code was 'sqashed'
307 from NT_STATUS_NO_SUCH_USER to NT_STATUS_LOGON_FAILURE
308 during the session setup } */
310 ERRDOS, ERRnoaccess, NT_STATUS_NO_SUCH_USER}, { /* could map to 2238 */
311 ERRHRD, ERRgeneral, NT_STATUS_GROUP_EXISTS}, {
312 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_GROUP}, {
313 ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_GROUP}, {
314 ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_GROUP}, {
315 ERRHRD, ERRgeneral, NT_STATUS_LAST_ADMIN},
316 /* { This NT error code was 'sqashed'
317 from NT_STATUS_WRONG_PASSWORD to NT_STATUS_LOGON_FAILURE
318 during the session setup } */
320 ERRSRV, ERRbadpw, NT_STATUS_WRONG_PASSWORD}, {
321 ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_PASSWORD}, {
322 ERRHRD, ERRgeneral, NT_STATUS_PASSWORD_RESTRICTION}, {
323 ERRDOS, ERRnoaccess, NT_STATUS_LOGON_FAILURE}, {
324 ERRHRD, ERRgeneral, NT_STATUS_ACCOUNT_RESTRICTION}, {
325 ERRSRV, ERRbadLogonTime, NT_STATUS_INVALID_LOGON_HOURS}, {
326 ERRSRV, ERRbadclient, NT_STATUS_INVALID_WORKSTATION}, {
327 ERRSRV, ERRpasswordExpired, NT_STATUS_PASSWORD_EXPIRED}, {
328 ERRSRV, ERRaccountexpired, NT_STATUS_ACCOUNT_DISABLED}, {
329 ERRHRD, ERRgeneral, NT_STATUS_NONE_MAPPED}, {
330 ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LUIDS_REQUESTED}, {
331 ERRHRD, ERRgeneral, NT_STATUS_LUIDS_EXHAUSTED}, {
332 ERRHRD, ERRgeneral, NT_STATUS_INVALID_SUB_AUTHORITY}, {
333 ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACL}, {
334 ERRHRD, ERRgeneral, NT_STATUS_INVALID_SID}, {
335 ERRHRD, ERRgeneral, NT_STATUS_INVALID_SECURITY_DESCR}, {
336 ERRDOS, 127, NT_STATUS_PROCEDURE_NOT_FOUND}, {
337 ERRDOS, 193, NT_STATUS_INVALID_IMAGE_FORMAT}, {
338 ERRHRD, ERRgeneral, NT_STATUS_NO_TOKEN}, {
339 ERRHRD, ERRgeneral, NT_STATUS_BAD_INHERITANCE_ACL}, {
340 ERRDOS, 158, NT_STATUS_RANGE_NOT_LOCKED}, {
341 ERRDOS, 112, NT_STATUS_DISK_FULL}, {
342 ERRHRD, ERRgeneral, NT_STATUS_SERVER_DISABLED}, {
343 ERRHRD, ERRgeneral, NT_STATUS_SERVER_NOT_DISABLED}, {
344 ERRDOS, 68, NT_STATUS_TOO_MANY_GUIDS_REQUESTED}, {
345 ERRDOS, 259, NT_STATUS_GUIDS_EXHAUSTED}, {
346 ERRHRD, ERRgeneral, NT_STATUS_INVALID_ID_AUTHORITY}, {
347 ERRDOS, 259, NT_STATUS_AGENTS_EXHAUSTED}, {
348 ERRDOS, 154, NT_STATUS_INVALID_VOLUME_LABEL}, {
349 ERRDOS, 14, NT_STATUS_SECTION_NOT_EXTENDED}, {
350 ERRDOS, 487, NT_STATUS_NOT_MAPPED_DATA}, {
351 ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_DATA_NOT_FOUND}, {
352 ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_TYPE_NOT_FOUND}, {
353 ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_NAME_NOT_FOUND}, {
354 ERRHRD, ERRgeneral, NT_STATUS_ARRAY_BOUNDS_EXCEEDED}, {
355 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DENORMAL_OPERAND}, {
356 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DIVIDE_BY_ZERO}, {
357 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INEXACT_RESULT}, {
358 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INVALID_OPERATION}, {
359 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_OVERFLOW}, {
360 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_STACK_CHECK}, {
361 ERRHRD, ERRgeneral, NT_STATUS_FLOAT_UNDERFLOW}, {
362 ERRHRD, ERRgeneral, NT_STATUS_INTEGER_DIVIDE_BY_ZERO}, {
363 ERRDOS, 534, NT_STATUS_INTEGER_OVERFLOW}, {
364 ERRHRD, ERRgeneral, NT_STATUS_PRIVILEGED_INSTRUCTION}, {
365 ERRDOS, ERRnomem, NT_STATUS_TOO_MANY_PAGING_FILES}, {
366 ERRHRD, ERRgeneral, NT_STATUS_FILE_INVALID}, {
367 ERRHRD, ERRgeneral, NT_STATUS_ALLOTTED_SPACE_EXCEEDED},
368 /* { This NT error code was 'sqashed'
369 from NT_STATUS_INSUFFICIENT_RESOURCES to
370 NT_STATUS_INSUFF_SERVER_RESOURCES during the session setup } */
372 ERRDOS, ERRnomem, NT_STATUS_INSUFFICIENT_RESOURCES}, {
373 ERRDOS, ERRbadpath, NT_STATUS_DFS_EXIT_PATH_FOUND}, {
374 ERRDOS, 23, NT_STATUS_DEVICE_DATA_ERROR}, {
375 ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_CONNECTED}, {
376 ERRDOS, 21, NT_STATUS_DEVICE_POWER_FAILURE}, {
377 ERRDOS, 487, NT_STATUS_FREE_VM_NOT_AT_BASE}, {
378 ERRDOS, 487, NT_STATUS_MEMORY_NOT_ALLOCATED}, {
379 ERRHRD, ERRgeneral, NT_STATUS_WORKING_SET_QUOTA}, {
380 ERRDOS, 19, NT_STATUS_MEDIA_WRITE_PROTECTED}, {
381 ERRDOS, 21, NT_STATUS_DEVICE_NOT_READY}, {
382 ERRHRD, ERRgeneral, NT_STATUS_INVALID_GROUP_ATTRIBUTES}, {
383 ERRHRD, ERRgeneral, NT_STATUS_BAD_IMPERSONATION_LEVEL}, {
384 ERRHRD, ERRgeneral, NT_STATUS_CANT_OPEN_ANONYMOUS}, {
385 ERRHRD, ERRgeneral, NT_STATUS_BAD_VALIDATION_CLASS}, {
386 ERRHRD, ERRgeneral, NT_STATUS_BAD_TOKEN_TYPE}, {
387 ERRDOS, 87, NT_STATUS_BAD_MASTER_BOOT_RECORD}, {
388 ERRHRD, ERRgeneral, NT_STATUS_INSTRUCTION_MISALIGNMENT}, {
389 ERRDOS, ERRpipebusy, NT_STATUS_INSTANCE_NOT_AVAILABLE}, {
390 ERRDOS, ERRpipebusy, NT_STATUS_PIPE_NOT_AVAILABLE}, {
391 ERRDOS, ERRbadpipe, NT_STATUS_INVALID_PIPE_STATE}, {
392 ERRDOS, ERRpipebusy, NT_STATUS_PIPE_BUSY}, {
393 ERRDOS, ERRbadfunc, NT_STATUS_ILLEGAL_FUNCTION}, {
394 ERRDOS, ERRnotconnected, NT_STATUS_PIPE_DISCONNECTED}, {
395 ERRDOS, ERRpipeclosing, NT_STATUS_PIPE_CLOSING}, {
396 ERRHRD, ERRgeneral, NT_STATUS_PIPE_CONNECTED}, {
397 ERRHRD, ERRgeneral, NT_STATUS_PIPE_LISTENING}, {
398 ERRDOS, ERRbadpipe, NT_STATUS_INVALID_READ_MODE}, {
399 ERRDOS, 121, NT_STATUS_IO_TIMEOUT}, {
400 ERRDOS, 38, NT_STATUS_FILE_FORCED_CLOSED}, {
401 ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STARTED}, {
402 ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STOPPED}, {
403 ERRHRD, ERRgeneral, NT_STATUS_COULD_NOT_INTERPRET}, {
404 ERRDOS, ERRnoaccess, NT_STATUS_FILE_IS_A_DIRECTORY}, {
405 ERRDOS, ERRunsup, NT_STATUS_NOT_SUPPORTED}, {
406 ERRDOS, 51, NT_STATUS_REMOTE_NOT_LISTENING}, {
407 ERRDOS, 52, NT_STATUS_DUPLICATE_NAME}, {
408 ERRDOS, 53, NT_STATUS_BAD_NETWORK_PATH}, {
409 ERRDOS, 54, NT_STATUS_NETWORK_BUSY}, {
410 ERRDOS, 55, NT_STATUS_DEVICE_DOES_NOT_EXIST}, {
411 ERRDOS, 56, NT_STATUS_TOO_MANY_COMMANDS}, {
412 ERRDOS, 57, NT_STATUS_ADAPTER_HARDWARE_ERROR}, {
413 ERRDOS, 58, NT_STATUS_INVALID_NETWORK_RESPONSE}, {
414 ERRDOS, 59, NT_STATUS_UNEXPECTED_NETWORK_ERROR}, {
415 ERRDOS, 60, NT_STATUS_BAD_REMOTE_ADAPTER}, {
416 ERRDOS, 61, NT_STATUS_PRINT_QUEUE_FULL}, {
417 ERRDOS, 62, NT_STATUS_NO_SPOOL_SPACE}, {
418 ERRDOS, 63, NT_STATUS_PRINT_CANCELLED}, {
419 ERRDOS, 64, NT_STATUS_NETWORK_NAME_DELETED}, {
420 ERRDOS, 65, NT_STATUS_NETWORK_ACCESS_DENIED}, {
421 ERRDOS, 66, NT_STATUS_BAD_DEVICE_TYPE}, {
422 ERRDOS, ERRnosuchshare, NT_STATUS_BAD_NETWORK_NAME}, {
423 ERRDOS, 68, NT_STATUS_TOO_MANY_NAMES}, {
424 ERRDOS, 69, NT_STATUS_TOO_MANY_SESSIONS}, {
425 ERRDOS, 70, NT_STATUS_SHARING_PAUSED}, {
426 ERRDOS, 71, NT_STATUS_REQUEST_NOT_ACCEPTED}, {
427 ERRDOS, 72, NT_STATUS_REDIRECTOR_PAUSED}, {
428 ERRDOS, 88, NT_STATUS_NET_WRITE_FAULT}, {
429 ERRHRD, ERRgeneral, NT_STATUS_PROFILING_AT_LIMIT}, {
430 ERRDOS, ERRdiffdevice, NT_STATUS_NOT_SAME_DEVICE}, {
431 ERRDOS, ERRnoaccess, NT_STATUS_FILE_RENAMED}, {
432 ERRDOS, 240, NT_STATUS_VIRTUAL_CIRCUIT_CLOSED}, {
433 ERRHRD, ERRgeneral, NT_STATUS_NO_SECURITY_ON_OBJECT}, {
434 ERRHRD, ERRgeneral, NT_STATUS_CANT_WAIT}, {
435 ERRDOS, ERRpipeclosing, NT_STATUS_PIPE_EMPTY}, {
436 ERRHRD, ERRgeneral, NT_STATUS_CANT_ACCESS_DOMAIN_INFO}, {
437 ERRHRD, ERRgeneral, NT_STATUS_CANT_TERMINATE_SELF}, {
438 ERRHRD, ERRgeneral, NT_STATUS_INVALID_SERVER_STATE}, {
439 ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_STATE}, {
440 ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_ROLE}, {
441 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_DOMAIN}, {
442 ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_EXISTS}, {
443 ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_LIMIT_EXCEEDED}, {
444 ERRDOS, 300, NT_STATUS_OPLOCK_NOT_GRANTED}, {
445 ERRDOS, 301, NT_STATUS_INVALID_OPLOCK_PROTOCOL}, {
446 ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_CORRUPTION}, {
447 ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_ERROR}, {
448 ERRHRD, ERRgeneral, NT_STATUS_GENERIC_NOT_MAPPED}, {
449 ERRHRD, ERRgeneral, NT_STATUS_BAD_DESCRIPTOR_FORMAT}, {
450 ERRHRD, ERRgeneral, NT_STATUS_INVALID_USER_BUFFER}, {
451 ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_IO_ERROR}, {
452 ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_CREATE_ERR}, {
453 ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_MAP_ERROR}, {
454 ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_EXTEND_ERR}, {
455 ERRHRD, ERRgeneral, NT_STATUS_NOT_LOGON_PROCESS}, {
456 ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_EXISTS}, {
457 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_1}, {
458 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_2}, {
459 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_3}, {
460 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_4}, {
461 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_5}, {
462 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_6}, {
463 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_7}, {
464 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_8}, {
465 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_9}, {
466 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_10}, {
467 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_11}, {
468 ERRDOS, 87, NT_STATUS_INVALID_PARAMETER_12}, {
469 ERRDOS, ERRbadpath, NT_STATUS_REDIRECTOR_NOT_STARTED}, {
470 ERRHRD, ERRgeneral, NT_STATUS_REDIRECTOR_STARTED}, {
471 ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW}, {
472 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PACKAGE}, {
473 ERRHRD, ERRgeneral, NT_STATUS_BAD_FUNCTION_TABLE}, {
474 ERRDOS, 203, 0xc0000100}, {
475 ERRDOS, 145, NT_STATUS_DIRECTORY_NOT_EMPTY}, {
476 ERRHRD, ERRgeneral, NT_STATUS_FILE_CORRUPT_ERROR}, {
477 ERRDOS, 267, NT_STATUS_NOT_A_DIRECTORY}, {
478 ERRHRD, ERRgeneral, NT_STATUS_BAD_LOGON_SESSION_STATE}, {
479 ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_COLLISION}, {
480 ERRDOS, 206, NT_STATUS_NAME_TOO_LONG}, {
481 ERRDOS, 2401, NT_STATUS_FILES_OPEN}, {
482 ERRDOS, 2404, NT_STATUS_CONNECTION_IN_USE}, {
483 ERRHRD, ERRgeneral, NT_STATUS_MESSAGE_NOT_FOUND}, {
484 ERRDOS, ERRnoaccess, NT_STATUS_PROCESS_IS_TERMINATING}, {
485 ERRHRD, ERRgeneral, NT_STATUS_INVALID_LOGON_TYPE}, {
486 ERRHRD, ERRgeneral, NT_STATUS_NO_GUID_TRANSLATION}, {
487 ERRHRD, ERRgeneral, NT_STATUS_CANNOT_IMPERSONATE}, {
488 ERRHRD, ERRgeneral, NT_STATUS_IMAGE_ALREADY_LOADED}, {
489 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_PRESENT}, {
490 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_NOT_EXIST}, {
491 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_ALREADY_OWNED}, {
492 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_LID_OWNER}, {
493 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_COMMAND}, {
494 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_LID}, {
495 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_SELECTOR_NOT_AVAILABLE}, {
496 ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_SELECTOR}, {
497 ERRHRD, ERRgeneral, NT_STATUS_NO_LDT}, {
498 ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_SIZE}, {
499 ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_OFFSET}, {
500 ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_DESCRIPTOR}, {
501 ERRDOS, 193, NT_STATUS_INVALID_IMAGE_NE_FORMAT}, {
502 ERRHRD, ERRgeneral, NT_STATUS_RXACT_INVALID_STATE}, {
503 ERRHRD, ERRgeneral, NT_STATUS_RXACT_COMMIT_FAILURE}, {
504 ERRHRD, ERRgeneral, NT_STATUS_MAPPED_FILE_SIZE_ZERO}, {
505 ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES}, {
506 ERRHRD, ERRgeneral, NT_STATUS_CANCELLED}, {
507 ERRDOS, ERRnoaccess, NT_STATUS_CANNOT_DELETE}, {
508 ERRHRD, ERRgeneral, NT_STATUS_INVALID_COMPUTER_NAME}, {
509 ERRDOS, ERRnoaccess, NT_STATUS_FILE_DELETED}, {
510 ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_ACCOUNT}, {
511 ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_GROUP}, {
512 ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_USER}, {
513 ERRHRD, ERRgeneral, NT_STATUS_MEMBERS_PRIMARY_GROUP}, {
514 ERRDOS, ERRbadfid, NT_STATUS_FILE_CLOSED}, {
515 ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_THREADS}, {
516 ERRHRD, ERRgeneral, NT_STATUS_THREAD_NOT_IN_PROCESS}, {
517 ERRHRD, ERRgeneral, NT_STATUS_TOKEN_ALREADY_IN_USE}, {
518 ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA_EXCEEDED}, {
519 ERRHRD, ERRgeneral, NT_STATUS_COMMITMENT_LIMIT}, {
520 ERRDOS, 193, NT_STATUS_INVALID_IMAGE_LE_FORMAT}, {
521 ERRDOS, 193, NT_STATUS_INVALID_IMAGE_NOT_MZ}, {
522 ERRDOS, 193, NT_STATUS_INVALID_IMAGE_PROTECT}, {
523 ERRDOS, 193, NT_STATUS_INVALID_IMAGE_WIN_16}, {
524 ERRHRD, ERRgeneral, NT_STATUS_LOGON_SERVER_CONFLICT}, {
525 ERRHRD, ERRgeneral, NT_STATUS_TIME_DIFFERENCE_AT_DC}, {
526 ERRHRD, ERRgeneral, NT_STATUS_SYNCHRONIZATION_REQUIRED}, {
527 ERRDOS, 126, NT_STATUS_DLL_NOT_FOUND}, {
528 ERRHRD, ERRgeneral, NT_STATUS_OPEN_FAILED}, {
529 ERRHRD, ERRgeneral, NT_STATUS_IO_PRIVILEGE_FAILED}, {
530 ERRDOS, 182, NT_STATUS_ORDINAL_NOT_FOUND}, {
531 ERRDOS, 127, NT_STATUS_ENTRYPOINT_NOT_FOUND}, {
532 ERRHRD, ERRgeneral, NT_STATUS_CONTROL_C_EXIT}, {
533 ERRDOS, 64, NT_STATUS_LOCAL_DISCONNECT}, {
534 ERRDOS, 64, NT_STATUS_REMOTE_DISCONNECT}, {
535 ERRDOS, 51, NT_STATUS_REMOTE_RESOURCES}, {
536 ERRDOS, 59, NT_STATUS_LINK_FAILED}, {
537 ERRDOS, 59, NT_STATUS_LINK_TIMEOUT}, {
538 ERRDOS, 59, NT_STATUS_INVALID_CONNECTION}, {
539 ERRDOS, 59, NT_STATUS_INVALID_ADDRESS}, {
540 ERRHRD, ERRgeneral, NT_STATUS_DLL_INIT_FAILED}, {
541 ERRHRD, ERRgeneral, NT_STATUS_MISSING_SYSTEMFILE}, {
542 ERRHRD, ERRgeneral, NT_STATUS_UNHANDLED_EXCEPTION}, {
543 ERRHRD, ERRgeneral, NT_STATUS_APP_INIT_FAILURE}, {
544 ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_CREATE_FAILED}, {
545 ERRHRD, ERRgeneral, NT_STATUS_NO_PAGEFILE}, {
546 ERRDOS, 124, NT_STATUS_INVALID_LEVEL}, {
547 ERRDOS, 86, NT_STATUS_WRONG_PASSWORD_CORE}, {
548 ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_FLOAT_CONTEXT}, {
549 ERRDOS, 109, NT_STATUS_PIPE_BROKEN}, {
550 ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_CORRUPT}, {
551 ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_IO_FAILED}, {
552 ERRHRD, ERRgeneral, NT_STATUS_NO_EVENT_PAIR}, {
553 ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_VOLUME}, {
554 ERRHRD, ERRgeneral, NT_STATUS_SERIAL_NO_DEVICE_INITED}, {
555 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_ALIAS}, {
556 ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_ALIAS}, {
557 ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_ALIAS}, {
558 ERRHRD, ERRgeneral, NT_STATUS_ALIAS_EXISTS}, {
559 ERRHRD, ERRgeneral, NT_STATUS_LOGON_NOT_GRANTED}, {
560 ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SECRETS}, {
561 ERRHRD, ERRgeneral, NT_STATUS_SECRET_TOO_LONG}, {
562 ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_ERROR}, {
563 ERRHRD, ERRgeneral, NT_STATUS_FULLSCREEN_MODE}, {
564 ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_CONTEXT_IDS}, {
565 ERRDOS, ERRnoaccess, NT_STATUS_LOGON_TYPE_NOT_GRANTED}, {
566 ERRHRD, ERRgeneral, NT_STATUS_NOT_REGISTRY_FILE}, {
567 ERRHRD, ERRgeneral, NT_STATUS_NT_CROSS_ENCRYPTION_REQUIRED}, {
568 ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CTRLR_CONFIG_ERROR}, {
569 ERRHRD, ERRgeneral, NT_STATUS_FT_MISSING_MEMBER}, {
570 ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_SERVICE_ENTRY}, {
571 ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_CHARACTER}, {
572 ERRHRD, ERRgeneral, NT_STATUS_UNMAPPABLE_CHARACTER}, {
573 ERRHRD, ERRgeneral, NT_STATUS_UNDEFINED_CHARACTER}, {
574 ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_VOLUME}, {
575 ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_ID_MARK_NOT_FOUND}, {
576 ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_WRONG_CYLINDER}, {
577 ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_UNKNOWN_ERROR}, {
578 ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_BAD_REGISTERS}, {
579 ERRHRD, ERRgeneral, NT_STATUS_DISK_RECALIBRATE_FAILED}, {
580 ERRHRD, ERRgeneral, NT_STATUS_DISK_OPERATION_FAILED}, {
581 ERRHRD, ERRgeneral, NT_STATUS_DISK_RESET_FAILED}, {
582 ERRHRD, ERRgeneral, NT_STATUS_SHARED_IRQ_BUSY}, {
583 ERRHRD, ERRgeneral, NT_STATUS_FT_ORPHANING}, {
584 ERRHRD, ERRgeneral, 0xc000016e}, {
585 ERRHRD, ERRgeneral, 0xc000016f}, {
586 ERRHRD, ERRgeneral, 0xc0000170}, {
587 ERRHRD, ERRgeneral, 0xc0000171}, {
588 ERRHRD, ERRgeneral, NT_STATUS_PARTITION_FAILURE}, {
589 ERRHRD, ERRgeneral, NT_STATUS_INVALID_BLOCK_LENGTH}, {
590 ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_PARTITIONED}, {
591 ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_LOCK_MEDIA}, {
592 ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_UNLOAD_MEDIA}, {
593 ERRHRD, ERRgeneral, NT_STATUS_EOM_OVERFLOW}, {
594 ERRHRD, ERRgeneral, NT_STATUS_NO_MEDIA}, {
595 ERRHRD, ERRgeneral, 0xc0000179}, {
596 ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_MEMBER}, {
597 ERRHRD, ERRgeneral, NT_STATUS_INVALID_MEMBER}, {
598 ERRHRD, ERRgeneral, NT_STATUS_KEY_DELETED}, {
599 ERRHRD, ERRgeneral, NT_STATUS_NO_LOG_SPACE}, {
600 ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SIDS}, {
601 ERRHRD, ERRgeneral, NT_STATUS_LM_CROSS_ENCRYPTION_REQUIRED}, {
602 ERRHRD, ERRgeneral, NT_STATUS_KEY_HAS_CHILDREN}, {
603 ERRHRD, ERRgeneral, NT_STATUS_CHILD_MUST_BE_VOLATILE}, {
604 ERRDOS, 87, NT_STATUS_DEVICE_CONFIGURATION_ERROR}, {
605 ERRHRD, ERRgeneral, NT_STATUS_DRIVER_INTERNAL_ERROR}, {
606 ERRDOS, 22, NT_STATUS_INVALID_DEVICE_STATE}, {
607 ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR}, {
608 ERRHRD, ERRgeneral, NT_STATUS_DEVICE_PROTOCOL_ERROR}, {
609 ERRHRD, ERRgeneral, NT_STATUS_BACKUP_CONTROLLER}, {
610 ERRHRD, ERRgeneral, NT_STATUS_LOG_FILE_FULL}, {
611 ERRDOS, 19, NT_STATUS_TOO_LATE}, {
612 ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_LSA_SECRET},
613 /* { This NT error code was 'sqashed'
614 from NT_STATUS_NO_TRUST_SAM_ACCOUNT to
615 NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE during the session setup } */
617 ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_SAM_ACCOUNT}, {
618 ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_DOMAIN_FAILURE}, {
619 ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE}, {
620 ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CORRUPT}, {
621 ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_CANT_START}, {
622 ERRDOS, ERRnoaccess, NT_STATUS_TRUST_FAILURE}, {
623 ERRHRD, ERRgeneral, NT_STATUS_MUTANT_LIMIT_EXCEEDED}, {
624 ERRDOS, ERRnetlogonNotStarted, NT_STATUS_NETLOGON_NOT_STARTED}, {
625 ERRSRV, ERRaccountexpired, NT_STATUS_ACCOUNT_EXPIRED}, {
626 ERRHRD, ERRgeneral, NT_STATUS_POSSIBLE_DEADLOCK}, {
627 ERRHRD, ERRgeneral, NT_STATUS_NETWORK_CREDENTIAL_CONFLICT}, {
628 ERRHRD, ERRgeneral, NT_STATUS_REMOTE_SESSION_LIMIT}, {
629 ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CHANGED}, {
630 ERRDOS, ERRnoaccess, NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT}, {
631 ERRDOS, ERRnoaccess, NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT}, {
632 ERRDOS, ERRnoaccess, NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT},
633 /* { This NT error code was 'sqashed'
634 from NT_STATUS_DOMAIN_TRUST_INCONSISTENT to NT_STATUS_LOGON_FAILURE
635 during the session setup } */
637 ERRDOS, ERRnoaccess, NT_STATUS_DOMAIN_TRUST_INCONSISTENT}, {
638 ERRHRD, ERRgeneral, NT_STATUS_FS_DRIVER_REQUIRED}, {
639 ERRHRD, ERRgeneral, NT_STATUS_NO_USER_SESSION_KEY}, {
640 ERRDOS, 59, NT_STATUS_USER_SESSION_DELETED}, {
641 ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_LANG_NOT_FOUND}, {
642 ERRDOS, ERRnomem, NT_STATUS_INSUFF_SERVER_RESOURCES}, {
643 ERRHRD, ERRgeneral, NT_STATUS_INVALID_BUFFER_SIZE}, {
644 ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_COMPONENT}, {
645 ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_WILDCARD}, {
646 ERRDOS, 68, NT_STATUS_TOO_MANY_ADDRESSES}, {
647 ERRDOS, 52, NT_STATUS_ADDRESS_ALREADY_EXISTS}, {
648 ERRDOS, 64, NT_STATUS_ADDRESS_CLOSED}, {
649 ERRDOS, 64, NT_STATUS_CONNECTION_DISCONNECTED}, {
650 ERRDOS, 64, NT_STATUS_CONNECTION_RESET}, {
651 ERRDOS, 68, NT_STATUS_TOO_MANY_NODES}, {
652 ERRDOS, 59, NT_STATUS_TRANSACTION_ABORTED}, {
653 ERRDOS, 59, NT_STATUS_TRANSACTION_TIMED_OUT}, {
654 ERRDOS, 59, NT_STATUS_TRANSACTION_NO_RELEASE}, {
655 ERRDOS, 59, NT_STATUS_TRANSACTION_NO_MATCH}, {
656 ERRDOS, 59, NT_STATUS_TRANSACTION_RESPONDED}, {
657 ERRDOS, 59, NT_STATUS_TRANSACTION_INVALID_ID}, {
658 ERRDOS, 59, NT_STATUS_TRANSACTION_INVALID_TYPE}, {
659 ERRDOS, ERRunsup, NT_STATUS_NOT_SERVER_SESSION}, {
660 ERRDOS, ERRunsup, NT_STATUS_NOT_CLIENT_SESSION}, {
661 ERRHRD, ERRgeneral, NT_STATUS_CANNOT_LOAD_REGISTRY_FILE}, {
662 ERRHRD, ERRgeneral, NT_STATUS_DEBUG_ATTACH_FAILED}, {
663 ERRHRD, ERRgeneral, NT_STATUS_SYSTEM_PROCESS_TERMINATED}, {
664 ERRHRD, ERRgeneral, NT_STATUS_DATA_NOT_ACCEPTED}, {
665 ERRHRD, ERRgeneral, NT_STATUS_NO_BROWSER_SERVERS_FOUND}, {
666 ERRHRD, ERRgeneral, NT_STATUS_VDM_HARD_ERROR}, {
667 ERRHRD, ERRgeneral, NT_STATUS_DRIVER_CANCEL_TIMEOUT}, {
668 ERRHRD, ERRgeneral, NT_STATUS_REPLY_MESSAGE_MISMATCH}, {
669 ERRHRD, ERRgeneral, NT_STATUS_MAPPED_ALIGNMENT}, {
670 ERRDOS, 193, NT_STATUS_IMAGE_CHECKSUM_MISMATCH}, {
671 ERRHRD, ERRgeneral, NT_STATUS_LOST_WRITEBEHIND_DATA}, {
672 ERRHRD, ERRgeneral, NT_STATUS_CLIENT_SERVER_PARAMETERS_INVALID}, {
673 ERRSRV, ERRpasswordExpired, NT_STATUS_PASSWORD_MUST_CHANGE}, {
674 ERRHRD, ERRgeneral, NT_STATUS_NOT_FOUND}, {
675 ERRHRD, ERRgeneral, NT_STATUS_NOT_TINY_STREAM}, {
676 ERRHRD, ERRgeneral, NT_STATUS_RECOVERY_FAILURE}, {
677 ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW_READ}, {
678 ERRHRD, ERRgeneral, NT_STATUS_FAIL_CHECK}, {
679 ERRHRD, ERRgeneral, NT_STATUS_DUPLICATE_OBJECTID}, {
680 ERRHRD, ERRgeneral, NT_STATUS_OBJECTID_EXISTS}, {
681 ERRHRD, ERRgeneral, NT_STATUS_CONVERT_TO_LARGE}, {
682 ERRHRD, ERRgeneral, NT_STATUS_RETRY}, {
683 ERRHRD, ERRgeneral, NT_STATUS_FOUND_OUT_OF_SCOPE}, {
684 ERRHRD, ERRgeneral, NT_STATUS_ALLOCATE_BUCKET}, {
685 ERRHRD, ERRgeneral, NT_STATUS_PROPSET_NOT_FOUND}, {
686 ERRHRD, ERRgeneral, NT_STATUS_MARSHALL_OVERFLOW}, {
687 ERRHRD, ERRgeneral, NT_STATUS_INVALID_VARIANT}, {
688 ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND}, {
689 ERRDOS, ERRnoaccess, NT_STATUS_ACCOUNT_LOCKED_OUT}, {
690 ERRDOS, ERRbadfid, NT_STATUS_HANDLE_NOT_CLOSABLE}, {
691 ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_REFUSED}, {
692 ERRHRD, ERRgeneral, NT_STATUS_GRACEFUL_DISCONNECT}, {
693 ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_ALREADY_ASSOCIATED}, {
694 ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_NOT_ASSOCIATED}, {
695 ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_INVALID}, {
696 ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ACTIVE}, {
697 ERRHRD, ERRgeneral, NT_STATUS_NETWORK_UNREACHABLE}, {
698 ERRHRD, ERRgeneral, NT_STATUS_HOST_UNREACHABLE}, {
699 ERRHRD, ERRgeneral, NT_STATUS_PROTOCOL_UNREACHABLE}, {
700 ERRHRD, ERRgeneral, NT_STATUS_PORT_UNREACHABLE}, {
701 ERRHRD, ERRgeneral, NT_STATUS_REQUEST_ABORTED}, {
702 ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ABORTED}, {
703 ERRHRD, ERRgeneral, NT_STATUS_BAD_COMPRESSION_BUFFER}, {
704 ERRHRD, ERRgeneral, NT_STATUS_USER_MAPPED_FILE}, {
705 ERRHRD, ERRgeneral, NT_STATUS_AUDIT_FAILED}, {
706 ERRHRD, ERRgeneral, NT_STATUS_TIMER_RESOLUTION_NOT_SET}, {
707 ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_COUNT_LIMIT}, {
708 ERRHRD, ERRgeneral, NT_STATUS_LOGIN_TIME_RESTRICTION}, {
709 ERRHRD, ERRgeneral, NT_STATUS_LOGIN_WKSTA_RESTRICTION}, {
710 ERRDOS, 193, NT_STATUS_IMAGE_MP_UP_MISMATCH}, {
711 ERRHRD, ERRgeneral, 0xc000024a}, {
712 ERRHRD, ERRgeneral, 0xc000024b}, {
713 ERRHRD, ERRgeneral, 0xc000024c}, {
714 ERRHRD, ERRgeneral, 0xc000024d}, {
715 ERRHRD, ERRgeneral, 0xc000024e}, {
716 ERRHRD, ERRgeneral, 0xc000024f}, {
717 ERRHRD, ERRgeneral, NT_STATUS_INSUFFICIENT_LOGON_INFO}, {
718 ERRHRD, ERRgeneral, NT_STATUS_BAD_DLL_ENTRYPOINT}, {
719 ERRHRD, ERRgeneral, NT_STATUS_BAD_SERVICE_ENTRYPOINT}, {
720 ERRHRD, ERRgeneral, NT_STATUS_LPC_REPLY_LOST}, {
721 ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT1}, {
722 ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT2}, {
723 ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_QUOTA_LIMIT}, {
724 ERRSRV, 3, NT_STATUS_PATH_NOT_COVERED}, {
725 ERRHRD, ERRgeneral, NT_STATUS_NO_CALLBACK_ACTIVE}, {
726 ERRHRD, ERRgeneral, NT_STATUS_LICENSE_QUOTA_EXCEEDED}, {
727 ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_SHORT}, {
728 ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_RECENT}, {
729 ERRHRD, ERRgeneral, NT_STATUS_PWD_HISTORY_CONFLICT}, {
730 ERRHRD, ERRgeneral, 0xc000025d}, {
731 ERRHRD, ERRgeneral, NT_STATUS_PLUGPLAY_NO_DEVICE}, {
732 ERRHRD, ERRgeneral, NT_STATUS_UNSUPPORTED_COMPRESSION}, {
733 ERRHRD, ERRgeneral, NT_STATUS_INVALID_HW_PROFILE}, {
734 ERRHRD, ERRgeneral, NT_STATUS_INVALID_PLUGPLAY_DEVICE_PATH}, {
735 ERRDOS, 182, NT_STATUS_DRIVER_ORDINAL_NOT_FOUND}, {
736 ERRDOS, 127, NT_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND}, {
737 ERRDOS, 288, NT_STATUS_RESOURCE_NOT_OWNED}, {
738 ERRDOS, ErrTooManyLinks, NT_STATUS_TOO_MANY_LINKS}, {
739 ERRHRD, ERRgeneral, NT_STATUS_QUOTA_LIST_INCONSISTENT}, {
740 ERRHRD, ERRgeneral, NT_STATUS_FILE_IS_OFFLINE}, {
741 ERRDOS, 21, 0xc000026e}, {
742 ERRDOS, 161, 0xc0000281}, {
743 ERRDOS, ERRnoaccess, 0xc000028a}, {
744 ERRDOS, ERRnoaccess, 0xc000028b}, {
745 ERRHRD, ERRgeneral, 0xc000028c}, {
746 ERRDOS, ERRnoaccess, 0xc000028d}, {
747 ERRDOS, ERRnoaccess, 0xc000028e}, {
748 ERRDOS, ERRnoaccess, 0xc000028f}, {
749 ERRDOS, ERRnoaccess, 0xc0000290}, {
750 ERRDOS, ERRbadfunc, 0xc000029c}, {
751 ERRDOS, ERRinvlevel, 0x007c0001}, };
753 /*****************************************************************************
754 Print an error message from the status code
755 *****************************************************************************/
757 cifs_print_status(__u32 status_code)
761 while (nt_errs[idx].nt_errstr != NULL) {
762 if (((nt_errs[idx].nt_errcode) & 0xFFFFFF) ==
763 (status_code & 0xFFFFFF)) {
764 printk(KERN_NOTICE "Status code returned 0x%08x %s\n",
765 status_code, nt_errs[idx].nt_errstr);
774 ntstatus_to_dos(__u32 ntstatus, __u8 *eclass, __u16 *ecode)
782 for (i = 0; ntstatus_to_dos_map[i].ntstatus; i++) {
783 if (ntstatus == ntstatus_to_dos_map[i].ntstatus) {
784 *eclass = ntstatus_to_dos_map[i].dos_class;
785 *ecode = ntstatus_to_dos_map[i].dos_code;
794 map_smb_to_linux_error(struct smb_hdr *smb, int logErr)
797 int rc = -EIO; /* if transport error smb error may not be set */
801 /* BB if NT Status codes - map NT BB */
803 /* old style smb error codes */
804 if (smb->Status.CifsError == 0)
807 if (smb->Flags2 & SMBFLG2_ERR_STATUS) {
808 /* translate the newer STATUS codes to old style SMB errors
809 * and then to POSIX errors */
810 __u32 err = le32_to_cpu(smb->Status.CifsError);
811 if (logErr && (err != (NT_STATUS_MORE_PROCESSING_REQUIRED)))
812 cifs_print_status(err);
813 else if (cifsFYI & CIFS_RC)
814 cifs_print_status(err);
815 ntstatus_to_dos(err, &smberrclass, &smberrcode);
817 smberrclass = smb->Status.DosError.ErrorClass;
818 smberrcode = le16_to_cpu(smb->Status.DosError.Error);
821 /* old style errors */
823 /* DOS class smb error codes - map DOS */
824 if (smberrclass == ERRDOS) {
825 /* 1 byte field no need to byte reverse */
828 sizeof(mapping_table_ERRDOS) /
829 sizeof(struct smb_to_posix_error); i++) {
830 if (mapping_table_ERRDOS[i].smb_err == 0)
832 else if (mapping_table_ERRDOS[i].smb_err ==
834 rc = mapping_table_ERRDOS[i].posix_code;
837 /* else try next error mapping one to see if match */
839 } else if (smberrclass == ERRSRV) {
840 /* server class of error codes */
843 sizeof(mapping_table_ERRSRV) /
844 sizeof(struct smb_to_posix_error); i++) {
845 if (mapping_table_ERRSRV[i].smb_err == 0)
847 else if (mapping_table_ERRSRV[i].smb_err ==
849 rc = mapping_table_ERRSRV[i].posix_code;
852 /* else try next error mapping to see if match */
855 /* else ERRHRD class errors or junk - return EIO */
857 cFYI(1, ("Mapping smb error code %d to POSIX err %d",
860 /* generic corrective action e.g. reconnect SMB session on
861 * ERRbaduid could be added */
867 * calculate the size of the SMB message based on the fixed header
868 * portion, the number of word parameters and the data portion of the message
871 smbCalcSize(struct smb_hdr *ptr)
873 return (sizeof(struct smb_hdr) + (2 * ptr->WordCount) +
874 2 /* size of the bcc field */ + BCC(ptr));
878 smbCalcSize_LE(struct smb_hdr *ptr)
880 return (sizeof(struct smb_hdr) + (2 * ptr->WordCount) +
881 2 /* size of the bcc field */ + le16_to_cpu(BCC_LE(ptr)));
884 /* The following are taken from fs/ntfs/util.c */
886 #define NTFS_TIME_OFFSET ((u64)(369*365 + 89) * 24 * 3600 * 10000000)
889 * Convert the NT UTC (based 1601-01-01, in hundred nanosecond units)
890 * into Unix UTC (based 1970-01-01, in seconds).
893 cifs_NTtimeToUnix(u64 ntutc)
896 /* BB what about the timezone? BB */
898 /* Subtract the NTFS time offset, then convert to 1s intervals. */
901 t = ntutc - NTFS_TIME_OFFSET;
902 ts.tv_nsec = do_div(t, 10000000) * 100;
907 /* Convert the Unix UTC into NT UTC. */
909 cifs_UnixTimeToNT(struct timespec t)
911 /* Convert to 100ns intervals and then add the NTFS time offset. */
912 return (u64) t.tv_sec * 10000000 + t.tv_nsec/100 + NTFS_TIME_OFFSET;
915 static int total_days_of_prev_months[] =
916 {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
919 __le64 cnvrtDosCifsTm(__u16 date, __u16 time)
921 return cpu_to_le64(cifs_UnixTimeToNT(cnvrtDosUnixTm(date, time)));
924 struct timespec cnvrtDosUnixTm(__u16 date, __u16 time)
927 int sec, min, days, month, year;
928 SMB_TIME *st = (SMB_TIME *)&time;
929 SMB_DATE *sd = (SMB_DATE *)&date;
931 cFYI(1, ("date %d time %d", date, time));
933 sec = 2 * st->TwoSeconds;
935 if ((sec > 59) || (min > 59))
936 cERROR(1, ("illegal time min %d sec %d", min, sec));
938 sec += 60 * 60 * st->Hours;
940 cERROR(1, ("illegal hours %d", st->Hours));
943 if ((days > 31) || (month > 12)) {
944 cERROR(1, ("illegal date, month %d day: %d", month, days));
949 days += total_days_of_prev_months[month];
950 days += 3652; /* account for difference in days between 1980 and 1970 */
953 days += (year/4); /* leap year */
954 /* generalized leap year calculation is more complex, ie no leap year
955 for years/100 except for years/400, but since the maximum number for DOS
956 year is 2**7, the last year is 1980+127, which means we need only
957 consider 2 special case years, ie the years 2000 and 2100, and only
958 adjust for the lack of leap year for the year 2100, as 2000 was a
959 leap year (divisable by 400) */
960 if (year >= 120) /* the year 2100 */
961 days = days - 1; /* do not count leap year for the year 2100 */
963 /* adjust for leap year where we are still before leap day */
965 days -= ((year & 0x03) == 0) && (month < 2 ? 1 : 0);
966 sec += 24 * 60 * 60 * days;
970 /* cFYI(1,("sec after cnvrt dos to unix time %d",sec)); */