[linux-cifs-client] [PATCH 1/2] connect.c: define mount options enum and parsing function

Scott Lovenberg scott.lovenberg at gmail.com
Mon May 17 22:53:06 MDT 2010


Mount options have been defined as an enum.
A token parsing function has been added to translate from text to the defined constants.

Signed-off-by: Scott Lovenberg <scott.lovenberg at gmail.com>
---
 fs/cifs/connect.c |  266 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 266 insertions(+), 0 deletions(-)

diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 2208f06..83d5cd8 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -52,6 +52,94 @@
 #define CIFS_PORT 445
 #define RFC1001_PORT 139
 
+/* mounting option values */
+enum CIFS_MOUNT_TOKEN {
+	CIFS_TOKEN_ERROR    =   -1,
+	USERXATTR           =   1,
+	NO_USERXATTR        =   2,
+	USER                =   3,
+	PASS                =   4,
+	IP                  =   5,
+	ADDR                =   6,
+	SEC                 =   7,
+	UNC                 =   8,
+	TARGET              =   9,
+	PATH                =  10,
+	DOMAIN              =  11,
+	WORKGROUP           =  12,
+	PREFIXPATH          =  13,
+	IOCHARSET           =  14,
+	UID                 =  15,
+	FORCE_UID           =  16,
+	NO_FORCE_UID        =  17,
+	GID                 =  18,
+	FORCE_GID           =  19,
+	NO_FORCE_GID        =  20,
+	FILEMODE            =  21,
+	DIRMODE             =  22,
+	PORT                =  23,
+	RSIZE               =  24,
+	WSIZE               =  25,
+	SOCKOPT             =  26,
+	NETBIOSNAME         =  27,
+	SERVERNAME          =  28,
+	CREDENTIALS         =  29,
+	VERSION             =  30,
+	GUEST               =  31,
+	RW                  =  32,
+	RO                  =  33,
+	NO_BLOCKSEND        =  34,
+	NO_AUTOTUNE         =  35,
+	NO_AUTO             =  36,
+	SUID                =  37,
+	NO_SUID             =  38,
+	EXEC                =  39,
+	NO_EXEC             =  40,
+	DEV                 =  41,
+	NO_DEV              =  42,
+	HARD                =  43,
+	NO_HARD             =  44,
+	SOFT                =  45,
+	NO_SOFT             =  46,
+	PERM                =  47,
+	NO_PERM             =  48,
+	MAPCHARS            =  49,
+	NO_MAPCHARS         =  50,
+	SFU                 =  51,
+	NO_SFU              =  52,
+	NO_DFS              =  53,
+	POSIXPATHS          =  54,
+	NO_POSIXPATHS       =  55,
+	NO_UNIX             =  56,
+	NO_LINUX            =  57,
+	NO_CASE             =  58,
+	IGNORECASE          =  59,
+	BRL                 =  60,
+	NO_BRL              =  61,
+	NO_LOCK             =  62,
+	FORCE_MANDATORYLOCK =  63,
+	SETUIDS             =  64,
+	NO_SETUIDS          =  65,
+	DYNPERM             =  66,
+	NO_DYNPERM          =  67,
+	INTR                =  68,
+	NO_INTR             =  69,
+	STRICTSYNC          =  70,
+	NO_STRICTSYNC       =  71,
+	SERVERINO           =  72,
+	NO_SERVERINO        =  73,
+	ACL                 =  74,
+	NO_ACL              =  75,
+	CIFSACL             =  76,
+	NO_CIFSACL          =  77,
+	LOCALLEASE          =  78,
+	SIGN                =  79,
+	SEAL                =  80,
+	DIRECT              =  81,
+	FORCE_DIRECT        =  82,
+	NO_AC               =  83
+};
+
 extern void SMBNTencrypt(unsigned char *passwd, unsigned char *c8,
 			 unsigned char *p24);
 
@@ -797,6 +885,184 @@ extract_hostname(const char *unc)
 	return dst;
 }
 
