Contributors: 4
Author Tokens Token Proportion Commits Commit Proportion
Steve French 343 70.43% 10 66.67%
Huiwen He 136 27.93% 3 20.00%
Jeff Layton 4 0.82% 1 6.67%
Jeremy Allison 4 0.82% 1 6.67%
Total 487 15


/* SPDX-License-Identifier: LGPL-2.1 */
/*
 *
 *   Copyright (c) International Business Machines  Corp., 2002,2004
 *   Author(s): Steve French (sfrench@us.ibm.com)
 *
 *   See Error Codes section of the SNIA CIFS Specification
 *   for more information
 *
 */

struct smb_to_posix_error {
	__u16 smb_err;
	int posix_code;
};

/* The request was successful. */
#define SUCCESS	0x00
/* Error is from the core DOS operating system set */
#define ERRDOS	0x01
/* Error is generated by the file server daemon */
#define ERRSRV	0x02
/* Error is a hardware error. */
#define ERRHRD	0x03
/* Command was not in the "SMB" format. */
#define ERRCMD	0xFF

/* The following error codes may be generated with the SUCCESS error class.*/

/*#define SUCCESS	0	The request was successful. */

/*
 * The following error codes may be generated with the ERRDOS error class.
 * The comment at the end of each definition indicates the POSIX error
 * code; it is used to generate the `mapping_table_ERRDOS` array.
 */

/*
 * Invalid function. The server did not
 * recognize or could not perform a
 * system call generated by the server,
 * e.g., set the DIRECTORY attribute on
 * a data file, invalid seek mode.
 */
#define ERRbadfunc		1	// -EINVAL
/*
 * File not found. The last component
 * of a file's pathname could not be
 * found.
 */
#define ERRbadfile		2	// -ENOENT
/*
 * Directory invalid. A directory
 * component in a pathname could not be
 * found.
 */
#define ERRbadpath		3	// -ENOTDIR
/*
 * Too many open files. The server has
 * no file handles available.
 */
#define ERRnofids		4	// -EMFILE
/*
 * Access denied, the client's context
 * does not permit the requested
 * function. This includes the
 * following conditions: invalid rename
 * command, write to Fid open for read
 * only, read on Fid open for write
 * only, attempt to delete a non-empty
 * directory
 */
#define ERRnoaccess		5	// -EACCES
/*
 * Invalid file handle. The file handle
 * specified was not recognized by the
 * server.
 */
#define ERRbadfid		6	// -EBADF
/* Memory control blocks destroyed. */
#define ERRbadmcb		7	// -EIO
/*
 * Insufficient server memory to
 * perform the requested function.
 */
#define ERRnomem		8	// -EREMOTEIO
/* Invalid memory block address. */
#define ERRbadmem		9	// -EFAULT
/* Invalid environment. */
#define ERRbadenv		10	// -EFAULT
/* Invalid format. */
#define ERRbadformat		11	// -EINVAL
/* Invalid open mode. */
#define ERRbadaccess		12	// -EACCES
/*
 * Invalid data (generated only by
 * IOCTL calls within the server).
 */
#define ERRbaddata		13	// -EIO
/* Invalid drive specified. */
#define ERRbaddrive		15	// -ENXIO
/*
 * A Delete Directory request attempted
 * to remove the server's current
 * directory.
 */
#define ERRremcd		16	// -EACCES
/*
 * Not same device (e.g., a cross
 * volume rename was attempted
 */
#define ERRdiffdevice		17	// -EXDEV
/*
 * A File Search command can find no
 * more files matching the specified
 * criteria.
 */
#define ERRnofiles		18	// -ENOENT
/* media is write protected */
#define ERRwriteprot		19	// -EROFS
#define ERRgeneral		31
/*
 * The sharing mode specified for an
 * Open conflicts with existing FIDs on
 * the file.
 */
#define ERRbadshare		32	// -EBUSY
/*
 * A Lock request conflicted with an
 * existing lock or specified an
 * invalid mode, or an Unlock requested
 * attempted to remove a lock held by
 * another process.
 */
#define ERRlock			33	// -EACCES
#define ERRunsup		50	// -EINVAL
#define ERRnosuchshare		67	// -ENXIO
/*
 * The file named in the request
 * already exists.
 */
#define ERRfilexists		80	// -EEXIST
#define ERRinvparm		87	// -EINVAL
#define ERRdiskfull		112	// -ENOSPC
#define ERRinvname		123	// -ENOENT
#define ERRunknownlevel		124	// -EOPNOTSUPP
#define ERRdirnotempty		145	// -ENOTEMPTY
#define ERRnotlocked		158	// -ENOLCK
#define ERRcancelviolation	173	// -ENOLCK
#define ERRalreadyexists	183	// -EEXIST
#define ERRbadpipe		230
#define ERRpipebusy		231
#define ERRpipeclosing		232
#define ERRnotconnected		233
#define ERRmoredata		234	// -EOVERFLOW
#define ERReasnotsupported	282	// -EOPNOTSUPP
/*
 * The operation would cause a quota
 * limit to be exceeded.
 */
