diff options
author | Vallish Vaidyeshwara <Vallish.Vaidyeshwara@Sun.COM> | 2009-12-15 23:02:18 +0530 |
---|---|---|
committer | Vallish Vaidyeshwara <Vallish.Vaidyeshwara@Sun.COM> | 2009-12-15 23:02:18 +0530 |
commit | 6764e83b0a0199b8aa37e222a7c92e92c1d44f90 (patch) | |
tree | 8a7e10d025a63007f327142e45c1c77fa4bcd565 | |
parent | 05cdb43ce1fe8b12f3829e22da337298faeab18a (diff) | |
download | illumos-gate-6764e83b0a0199b8aa37e222a7c92e92c1d44f90.tar.gz |
6894228 nfs v3/v2 should not fabricate ACLs
-rw-r--r-- | usr/src/cmd/fs.d/nfs/lib/sharetab.h | 3 | ||||
-rw-r--r-- | usr/src/lib/libshare/nfs/libshare_nfs.c | 11 | ||||
-rw-r--r-- | usr/src/lib/libshare/nfs/libshare_nfs.h | 1 | ||||
-rw-r--r-- | usr/src/uts/common/fs/nfs/nfs_acl_srv.c | 8 | ||||
-rw-r--r-- | usr/src/uts/common/nfs/export.h | 2 |
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 |