summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVallish Vaidyeshwara <Vallish.Vaidyeshwara@Sun.COM>2009-12-15 23:02:18 +0530
committerVallish Vaidyeshwara <Vallish.Vaidyeshwara@Sun.COM>2009-12-15 23:02:18 +0530
commit6764e83b0a0199b8aa37e222a7c92e92c1d44f90 (patch)
tree8a7e10d025a63007f327142e45c1c77fa4bcd565
parent05cdb43ce1fe8b12f3829e22da337298faeab18a (diff)
downloadillumos-gate-6764e83b0a0199b8aa37e222a7c92e92c1d44f90.tar.gz
6894228 nfs v3/v2 should not fabricate ACLs
-rw-r--r--usr/src/cmd/fs.d/nfs/lib/sharetab.h3
-rw-r--r--usr/src/lib/libshare/nfs/libshare_nfs.c11
-rw-r--r--usr/src/lib/libshare/nfs/libshare_nfs.h1
-rw-r--r--usr/src/uts/common/fs/nfs/nfs_acl_srv.c8
-rw-r--r--usr/src/uts/common/nfs/export.h2
5 files changed, 18 insertions, 7 deletions
diff --git a/usr/src/cmd/fs.d/nfs/lib/sharetab.h b/usr/src/cmd/fs.d/nfs/lib/sharetab.h
index c01a014a58..167ac79305 100644
--- a/usr/src/cmd/fs.d/nfs/lib/sharetab.h
+++ b/usr/src/cmd/fs.d/nfs/lib/sharetab.h
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -59,6 +59,7 @@ extern "C" {
#define SHOPT_PUBLIC "public"
#define SHOPT_INDEX "index"
#define SHOPT_LOG "log"
+#define SHOPT_NOACLFAB "noaclfab"
/* XXX The following are added for testing volatile fh's purposes only */
#ifdef VOLATILE_FH_TEST
diff --git a/usr/src/lib/libshare/nfs/libshare_nfs.c b/usr/src/lib/libshare/nfs/libshare_nfs.c
index dc6e5f61d4..b71df49804 100644
--- a/usr/src/lib/libshare/nfs/libshare_nfs.c
+++ b/usr/src/lib/libshare/nfs/libshare_nfs.c
@@ -161,8 +161,10 @@ struct option_defs optdefs[] = {
{SHOPT_ROOT_MAPPING, OPT_ROOT_MAPPING, OPT_TYPE_USER},
#define OPT_CHARSET_MAP 16
{"", OPT_CHARSET_MAP, OPT_TYPE_ACCLIST},
+#define OPT_NOACLFAB 17
+ {SHOPT_NOACLFAB, OPT_NOACLFAB, OPT_TYPE_BOOLEAN},
#ifdef VOLATILE_FH_TEST /* XXX added for testing volatile fh's only */
-#define OPT_VOLFH 17
+#define OPT_VOLFH 18
{SHOPT_VOLFH, OPT_VOLFH},
#endif /* VOLATILE_FH_TEST */
NULL
@@ -1001,6 +1003,13 @@ fill_export_from_optionset(struct exportdata *export, sa_optionset_t optionset)
*/
export->ex_flags |= EX_CHARMAP;
break;
+ case OPT_NOACLFAB:
+ if (value != NULL && (strcasecmp(value, "true") == 0 ||
+ strcmp(value, "1") == 0))
+ export->ex_flags |= EX_NOACLFAB;
+ else
+ export->ex_flags &= ~EX_NOACLFAB;
+ break;
default:
/* have a syntactic error */
(void) printf(dgettext(TEXT_DOMAIN,
diff --git a/usr/src/lib/libshare/nfs/libshare_nfs.h b/usr/src/lib/libshare/nfs/libshare_nfs.h
index e67d3b49a8..3d4bd57793 100644
--- a/usr/src/lib/libshare/nfs/libshare_nfs.h
+++ b/usr/src/lib/libshare/nfs/libshare_nfs.h
@@ -53,6 +53,7 @@ extern "C" {
#define SHOPT_INDEX "index"
#define SHOPT_LOG "log"
#define SHOPT_CKSUM "cksum"
+#define SHOPT_NOACLFAB "noaclfab"
/*
* defined options types. These should be in a file rather than
diff --git a/usr/src/uts/common/fs/nfs/nfs_acl_srv.c b/usr/src/uts/common/fs/nfs/nfs_acl_srv.c
index 368c4bcc9d..9d4b3d99ce 100644
--- a/usr/src/uts/common/fs/nfs/nfs_acl_srv.c
+++ b/usr/src/uts/common/fs/nfs/nfs_acl_srv.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/param.h>
#include <sys/types.h>
#include <sys/systm.h>
@@ -95,7 +93,7 @@ acl2_getacl(GETACL2args *args, GETACL2res *resp, struct exportinfo *exi,
error = VOP_GETSECATTR(vp, &resp->resok.acl, 0, cr, NULL);
- if (error == ENOSYS) {
+ if ((error == ENOSYS) && !(exi->exi_export.ex_flags & EX_NOACLFAB)) {
/*
* If the underlying file system doesn't support
* aclent_t type acls, fabricate an acl. This is
@@ -478,7 +476,7 @@ acl3_getacl(GETACL3args *args, GETACL3res *resp, struct exportinfo *exi,
error = VOP_GETSECATTR(vp, &resp->resok.acl, 0, cr, NULL);
- if (error == ENOSYS) {
+ if ((error == ENOSYS) && !(exi->exi_export.ex_flags & EX_NOACLFAB)) {
/*
* If the underlying file system doesn't support
* aclent_t type acls, fabricate an acl. This is
diff --git a/usr/src/uts/common/nfs/export.h b/usr/src/uts/common/nfs/export.h
index 21d6e9e4f6..79c605a21e 100644
--- a/usr/src/uts/common/nfs/export.h
+++ b/usr/src/uts/common/nfs/export.h
@@ -182,6 +182,8 @@ struct exportdata32 {
#endif /* VOLATILE_FH_TEST */
#define EX_CHARMAP 0x1000 /* NFS may need a character set conversion */
+#define EX_NOACLFAB 0x2000 /* If set, NFSv2 and v3 servers doesn't */
+ /* fabricate ACL for VOP_GETSECATTR OTW call */
#ifdef _KERNEL