fs_context.h (7022B)
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Copyright (C) 2020, Microsoft Corporation. 4 * 5 * Author(s): Steve French <stfrench@microsoft.com> 6 * David Howells <dhowells@redhat.com> 7 */ 8 9#ifndef _FS_CONTEXT_H 10#define _FS_CONTEXT_H 11 12#include "cifsglob.h" 13#include <linux/parser.h> 14#include <linux/fs_parser.h> 15 16/* Log errors in fs_context (new mount api) but also in dmesg (old style) */ 17#define cifs_errorf(fc, fmt, ...) \ 18 do { \ 19 errorf(fc, fmt, ## __VA_ARGS__); \ 20 cifs_dbg(VFS, fmt, ## __VA_ARGS__); \ 21 } while (0) 22 23enum smb_version { 24 Smb_1 = 1, 25 Smb_20, 26 Smb_21, 27 Smb_30, 28 Smb_302, 29 Smb_311, 30 Smb_3any, 31 Smb_default, 32 Smb_version_err 33}; 34 35enum { 36 Opt_cache_loose, 37 Opt_cache_strict, 38 Opt_cache_none, 39 Opt_cache_ro, 40 Opt_cache_rw, 41 Opt_cache_err 42}; 43 44enum cifs_sec_param { 45 Opt_sec_krb5, 46 Opt_sec_krb5i, 47 Opt_sec_krb5p, 48 Opt_sec_ntlmsspi, 49 Opt_sec_ntlmssp, 50 Opt_sec_ntlmv2, 51 Opt_sec_ntlmv2i, 52 Opt_sec_none, 53 54 Opt_sec_err 55}; 56 57enum cifs_param { 58 /* Mount options that take no arguments */ 59 Opt_user_xattr, 60 Opt_forceuid, 61 Opt_forcegid, 62 Opt_noblocksend, 63 Opt_noautotune, 64 Opt_nolease, 65 Opt_nosparse, 66 Opt_hard, 67 Opt_soft, 68 Opt_perm, 69 Opt_nodelete, 70 Opt_mapposix, 71 Opt_mapchars, 72 Opt_nomapchars, 73 Opt_sfu, 74 Opt_nodfs, 75 Opt_posixpaths, 76 Opt_unix, 77 Opt_nocase, 78 Opt_brl, 79 Opt_handlecache, 80 Opt_forcemandatorylock, 81 Opt_setuidfromacl, 82 Opt_setuids, 83 Opt_dynperm, 84 Opt_intr, 85 Opt_strictsync, 86 Opt_serverino, 87 Opt_rwpidforward, 88 Opt_cifsacl, 89 Opt_acl, 90 Opt_locallease, 91 Opt_sign, 92 Opt_ignore_signature, 93 Opt_seal, 94 Opt_noac, 95 Opt_fsc, 96 Opt_mfsymlinks, 97 Opt_multiuser, 98 Opt_sloppy, 99 Opt_nosharesock, 100 Opt_persistent, 101 Opt_resilient, 102 Opt_tcp_nodelay, 103 Opt_domainauto, 104 Opt_rdma, 105 Opt_modesid, 106 Opt_rootfs, 107 Opt_multichannel, 108 Opt_compress, 109 Opt_witness, 110 111 /* Mount options which take numeric value */ 112 Opt_backupuid, 113 Opt_backupgid, 114 Opt_uid, 115 Opt_cruid, 116 Opt_gid, 117 Opt_port, 118 Opt_file_mode, 119 Opt_dirmode, 120 Opt_min_enc_offload, 121 Opt_blocksize, 122 Opt_rasize, 123 Opt_rsize, 124 Opt_wsize, 125 Opt_actimeo, 126 Opt_acdirmax, 127 Opt_acregmax, 128 Opt_echo_interval, 129 Opt_max_credits, 130 Opt_snapshot, 131 Opt_max_channels, 132 Opt_handletimeout, 133 134 /* Mount options which take string value */ 135 Opt_source, 136 Opt_user, 137 Opt_pass, 138 Opt_ip, 139 Opt_domain, 140 Opt_srcaddr, 141 Opt_iocharset, 142 Opt_netbiosname, 143 Opt_servern, 144 Opt_ver, 145 Opt_vers, 146 Opt_sec, 147 Opt_cache, 148 149 /* Mount options to be ignored */ 150 Opt_ignore, 151 152 Opt_err 153}; 154 155struct smb3_fs_context { 156 bool uid_specified; 157 bool cruid_specified; 158 bool gid_specified; 159 bool sloppy; 160 bool got_ip; 161 bool got_version; 162 bool got_rsize; 163 bool got_wsize; 164 bool got_bsize; 165 unsigned short port; 166 167 char *username; 168 char *password; 169 char *domainname; 170 char *source; 171 char *server_hostname; 172 char *UNC; 173 char *nodename; 174 char workstation_name[CIFS_MAX_WORKSTATION_LEN]; 175 char *iocharset; /* local code page for mapping to and from Unicode */ 176 char source_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL]; /* clnt nb name */ 177 char target_rfc1001_name[RFC1001_NAME_LEN_WITH_NULL]; /* srvr nb name */ 178 kuid_t cred_uid; 179 kuid_t linux_uid; 180 kgid_t linux_gid; 181 kuid_t backupuid; 182 kgid_t backupgid; 183 umode_t file_mode; 184 umode_t dir_mode; 185 enum securityEnum sectype; /* sectype requested via mnt opts */ 186 bool sign; /* was signing requested via mnt opts? */ 187 bool ignore_signature:1; 188 bool retry:1; 189 bool intr:1; 190 bool setuids:1; 191 bool setuidfromacl:1; 192 bool override_uid:1; 193 bool override_gid:1; 194 bool dynperm:1; 195 bool noperm:1; 196 bool nodelete:1; 197 bool mode_ace:1; 198 bool no_psx_acl:1; /* set if posix acl support should be disabled */ 199 bool cifs_acl:1; 200 bool backupuid_specified; /* mount option backupuid is specified */ 201 bool backupgid_specified; /* mount option backupgid is specified */ 202 bool no_xattr:1; /* set if xattr (EA) support should be disabled*/ 203 bool server_ino:1; /* use inode numbers from server ie UniqueId */ 204 bool direct_io:1; 205 bool strict_io:1; /* strict cache behavior */ 206 bool cache_ro:1; 207 bool cache_rw:1; 208 bool remap:1; /* set to remap seven reserved chars in filenames */ 209 bool sfu_remap:1; /* remap seven reserved chars ala SFU */ 210 bool posix_paths:1; /* unset to not ask for posix pathnames. */ 211 bool no_linux_ext:1; 212 bool linux_ext:1; 213 bool sfu_emul:1; 214 bool nullauth:1; /* attempt to authenticate with null user */ 215 bool nocase:1; /* request case insensitive filenames */ 216 bool nobrl:1; /* disable sending byte range locks to srv */ 217 bool nohandlecache:1; /* disable caching dir handles if srvr probs */ 218 bool mand_lock:1; /* send mandatory not posix byte range lock reqs */ 219 bool seal:1; /* request transport encryption on share */ 220 bool nodfs:1; /* Do not request DFS, even if available */ 221 bool local_lease:1; /* check leases only on local system, not remote */ 222 bool noblocksnd:1; 223 bool noautotune:1; 224 bool nostrictsync:1; /* do not force expensive SMBflush on every sync */ 225 bool no_lease:1; /* disable requesting leases */ 226 bool no_sparse:1; /* do not attempt to set files sparse */ 227 bool fsc:1; /* enable fscache */ 228 bool mfsymlinks:1; /* use Minshall+French Symlinks */ 229 bool multiuser:1; 230 bool rwpidforward:1; /* pid forward for read/write operations */ 231 bool nosharesock:1; 232 bool persistent:1; 233 bool nopersistent:1; 234 bool resilient:1; /* noresilient not required since not fored for CA */ 235 bool domainauto:1; 236 bool rdma:1; 237 bool multichannel:1; 238 bool use_client_guid:1; 239 /* reuse existing guid for multichannel */ 240 u8 client_guid[SMB2_CLIENT_GUID_SIZE]; 241 unsigned int bsize; 242 unsigned int rasize; 243 unsigned int rsize; 244 unsigned int wsize; 245 unsigned int min_offload; 246 bool sockopt_tcp_nodelay:1; 247 /* attribute cache timemout for files and directories in jiffies */ 248 unsigned long acregmax; 249 unsigned long acdirmax; 250 struct smb_version_operations *ops; 251 struct smb_version_values *vals; 252 char *prepath; 253 struct sockaddr_storage dstaddr; /* destination address */ 254 struct sockaddr_storage srcaddr; /* allow binding to a local IP */ 255 struct nls_table *local_nls; /* This is a copy of the pointer in cifs_sb */ 256 unsigned int echo_interval; /* echo interval in secs */ 257 __u64 snapshot_time; /* needed for timewarp tokens */ 258 __u32 handle_timeout; /* persistent and durable handle timeout in ms */ 259 unsigned int max_credits; /* smb3 max_credits 10 < credits < 60000 */ 260 unsigned int max_channels; 261 __u16 compression; /* compression algorithm 0xFFFF default 0=disabled */ 262 bool rootfs:1; /* if it's a SMB root file system */ 263 bool witness:1; /* use witness protocol */ 264 265 char *mount_options; 266}; 267 268extern const struct fs_parameter_spec smb3_fs_parameters[]; 269 270extern int smb3_init_fs_context(struct fs_context *fc); 271extern void smb3_cleanup_fs_context_contents(struct smb3_fs_context *ctx); 272extern void smb3_cleanup_fs_context(struct smb3_fs_context *ctx); 273 274static inline struct smb3_fs_context *smb3_fc2context(const struct fs_context *fc) 275{ 276 return fc->fs_private; 277} 278 279extern int smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx); 280extern void smb3_update_mnt_flags(struct cifs_sb_info *cifs_sb); 281 282#endif