123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- /* SPDX-License-Identifier: GPL-2.0-or-later */
- /*
- * Copyright (C) 2020, Microsoft Corporation.
- *
- * Author(s): Steve French <[email protected]>
- * David Howells <[email protected]>
- */
- #ifndef _FS_CONTEXT_H
- #define _FS_CONTEXT_H
- #include "cifsglob.h"
- #include <linux/parser.h>
- #include <linux/fs_parser.h>
- /* Log errors in fs_context (new mount api) but also in dmesg (old style) */
- #define cifs_errorf(fc, fmt, ...) \
- do { \
- errorf(fc, fmt, ## __VA_ARGS__); \
- cifs_dbg(VFS, fmt, ## __VA_ARGS__); \
- } while (0)
- enum smb_version {
- Smb_1 = 1,
- Smb_20,
- Smb_21,
- Smb_30,
- Smb_302,
- Smb_311,
- Smb_3any,
- Smb_default,
- Smb_version_err
- };
- enum {
- Opt_cache_loose,
- Opt_cache_strict,
- Opt_cache_none,
- Opt_cache_ro,
- Opt_cache_rw,
- Opt_cache_err
- };
- enum cifs_sec_param {
- Opt_sec_krb5,
- Opt_sec_krb5i,
- Opt_sec_krb5p,
- Opt_sec_ntlmsspi,
- Opt_sec_ntlmssp,
- Opt_sec_ntlmv2,
- Opt_sec_ntlmv2i,
- Opt_sec_none,
- Opt_sec_err
- };
- enum cifs_param {
- /* Mount options that take no arguments */
- Opt_user_xattr,
- Opt_forceuid,
- Opt_forcegid,
- Opt_noblocksend,
- Opt_noautotune,
- Opt_nolease,
- Opt_nosparse,
- Opt_hard,
- Opt_soft,
- Opt_perm,
- Opt_nodelete,
- Opt_mapposix,
- Opt_mapchars,
- Opt_nomapchars,
- Opt_sfu,
- Opt_nodfs,
- Opt_posixpaths,
- Opt_unix,
- Opt_nocase,
- Opt_brl,
- Opt_handlecache,
- Opt_forcemandatorylock,
- Opt_setuidfromacl,
- Opt_setuids,
- Opt_dynperm,
- Opt_intr,
- Opt_strictsync,
- Opt_serverino,
- Opt_rwpidforward,
- Opt_cifsacl,
- Opt_acl,
- Opt_locallease,
- Opt_sign,
- Opt_ignore_signature,
- Opt_seal,
- Opt_noac,
- Opt_fsc,
- Opt_mfsymlinks,
- Opt_multiuser,
- Opt_sloppy,
- Opt_nosharesock,
- Opt_persistent,
- Opt_resilient,
- Opt_tcp_nodelay,
- Opt_domainauto,
- Opt_rdma,
- Opt_modesid,
- Opt_rootfs,
- Opt_multichannel,
- Opt_compress,
- Opt_witness,
- /* Mount options which take numeric value */
- Opt_backupuid,
- Opt_backupgid,
- Opt_uid,
- Opt_cruid,
- Opt_gid,
- Opt_port,
- Opt_file_mode,
- Opt_dirmode,
- Opt_min_enc_offload,
- Opt_blocksize,
- Opt_rasize,
- Opt_rsize,
- Opt_wsize,
- Opt_actimeo,
- Opt_acdirmax,
- Opt_acregmax,
- Opt_closetimeo,
- Opt_echo_interval,
- Opt_max_credits,
- Opt_snapshot,
- Opt_max_channels,
- Opt_handletimeout,
- /* Mount options which take string value */
- Opt_source,
- Opt_user,
- Opt_pass,
- Opt_ip,
- Opt_domain,
- Opt_srcaddr,
- Opt_iocharset,
- Opt_netbiosname,
- Opt_servern,
- Opt_ver,
- Opt_vers,
- Opt_sec,
- Opt_cache,
- /* Mount options to be ignored */
- Opt_ignore,
- Opt_err
- };
- struct smb3_fs_context {
- bool uid_specified;
- bool cruid_specified;
- bool gid_specified;
- bool sloppy;
- bool got_ip;
- bool got_version;
- bool got_rsize;
- bool got_wsize;
- bool got_bsize;
- unsigned short port;
- char *username;
- char *password;
- char *domainname;
- char *source;
- char *server_hostname;
- char *UNC;
- char *nodename;
- char workstation_name[CIFS_MAX_WORKSTATION_LEN];
- char *iocharset; /* local code page for mapping to and from Unicode */
- char source_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL]; /* clnt nb name */
- char target_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL]; /* srvr nb name */
- kuid_t cred_uid;
- kuid_t linux_uid;
- kgid_t linux_gid;
- kuid_t backupuid;
- kgid_t backupgid;
- umode_t file_mode;
- umode_t dir_mode;
- enum securityEnum sectype; /* sectype requested via mnt opts */
- bool sign; /* was signing requested via mnt opts? */
- bool ignore_signature:1;
- bool retry:1;
- bool intr:1;
- bool setuids:1;
- bool setuidfromacl:1;
- bool override_uid:1;
- bool override_gid:1;
- bool dynperm:1;
- bool noperm:1;
- bool nodelete:1;
- bool mode_ace:1;
- bool no_psx_acl:1; /* set if posix acl support should be disabled */
- bool cifs_acl:1;
- bool backupuid_specified; /* mount option backupuid is specified */
- bool backupgid_specified; /* mount option backupgid is specified */
- bool no_xattr:1; /* set if xattr (EA) support should be disabled*/
- bool server_ino:1; /* use inode numbers from server ie UniqueId */
- bool direct_io:1;
- bool strict_io:1; /* strict cache behavior */
- bool cache_ro:1;
- bool cache_rw:1;
- bool remap:1; /* set to remap seven reserved chars in filenames */
- bool sfu_remap:1; /* remap seven reserved chars ala SFU */
- bool posix_paths:1; /* unset to not ask for posix pathnames. */
- bool no_linux_ext:1;
- bool linux_ext:1;
- bool sfu_emul:1;
- bool nullauth:1; /* attempt to authenticate with null user */
- bool nocase:1; /* request case insensitive filenames */
- bool nobrl:1; /* disable sending byte range locks to srv */
- bool nohandlecache:1; /* disable caching dir handles if srvr probs */
- bool mand_lock:1; /* send mandatory not posix byte range lock reqs */
- bool seal:1; /* request transport encryption on share */
- bool nodfs:1; /* Do not request DFS, even if available */
- bool local_lease:1; /* check leases only on local system, not remote */
- bool noblocksnd:1;
- bool noautotune:1;
- bool nostrictsync:1; /* do not force expensive SMBflush on every sync */
- bool no_lease:1; /* disable requesting leases */
- bool no_sparse:1; /* do not attempt to set files sparse */
- bool fsc:1; /* enable fscache */
- bool mfsymlinks:1; /* use Minshall+French Symlinks */
- bool multiuser:1;
- bool rwpidforward:1; /* pid forward for read/write operations */
- bool nosharesock:1;
- bool persistent:1;
- bool nopersistent:1;
- bool resilient:1; /* noresilient not required since not fored for CA */
- bool domainauto:1;
- bool rdma:1;
- bool multichannel:1;
- bool use_client_guid:1;
- /* reuse existing guid for multichannel */
- u8 client_guid[SMB2_CLIENT_GUID_SIZE];
- unsigned int bsize;
- unsigned int rasize;
- unsigned int rsize;
- unsigned int wsize;
- unsigned int min_offload;
- bool sockopt_tcp_nodelay:1;
- /* attribute cache timemout for files and directories in jiffies */
- unsigned long acregmax;
- unsigned long acdirmax;
- /* timeout for deferred close of files in jiffies */
- unsigned long closetimeo;
- struct smb_version_operations *ops;
- struct smb_version_values *vals;
- char *prepath;
- struct sockaddr_storage dstaddr; /* destination address */
- struct sockaddr_storage srcaddr; /* allow binding to a local IP */
- struct nls_table *local_nls; /* This is a copy of the pointer in cifs_sb */
- unsigned int echo_interval; /* echo interval in secs */
- __u64 snapshot_time; /* needed for timewarp tokens */
- __u32 handle_timeout; /* persistent and durable handle timeout in ms */
- unsigned int max_credits; /* smb3 max_credits 10 < credits < 60000 */
- unsigned int max_channels;
- __u16 compression; /* compression algorithm 0xFFFF default 0=disabled */
- bool rootfs:1; /* if it's a SMB root file system */
- bool witness:1; /* use witness protocol */
- char *mount_options;
- };
- extern const struct fs_parameter_spec smb3_fs_parameters[];
- extern int smb3_init_fs_context(struct fs_context *fc);
- extern void smb3_cleanup_fs_context_contents(struct smb3_fs_context *ctx);
- extern void smb3_cleanup_fs_context(struct smb3_fs_context *ctx);
- static inline struct smb3_fs_context *smb3_fc2context(const struct fs_context *fc)
- {
- return fc->fs_private;
- }
- extern int smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx);
- extern void smb3_update_mnt_flags(struct cifs_sb_info *cifs_sb);
- /*
- * max deferred close timeout (jiffies) - 2^30
- */
- #define SMB3_MAX_DCLOSETIMEO (1 << 30)
- #define SMB3_DEF_DCLOSETIMEO (1 * HZ) /* even 1 sec enough to help eg open/write/close/open/read */
- extern char *cifs_sanitize_prepath(char *prepath, gfp_t gfp);
- #endif
|