fs_context.h 6.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 *   Copyright (C) 2020, Microsoft Corporation.
 *
 *   Author(s): Steve French <stfrench@microsoft.com>
 *              David Howells <dhowells@redhat.com>
 */

#ifndef _FS_CONTEXT_H
#define _FS_CONTEXT_H

12
#include "cifsglob.h"
R
Ronnie Sahlberg 已提交
13 14 15
#include <linux/parser.h>
#include <linux/fs_parser.h>

16 17 18 19 20 21
/* 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)
22

23 24 25 26 27 28 29 30 31 32 33 34
enum smb_version {
	Smb_1 = 1,
	Smb_20,
	Smb_21,
	Smb_30,
	Smb_302,
	Smb_311,
	Smb_3any,
	Smb_default,
	Smb_version_err
};

35 36 37 38 39 40 41 42 43
enum {
	Opt_cache_loose,
	Opt_cache_strict,
	Opt_cache_none,
	Opt_cache_ro,
	Opt_cache_rw,
	Opt_cache_err
};

44 45 46 47 48 49 50 51 52
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,
53

54 55 56
	Opt_sec_err
};

57 58
enum cifs_param {
	/* Mount options that take no arguments */
R
Ronnie Sahlberg 已提交
59 60 61
	Opt_user_xattr,
	Opt_forceuid,
	Opt_forcegid,
62 63 64
	Opt_noblocksend,
	Opt_noautotune,
	Opt_nolease,
R
Ronnie Sahlberg 已提交
65 66 67
	Opt_hard,
	Opt_soft,
	Opt_perm,
68
	Opt_nodelete,
R
Ronnie Sahlberg 已提交
69
	Opt_mapposix,
70 71
	Opt_mapchars,
	Opt_nomapchars,
R
Ronnie Sahlberg 已提交
72
	Opt_sfu,
73
	Opt_nodfs,
R
Ronnie Sahlberg 已提交
74 75
	Opt_posixpaths,
	Opt_unix,
76
	Opt_nocase,
R
Ronnie Sahlberg 已提交
77 78
	Opt_brl,
	Opt_handlecache,
79 80
	Opt_forcemandatorylock,
	Opt_setuidfromacl,
R
Ronnie Sahlberg 已提交
81 82 83 84 85
	Opt_setuids,
	Opt_dynperm,
	Opt_intr,
	Opt_strictsync,
	Opt_serverino,
86
	Opt_rwpidforward,
R
Ronnie Sahlberg 已提交
87 88
	Opt_cifsacl,
	Opt_acl,
89 90 91 92 93 94 95 96 97 98
	Opt_locallease,
	Opt_sign,
	Opt_ignore_signature,
	Opt_seal,
	Opt_noac,
	Opt_fsc,
	Opt_mfsymlinks,
	Opt_multiuser,
	Opt_sloppy,
	Opt_nosharesock,
R
Ronnie Sahlberg 已提交
99 100
	Opt_persistent,
	Opt_resilient,
101 102 103 104
	Opt_domainauto,
	Opt_rdma,
	Opt_modesid,
	Opt_rootfs,
R
Ronnie Sahlberg 已提交
105
	Opt_multichannel,
106
	Opt_compress,
107
	Opt_witness,
108 109 110 111 112 113 114 115 116 117 118 119

	/* 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,
120
	Opt_rasize,
121 122 123
	Opt_rsize,
	Opt_wsize,
	Opt_actimeo,
124
	Opt_acdirmax,
125
	Opt_acregmax,
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
	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
};

153 154
struct smb3_fs_context {
	bool uid_specified;
155
	bool cruid_specified;
156 157 158 159
	bool gid_specified;
	bool sloppy;
	bool got_ip;
	bool got_version;
160 161 162
	bool got_rsize;
	bool got_wsize;
	bool got_bsize;
163 164 165 166 167
	unsigned short port;

	char *username;
	char *password;
	char *domainname;
168
	char *source;
169
	char *UNC;
170
	char *nodename;
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
	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 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;
237
	unsigned int rasize;
238 239 240 241
	unsigned int rsize;
	unsigned int wsize;
	unsigned int min_offload;
	bool sockopt_tcp_nodelay:1;
242 243 244
	/* attribute cache timemout for files and directories in jiffies */
	unsigned long acregmax;
	unsigned long acdirmax;
245 246 247 248 249
	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 */
250
	struct nls_table *local_nls; /* This is a copy of the pointer in cifs_sb */
251 252 253 254 255 256 257
	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 */
258
	bool witness:1; /* use witness protocol */
R
Ronnie Sahlberg 已提交
259 260

	char *mount_options;
261 262
};

R
Ronnie Sahlberg 已提交
263 264 265
extern const struct fs_parameter_spec smb3_fs_parameters[];

extern int smb3_init_fs_context(struct fs_context *fc);
266 267
extern void smb3_cleanup_fs_context_contents(struct smb3_fs_context *ctx);
extern void smb3_cleanup_fs_context(struct smb3_fs_context *ctx);
R
Ronnie Sahlberg 已提交
268 269 270 271 272 273

static inline struct smb3_fs_context *smb3_fc2context(const struct fs_context *fc)
{
	return fc->fs_private;
}

274
extern int smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx);
275
extern void smb3_update_mnt_flags(struct cifs_sb_info *cifs_sb);
276

277
#endif