+/* returns the CIFS_MOUNT_TOKEN value that represents 'option' */
+static int cifs_parse_mount_token(const char *option)
+{
+	if (option == NULL)
+		return CIFS_TOKEN_ERROR;
+
+	if (strnicmp(option, "user_xattr", 10) == 0)
+		return USERXATTR;
+	if (strnicmp(option, "nouser_xattr", 12) == 0)
+		return NO_USERXATTR;
+	if (strnicmp(option, "user", 4) == 0)
+		return USER;
+	if (strnicmp(option, "pass", 4) == 0)
+		return PASS;
+	if (strnicmp(option, "ip", 2) == 0)
+		return IP;
+	if (strnicmp(option, "addr", 4) == 0)
+		return ADDR;
+	if (strnicmp(option, "sec", 3) == 0)
+		return SEC;
+	if (strnicmp(option, "unc", 3) == 0)
+		return UNC;
+	if (strnicmp(option, "target", 6) == 0)
+		return TARGET;
+	if (strnicmp(option, "path", 4) == 0)
+		return PATH;
+	if (strnicmp(option, "domain", 3) == 0)
+		return DOMAIN;
+	if (strnicmp(option, "workgroup", 5) == 0)
+		return WORKGROUP;
+	if (strnicmp(option, "prefixpath", 10) == 0)
+		return PREFIXPATH;
+	if (strnicmp(option, "iocharset", 9) == 0)
+		return IOCHARSET;
+	if (strnicmp(option, "uid", 3) == 0)
+		return UID;
+	if (strnicmp(option, "forceuid", 8) == 0)
+		return FORCE_UID;
+	if (strnicmp(option, "noforceuid", 10) == 0)
+		return NO_FORCE_UID;
+	if (strnicmp(option, "gid", 3) == 0)
+		return GID;
+	if (strnicmp(option, "forcegid", 8) == 0)
+		return FORCE_GID;
+	if (strnicmp(option, "noforcegid", 10) == 0)
+		return NO_FORCE_GID;
+	if (strnicmp(option, "file_mode", 4) == 0)
+		return FILEMODE;
+	/* dir_mode || dirmode */
+	if (strnicmp(option, "dir", 3) == 0)
+		return DIRMODE;
+	if (strnicmp(option, "port", 4) == 0)
+		return PORT;
+	if (strnicmp(option, "rsize", 5) == 0)
+		return RSIZE;
+	if (strnicmp(option, "wsize", 5) == 0)
+		return WSIZE;
+	if (strnicmp(option, "sockopt", 5) == 0)
+		return SOCKOPT;
+	if (strnicmp(option, "netbiosname", 4) == 0)
+		return NETBIOSNAME;
+	if (strnicmp(option, "servername", 7) == 0)
+		return SERVERNAME;
+	if (strnicmp(option, "credentials", 4) == 0)
+		return CREDENTIALS;
+	if (strnicmp(option, "version", 3) == 0)
+		return VERSION;
+	if (strnicmp(option, "guest", 5) == 0)
+		return GUEST;
+	if (strnicmp(option, "rw", 2) == 0)
+		return RW;
+	if (strnicmp(option, "ro", 2) == 0)
+		return RO;
+	if (strnicmp(option, "noblocksend", 11) == 0)
+		return NO_BLOCKSEND;
+	if (strnicmp(option, "noautotune", 10) == 0)
+		return NO_AUTOTUNE;
+	if (strnicmp(option, "suid", 4) == 0)
+		return SUID;
+	if (strnicmp(option, "nosuid", 6) == 0)
+		return NO_SUID;
+	if (strnicmp(option, "exec", 4) == 0)
+		return EXEC;
+	if (strnicmp(option, "noexec", 6) == 0)
+		return NO_EXEC;
+	if (strnicmp(option, "dev", 3) == 0)
+		return DEV;
+	if (strnicmp(option, "nodev", 5) == 0)
+		return NO_DEV;
+	if (strnicmp(option, "noauto", 6) == 0)
+		return NO_AUTO;
+	if (strnicmp(option, "hard", 4) == 0)
+		return HARD;
+	if (strnicmp(option, "nohard", 6) == 0)
+		return NO_HARD;
+	if (strnicmp(option, "soft", 4) == 0)
+		return SOFT;
+	if (strnicmp(option, "nosoft", 6) == 0)
+		return NO_SOFT;
+	if (strnicmp(option, "perm", 4) == 0)
+		return PERM;
+	if (strnicmp(option, "noperm", 6) == 0)
+		return NO_PERM;
+	if (strnicmp(option, "mapchars", 8) == 0)
+		return MAPCHARS;
+	if (strnicmp(option, "nomapchars", 10) == 0)
+		return NO_MAPCHARS;
+	if (strnicmp(option, "sfu", 3) == 0)
+		return SFU;
+	if (strnicmp(option, "nosfu", 5) == 0)
+		return NO_SFU;
+	if (strnicmp(option, "nodfs", 5) == 0)
+		return NO_DFS;
+	if (strnicmp(option, "posixpaths", 10) == 0)
+		return POSIXPATHS;
+	if (strnicmp(option, "noposixpaths", 12) == 0)
+		return NO_POSIXPATHS;
+	if (strnicmp(option, "nounix", 6) == 0)
+		return NO_UNIX;
+	if (strnicmp(option, "nolinux", 7) == 0)
+		return NO_LINUX;
+	if (strnicmp(option, "nocase", 6) == 0)
+		return NO_CASE;
+	if (strnicmp(option, "ignorecase", 10) == 0)
+		return IGNORECASE;
+	if (strnicmp(option, "brl", 3) == 0)
+		return BRL;
+	if (strnicmp(option, "nobrl", 5) == 0)
+		return NO_BRL;
+	if (strnicmp(option, "nolock", 6) == 0)
+		return NO_LOCK;
+	if (strnicmp(option, "forcemandatorylock", 9) == 0)
+		return FORCE_MANDATORYLOCK;
+	if (strnicmp(option, "setuids", 7) == 0)
+		return SETUIDS;
+	if (strnicmp(option, "nosetuids", 9) == 0)
+		return NO_SETUIDS;
+	if (strnicmp(option, "dynperm", 7) == 0)
+		return DYNPERM;
+	if (strnicmp(option, "nodynperm", 9) == 0)
+		return NO_DYNPERM;
+	if (strnicmp(option, "intr", 4) == 0)
+		return INTR;
+	if (strnicmp(option, "nointr", 6) == 0)
+		return NO_INTR;
+	if (strnicmp(option, "strictsync", 10) == 0)
+		return STRICTSYNC;
+	if (strnicmp(option, "nostrictsync", 12) == 0)
+		return NO_STRICTSYNC;
+	if (strnicmp(option, "serverino", 7) == 0)
+		return SERVERINO;
+	if (strnicmp(option, "noserverino", 9) == 0)
+		return NO_SERVERINO;
+	if (strnicmp(option, "cifsacl", 7) == 0)
+		return CIFSACL;
+	if (strnicmp(option, "nocifsacl", 9) == 0)
+		return NO_CIFSACL;
+	if (strnicmp(option, "acl", 3) == 0)
+		return ACL;
+	if (strnicmp(option, "noacl", 5) == 0)
+		return NO_ACL;
+	if (strnicmp(option, "locallease", 6) == 0)
+		return LOCALLEASE;
+	if (strnicmp(option, "sign", 4) == 0)
+		return SIGN;
+	if (strnicmp(option, "seal", 4) == 0)
+		return SEAL;
+	if (strnicmp(option, "direct", 6) == 0)
+		return DIRECT;
+	if (strnicmp(option, "forcedirectio", 13) == 0)
+		return FORCE_DIRECT;
+	if (strnicmp(option, "noac", 4) == 0)
+		return NO_AC;
+
+	return CIFS_TOKEN_ERROR;
+}
+
+
 static int
 cifs_parse_mount_options(char *options, const char *devname,
 			 struct smb_vol *vol)
-- 
1.6.2.5



More information about the linux-cifs-client mailing list