PERFORCE change 18984 for review
Robert Watson
rwatson at freebsd.org
Wed Oct 9 20:06:45 GMT 2002
http://perforce.freebsd.org/p4db/chv.cgi?CH=18984
Change 18984 by rwatson at rwatson_tislabs on 2002/10/09 13:06:10
Add a UFS file flag, FS_MULTILABEL, to indicate that the UFS file
system should be mounted multi-label by default. This flag can
be set using
tunefs -l enable
and unset using:
tunefs -l disable
The basic behavior is that the MNT_MULTILABEL flag will get turned
on if the superblock flag is set. Once nmount is more available,
we can use -o nomultilabel to override at mounttime if needed.
This will permit us to remove the multilabel flag in default
fstabs, although the flag will still work. This is useful for
root file systems on UFS/UFS2.
Affected files ...
.. //depot/projects/trustedbsd/mac/sbin/tunefs/tunefs.8#9 edit
.. //depot/projects/trustedbsd/mac/sbin/tunefs/tunefs.c#6 edit
.. //depot/projects/trustedbsd/mac/sys/ufs/ffs/ffs_vfsops.c#21 edit
.. //depot/projects/trustedbsd/mac/sys/ufs/ffs/fs.h#7 edit
Differences ...
==== //depot/projects/trustedbsd/mac/sbin/tunefs/tunefs.8#9 (text+ko) ====
@@ -43,6 +43,7 @@
.Op Fl A
.Op Fl e Ar maxbpg
.Op Fl f Ar avgfilesize
+.Op Fl l Ar enable | disable
.Op Fl m Ar minfree
.Op Fl n Cm enable | disable
.Op Fl o Cm space | time
@@ -86,6 +87,8 @@
this parameter should be set higher.
.It Fl f Ar avgfilesize
Specify the expected average file size.
+.It Fl l Cm enable | disable
+Turn on/off MAC multilabel flag.
.It Fl m Ar minfree
Specify the percentage of space held back
from normal users; the minimum free space threshold.
==== //depot/projects/trustedbsd/mac/sbin/tunefs/tunefs.c#6 (text+ko) ====
@@ -94,11 +94,11 @@
const char *name;
struct stat st;
int Aflag = 0, active = 0;
- int eflag = 0, fflag = 0, mflag = 0;
+ int eflag = 0, fflag = 0, lflag = 0, mflag = 0;
int nflag = 0, oflag = 0, pflag = 0, sflag = 0;
int evalue = 0, fvalue = 0;
int mvalue = 0, ovalue = 0, svalue = 0;
- char *nvalue = NULL;
+ char *lvalue = NULL, *nvalue = NULL;
struct fstab *fs;
const char *chg[2];
char device[MAXPATHLEN];
@@ -109,7 +109,7 @@
if (argc < 3)
usage();
found_arg = 0; /* at least one arg is required */
- while ((ch = getopt(argc, argv, "Ae:f:m:n:o:ps:")) != -1)
+ while ((ch = getopt(argc, argv, "Ae:f:l:m:n:o:ps:")) != -1)
switch (ch) {
case 'A':
found_arg = 1;
@@ -131,6 +131,16 @@
errx(10, "%s must be >= 1 (was %s)", name, optarg);
fflag = 1;
break;
+ case 'l':
+ found_arg = 1;
+ name = "multilabel MAC file system";
+ lvalue = optarg;
+ if (strcmp(lvalue, "enable") && strcmp(lvalue, "disable")) {
+ errx(10, "bad %s (options are %s)", name,
+ "`enable' or `disable'");
+ }
+ lflag = 1;
+ break;
case 'm':
found_arg = 1;
name = "minimum percentage of free space";
@@ -235,6 +245,26 @@
sblock.fs_avgfilesize = fvalue;
}
}
+ if (lflag) {
+ name = "multilabel";
+ if (strcmp(lvalue, "enable") == 0) {
+ if (sblock.fs_flags & FS_MULTILABEL) {
+ warnx("%s remains unchanged as enabled", name);
+ } else {
+ sblock.fs_flags |= FS_MULTILABEL;
+ warnx("%s set", name);
+ }
+ } else if (strcmp(lvalue, "disable") == 0) {
+ if ((~sblock.fs_flags & FS_MULTILABEL) ==
+ FS_MULTILABEL) {
+ warnx("%s remains unchanged as disabled",
+ name);
+ } else {
+ sblock.fs_flags &= ~FS_MULTILABEL;
+ warnx("%s set", name);
+ }
+ }
+ }
if (mflag) {
name = "minimum percentage of free space";
if (sblock.fs_minfree == mvalue) {
==== //depot/projects/trustedbsd/mac/sys/ufs/ffs/ffs_vfsops.c#21 (text+ko) ====
@@ -34,6 +34,7 @@
* $FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.191 2002/09/25 02:49:48 jeff Exp $
*/
+#include "opt_mac.h"
#include "opt_quota.h"
#include "opt_ufs.h"
@@ -736,6 +737,13 @@
vfs_getnewfsid(mp);
mp->mnt_maxsymlinklen = fs->fs_maxsymlinklen;
mp->mnt_flag |= MNT_LOCAL;
+ if ((fs->fs_flags & FS_MULTILABEL) != 0)
+#ifdef MAC
+ mp->mnt_flag |= MNT_MULTILABEL;
+#else
+ printf("%s: multilabel flag on fs but no MAC support\n",
+ fs->fs_fsmnt);
+#endif
ump->um_mountp = mp;
ump->um_dev = dev;
ump->um_devvp = devvp;
==== //depot/projects/trustedbsd/mac/sys/ufs/ffs/fs.h#7 (text+ko) ====
@@ -374,11 +374,21 @@
* accesses. Kernels that do not support auxiliary indicies clear the
* flag to indicate that the indicies need to be rebuilt (by fsck) before
* they can be used.
+ *
+ * FS_ACLS indicates that ACLs are administratively enabled for the
+ * file system, so they should be loaded from extended attributes,
+ * observed for access control purposes, and be administered by object
+ * owners. FS_MULTILABEL indicates that the TrustedBSD MAC Framework
+ * should attempt to back MAC labels into extended attributes on the
+ * file system rather than maintain a single mount label for all
+ * objects.
*/
#define FS_UNCLEAN 0x01 /* filesystem not clean at mount */
#define FS_DOSOFTDEP 0x02 /* filesystem using soft dependencies */
#define FS_NEEDSFSCK 0x04 /* filesystem needs sync fsck before mount */
#define FS_INDEXDIRS 0x08 /* kernel supports indexed directories */
+#define FS_ACLS 0x10 /* file system has ACLs enabled */
+#define FS_MULTILABEL 0x20 /* file system is MAC multi-label */
/*
* Macros to access bits in the fs_active array.
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message
More information about the trustedbsd-cvs
mailing list