diff options
author | 2003-04-18 22:12:25 +0000 | |
---|---|---|
committer | 2003-04-18 22:12:25 +0000 | |
commit | e8b9805c5efd4274c44e7ff0d253bc0ead1936e1 (patch) | |
tree | fe48e9da0fabde1cad8b137db0b6758d693a06bd | |
parent | regression test for mquery syscall. (diff) | |
download | wireguard-openbsd-e8b9805c5efd4274c44e7ff0d253bc0ead1936e1.tar.xz wireguard-openbsd-e8b9805c5efd4274c44e7ff0d253bc0ead1936e1.zip |
support for making directories +x without affecting normal files
ok millert@
-rw-r--r-- | sys/msdosfs/msdosfs_vnops.c | 18 | ||||
-rw-r--r-- | sys/msdosfs/msdosfsmount.h | 13 | ||||
-rw-r--r-- | sys/sys/mount.h | 11 |
3 files changed, 28 insertions, 14 deletions
diff --git a/sys/msdosfs/msdosfs_vnops.c b/sys/msdosfs/msdosfs_vnops.c index 6058f707133..c71ae50a164 100644 --- a/sys/msdosfs/msdosfs_vnops.c +++ b/sys/msdosfs/msdosfs_vnops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: msdosfs_vnops.c,v 1.37 2002/05/24 08:54:24 art Exp $ */ +/* $OpenBSD: msdosfs_vnops.c,v 1.38 2003/04/18 22:12:25 tedu Exp $ */ /* $NetBSD: msdosfs_vnops.c,v 1.63 1997/10/17 11:24:19 ws Exp $ */ /*- @@ -238,6 +238,12 @@ msdosfs_access(v) if ((dep->de_Attributes & ATTR_READONLY) == 0) dosmode |= (S_IWUSR|S_IWGRP|S_IWOTH); dosmode &= pmp->pm_mask; + if (dep->de_Attributes & ATTR_DIRECTORY + && pmp->pm_flags & MSDOSFSMNT_ALLOWDIRX) { + dosmode |= (dosmode & S_IRUSR) ? S_IXUSR : 0; + dosmode |= (dosmode & S_IRGRP) ? S_IXGRP : 0; + dosmode |= (dosmode & S_IROTH) ? S_IXOTH : 0; + } return (vaccess(dosmode, pmp->pm_uid, pmp->pm_gid, ap->a_mode, ap->a_cred)); @@ -280,10 +286,16 @@ msdosfs_getattr(v) } vap->va_fileid = fileid; vap->va_mode = (S_IXUSR|S_IXGRP|S_IXOTH) | (S_IRUSR|S_IRGRP|S_IROTH) | - ((dep->de_Attributes & ATTR_READONLY) ? 0 : (S_IWUSR|S_IWGRP|S_IWOTH)); + ((dep->de_Attributes & ATTR_READONLY) ? 0 : (S_IWUSR|S_IWGRP|S_IWOTH)); vap->va_mode &= dep->de_pmp->pm_mask; - if (dep->de_Attributes & ATTR_DIRECTORY) + if (dep->de_Attributes & ATTR_DIRECTORY) { vap->va_mode |= S_IFDIR; + if (pmp->pm_flags & MSDOSFSMNT_ALLOWDIRX) { + vap->va_mode |= (vap->va_mode & S_IRUSR) ? S_IXUSR : 0; + vap->va_mode |= (vap->va_mode & S_IRGRP) ? S_IXGRP : 0; + vap->va_mode |= (vap->va_mode & S_IROTH) ? S_IXOTH : 0; + } + } vap->va_nlink = 1; vap->va_gid = dep->de_pmp->pm_gid; vap->va_uid = dep->de_pmp->pm_uid; diff --git a/sys/msdosfs/msdosfsmount.h b/sys/msdosfs/msdosfsmount.h index 8a0020c2731..1008bf2bd0f 100644 --- a/sys/msdosfs/msdosfsmount.h +++ b/sys/msdosfs/msdosfsmount.h @@ -1,4 +1,4 @@ -/* $OpenBSD: msdosfsmount.h,v 1.13 2002/03/14 01:27:09 millert Exp $ */ +/* $OpenBSD: msdosfsmount.h,v 1.14 2003/04/18 22:12:25 tedu Exp $ */ /* $NetBSD: msdosfsmount.h,v 1.16 1997/10/17 11:24:24 ws Exp $ */ /*- @@ -93,16 +93,17 @@ struct msdosfsmount { */ #if 0 /* Defined in <sys/mount.h> */ -#define MSDOSFSMNT_SHORTNAME 1 -#define MSDOSFSMNT_LONGNAME 2 -#define MSDOSFSMNT_NOWIN95 4 -#define MSDOSFSMNT_GEMDOSFS 8 +#define MSDOSFSMNT_SHORTNAME 0x01 +#define MSDOSFSMNT_LONGNAME 0x02 +#define MSDOSFSMNT_NOWIN95 0x04 +#define MSDOSFSMNT_GEMDOSFS 0x08 +#define MSDOSFSMNT_ALLOWDIRX 0x10 #endif /* All flags above: */ #define MSDOSFSMNT_MNTOPT \ (MSDOSFSMNT_SHORTNAME|MSDOSFSMNT_LONGNAME|MSDOSFSMNT_NOWIN95 \ - |MSDOSFSMNT_GEMDOSFS) + |MSDOSFSMNT_GEMDOSFS|MSDOSFSMNT_ALLOWDIRX) #define MSDOSFSMNT_RONLY 0x80000000 /* mounted read-only */ #define MSDOSFSMNT_WAITONFAT 0x40000000 /* mounted synchronous */ #define MSDOSFS_FATMIRROR 0x20000000 /* FAT is mirrored */ diff --git a/sys/sys/mount.h b/sys/sys/mount.h index be6632b1935..6741a53bee7 100644 --- a/sys/sys/mount.h +++ b/sys/sys/mount.h @@ -1,4 +1,4 @@ -/* $OpenBSD: mount.h,v 1.49 2003/02/24 02:17:22 deraadt Exp $ */ +/* $OpenBSD: mount.h,v 1.50 2003/04/18 22:12:25 tedu Exp $ */ /* $NetBSD: mount.h,v 1.48 1996/02/18 11:55:47 fvdl Exp $ */ /* @@ -219,10 +219,11 @@ struct msdosfs_args { /* * Msdosfs mount options: */ -#define MSDOSFSMNT_SHORTNAME 1 /* Force old DOS short names only */ -#define MSDOSFSMNT_LONGNAME 2 /* Force Win'95 long names */ -#define MSDOSFSMNT_NOWIN95 4 /* Completely ignore Win95 entries */ -#define MSDOSFSMNT_GEMDOSFS 8 /* This is a gemdos-flavour */ +#define MSDOSFSMNT_SHORTNAME 0x01 /* Force old DOS short names only */ +#define MSDOSFSMNT_LONGNAME 0x02 /* Force Win'95 long names */ +#define MSDOSFSMNT_NOWIN95 0x04 /* Completely ignore Win95 entries */ +#define MSDOSFSMNT_GEMDOSFS 0x08 /* This is a gemdos-flavour */ +#define MSDOSFSMNT_ALLOWDIRX 0x10 /* dir is mode +x if r */ /* * Arguments to mount amigados filesystems. |