|
@@ -55,7 +55,7 @@ enum {
|
|
|
/* Cache options */
|
|
|
Opt_cache_loose, Opt_fscache,
|
|
|
/* Access options */
|
|
|
- Opt_access,
|
|
|
+ Opt_access, Opt_posixacl,
|
|
|
/* Error token */
|
|
|
Opt_err
|
|
|
};
|
|
@@ -73,6 +73,7 @@ static const match_table_t tokens = {
|
|
|
{Opt_fscache, "fscache"},
|
|
|
{Opt_cachetag, "cachetag=%s"},
|
|
|
{Opt_access, "access=%s"},
|
|
|
+ {Opt_posixacl, "posixacl"},
|
|
|
{Opt_err, NULL}
|
|
|
};
|
|
|
|
|
@@ -194,13 +195,7 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
|
|
|
else if (strcmp(s, "any") == 0)
|
|
|
v9ses->flags |= V9FS_ACCESS_ANY;
|
|
|
else if (strcmp(s, "client") == 0) {
|
|
|
-#ifdef CONFIG_9P_FS_POSIX_ACL
|
|
|
v9ses->flags |= V9FS_ACCESS_CLIENT;
|
|
|
-#else
|
|
|
- P9_DPRINTK(P9_DEBUG_ERROR,
|
|
|
- "Not defined CONFIG_9P_FS_POSIX_ACL. "
|
|
|
- "Ignoring access=client option\n");
|
|
|
-#endif
|
|
|
} else {
|
|
|
v9ses->flags |= V9FS_ACCESS_SINGLE;
|
|
|
v9ses->uid = simple_strtoul(s, &e, 10);
|
|
@@ -210,6 +205,16 @@ static int v9fs_parse_options(struct v9fs_session_info *v9ses, char *opts)
|
|
|
kfree(s);
|
|
|
break;
|
|
|
|
|
|
+ case Opt_posixacl:
|
|
|
+#ifdef CONFIG_9P_FS_POSIX_ACL
|
|
|
+ v9ses->flags |= V9FS_POSIX_ACL;
|
|
|
+#else
|
|
|
+ P9_DPRINTK(P9_DEBUG_ERROR,
|
|
|
+ "Not defined CONFIG_9P_FS_POSIX_ACL. "
|
|
|
+ "Ignoring posixacl option\n");
|
|
|
+#endif
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
continue;
|
|
|
}
|
|
@@ -304,6 +309,14 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
|
|
|
v9ses->flags |= V9FS_ACCESS_ANY;
|
|
|
v9ses->uid = ~0;
|
|
|
}
|
|
|
+ if (!v9fs_proto_dotl(v9ses) ||
|
|
|
+ !((v9ses->flags & V9FS_ACCESS_MASK) == V9FS_ACCESS_CLIENT)) {
|
|
|
+ /*
|
|
|
+ * We support ACL checks on clinet only if the protocol is
|
|
|
+ * 9P2000.L and access is V9FS_ACCESS_CLIENT.
|
|
|
+ */
|
|
|
+ v9ses->flags &= ~V9FS_ACL_MASK;
|
|
|
+ }
|
|
|
|
|
|
fid = p9_client_attach(v9ses->clnt, NULL, v9ses->uname, ~0,
|
|
|
v9ses->aname);
|