root/fs/smb/client/smberr.h
/* 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