summaryrefslogtreecommitdiffstats
path: root/sbin/mount_msdosfs
diff options
context:
space:
mode:
authortrhodes <trhodes@FreeBSD.org>2003-08-12 20:06:56 +0000
committertrhodes <trhodes@FreeBSD.org>2003-08-12 20:06:56 +0000
commit0c5ae3a9aac8cffa88278be425a520abf7ccb5c4 (patch)
tree3c2fc714329283a20ad88a038c936261060715ba /sbin/mount_msdosfs
parent4d5096698133f049690d975b46c1a8d74b319e25 (diff)
downloadFreeBSD-src-0c5ae3a9aac8cffa88278be425a520abf7ccb5c4.zip
FreeBSD-src-0c5ae3a9aac8cffa88278be425a520abf7ccb5c4.tar.gz
Add a '-M mask' option so that users can have different
masks for files and directories. This should make some of the Midnight Commander users happy. Remove an extra ')' in the manual page. PR: 35699 Submitted by: Eugene Grosbein <eugen@grosbein.pp.ru> (original version) Tested by: simon
Diffstat (limited to 'sbin/mount_msdosfs')
-rw-r--r--sbin/mount_msdosfs/mount_msdosfs.817
-rw-r--r--sbin/mount_msdosfs/mount_msdosfs.c22
2 files changed, 34 insertions, 5 deletions
diff --git a/sbin/mount_msdosfs/mount_msdosfs.8 b/sbin/mount_msdosfs/mount_msdosfs.8
index 147f1f1..8eee35c 100644
--- a/sbin/mount_msdosfs/mount_msdosfs.8
+++ b/sbin/mount_msdosfs/mount_msdosfs.8
@@ -42,6 +42,7 @@
.Op Fl u Ar uid
.Op Fl g Ar gid
.Op Fl m Ar mask
+.Op Fl M Ar mask
.Op Fl s
.Op Fl l
.Op Fl 9
@@ -104,14 +105,28 @@ read, write, and execute permissions for files, but
others should only have read and execute permissions.
See
.Xr chmod 1
-for more information about octal file modes.)
+for more information about octal file modes.
Only the nine low-order bits of
.Ar mask
are used.
+The value of
+.Ar -M
+is used if it is supplied and
+.Ar -m
+is omitted.
The default
.Ar mask
is taken from the
directory on which the file system is being mounted.
+.It Fl M Ar mask
+Specify the maximum file permissions for directories
+in the file system.
+The value of
+.Ar -m
+is used if it is supplied and
+.Ar -M
+is omitted.
+See the previous option's description for details.
.It Fl s
Force behaviour to
ignore and not generate Win'95 long filenames.
diff --git a/sbin/mount_msdosfs/mount_msdosfs.c b/sbin/mount_msdosfs/mount_msdosfs.c
index 187dc13..061e3cb 100644
--- a/sbin/mount_msdosfs/mount_msdosfs.c
+++ b/sbin/mount_msdosfs/mount_msdosfs.c
@@ -88,14 +88,14 @@ main(argc, argv)
{
struct msdosfs_args args;
struct stat sb;
- int c, mntflags, set_gid, set_uid, set_mask;
+ int c, mntflags, set_gid, set_uid, set_mask, set_dirmask;
char *dev, *dir, mntpath[MAXPATHLEN];
- mntflags = set_gid = set_uid = set_mask = 0;
+ mntflags = set_gid = set_uid = set_mask = set_dirmask = 0;
(void)memset(&args, '\0', sizeof(args));
args.magic = MSDOSFS_ARGSMAGIC;
- while ((c = getopt(argc, argv, "sl9u:g:m:o:L:W:")) != -1) {
+ while ((c = getopt(argc, argv, "sl9u:g:m:M:o:L:W:")) != -1) {
switch (c) {
#ifdef MSDOSFSMNT_GEMDOSFS
case 'G':
@@ -123,6 +123,10 @@ main(argc, argv)
args.mask = a_mask(optarg);
set_mask = 1;
break;
+ case 'M':
+ args.dirmask = a_mask(optarg);
+ set_dirmask = 1;
+ break;
case 'L':
load_ultable(&args, optarg);
args.flags |= MSDOSFSMNT_ULTABLE;
@@ -144,6 +148,15 @@ main(argc, argv)
if (optind + 2 != argc)
usage();
+ if (set_mask && !set_dirmask) {
+ args.dirmask = args.mask;
+ set_dirmask = 1;
+ }
+ else if (set_dirmask && !set_mask) {
+ args.mask = args.dirmask;
+ set_mask = 1;
+ }
+
dev = argv[optind];
dir = argv[optind + 1];
@@ -169,7 +182,8 @@ main(argc, argv)
if (!set_gid)
args.gid = sb.st_gid;
if (!set_mask)
- args.mask = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
+ args.mask = args.dirmask =
+ sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
}
if (mount("msdosfs", mntpath, mntflags, &args) < 0)
OpenPOWER on IntegriCloud