#define ErrQuota		0x200	// -EDQUOT
/*
 * A link operation was performed on a
 * pathname that was not a link.
 */
#define ErrNotALink		0x201	// -ENOLINK
#define ERRnetlogonNotStarted	2455	// -ENOPROTOOPT

/* Below errors are used internally (do not come over the wire) for passthrough
   from STATUS codes to POSIX only  */
#define ERRsymlink              0xFFFD	// -EOPNOTSUPP
#define ErrTooManyLinks         0xFFFE	// -EMLINK

/*
 * The following error codes may be generated with the ERRSRV error class.
 * The comment at the end of each definition indicates the POSIX error
 * code; it is used to generate the `mapping_table_ERRSRV` array.
 */

/*
 * Non-specific error code. It is
 * returned under the following
 * conditions: resource other than disk
 * space exhausted (e.g. TIDs), first
 * SMB command was not negotiate,
 * multiple negotiates attempted, and
 * internal server error.
 */
#define ERRerror		1	// -EIO
/*
 * Bad password - name/password pair in
 * a TreeConnect or Session Setup are
 * invalid.
 */
#define ERRbadpw		2	// -EACCES
/*
 * used for indicating DFS referral
 * needed
 */
#define ERRbadtype		3	// -EREMOTE
/*
 * The client does not have the
 * necessary access rights within the
 * specified context for requested
 * function.
 */
#define ERRaccess		4	// -EACCES
/*
 * The Tid specified in a command was
 * invalid.
 */
#define ERRinvtid		5	// -ENXIO
/*
 * Invalid network name in tree
 * connect.
 */
#define ERRinvnetname		6	// -ENXIO
/*
 * Invalid device - printer request
 * made to non-printer connection or
 * non-printer request made to printer
 * connection.
 */
#define ERRinvdevice		7	// -ENXIO
/*
 * Print queue full (files) -- returned
 * by open print file.
 */
#define ERRqfull		49	// -ENOSPC
/* Print queue full -- no space. */
#define ERRqtoobig		50	// -ENOSPC
/* EOF on print queue dump */
#define ERRqeof			51	// -EIO
/* Invalid print file FID. */
#define ERRinvpfid		52	// -EBADF
/*
 * The server did not recognize the
 * command received.
 */
#define ERRsmbcmd		64	// -EBADRQC
/*
 * The server encountered an internal
 * error, e.g., system file
 * unavailable.
 */
#define ERRsrverror		65	// -EIO
/* (obsolete) */
#define ERRbadBID		66	// -EIO
/*
 * The Fid and pathname parameters
 * contained an invalid combination of
 * values.
 */
#define ERRfilespecs		67	// -EINVAL
/* (obsolete) */
#define ERRbadLink		68	// -EIO
/*
 * The access permissions specified for
 * a file or directory are not a valid
 * combination.
 */
#define ERRbadpermits		69	// -EINVAL
#define ERRbadPID		70	// -ESRCH
/* attribute (mode) is invalid */
#define ERRsetattrmode		71	// -EINVAL
/* Server is paused */
#define ERRpaused		81	// -EHOSTDOWN
/* reserved - messaging off */
#define ERRmsgoff		82	// -EHOSTDOWN
/* reserved - no room for message */
#define ERRnoroom		83	// -ENOSPC
/* reserved - too many remote names */
#define ERRrmuns		87	// -EUSERS
/* operation timed out */
#define ERRtimeout		88	// -ETIME
/* No resources available for request */
#define ERRnoresource		89	// -EREMOTEIO
/* Too many UIDs active on this session */
#define ERRtoomanyuids		90	// -EUSERS
/* The UID is not known as a valid user */
#define ERRbaduid		91	// -EACCES
/* temporarily unable to use raw */
#define ERRusempx		250	// -EIO
/*
 * temporarily unable to use either raw
 * or mpx
 */
#define ERRusestd		251	// -EIO
#define ERR_NOTIFY_ENUM_DIR	1024	// -ENOBUFS
/* user account does not exist */
#define ERRnoSuchUser		2238	// -EACCES
#define ERRaccountexpired	2239	// -EKEYEXPIRED
/* can not logon from this client */
#define ERRbadclient		2240	// -EACCES
/* logon hours do not allow this */
#define ERRbadLogonTime		2241	// -EACCES
#define ERRpasswordExpired	2242	// -EKEYEXPIRED
#define ERRnosupport		0xFFFF	// -EINVAL