diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/vfs_extattr.c | 8 | ||||
-rw-r--r-- | sys/kern/vfs_lookup.c | 6 | ||||
-rw-r--r-- | sys/kern/vfs_syscalls.c | 8 | ||||
-rw-r--r-- | sys/kern/vfs_vnops.c | 7 |
4 files changed, 17 insertions, 12 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index 281820c40d28..406bd37d4f7c 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94 - * $Id: vfs_syscalls.c,v 1.95 1998/03/08 09:57:21 julian Exp $ + * $Id: vfs_syscalls.c,v 1.96 1998/03/29 18:23:44 dyson Exp $ */ /* For 4.3 integer FS ID compatibility */ @@ -265,9 +265,11 @@ update: mp->mnt_kern_flag |= MNTK_WANTRDWR; mp->mnt_flag &=~ (MNT_NOSUID | MNT_NOEXEC | MNT_NODEV | MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_NOATIME | + MNT_NOSYMFOLLOW | MNT_NOCLUSTERR | MNT_NOCLUSTERW | MNT_SUIDDIR); mp->mnt_flag |= SCARG(uap, flags) & (MNT_NOSUID | MNT_NOEXEC | MNT_NODEV | MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_FORCE | + MNT_NOSYMFOLLOW | MNT_NOATIME | MNT_NOCLUSTERR | MNT_NOCLUSTERW | MNT_SUIDDIR); /* * Mount the filesystem. @@ -1503,8 +1505,6 @@ olstat(p, uap) return (error); vp = nd.ni_vp; error = vn_stat(vp, &sb, p); - if (vp->v_type == VLNK) - sb.st_mode |= S_IFLNK | ACCESSPERMS; /* 0777 */ vput(vp); if (error) return (error); @@ -1606,8 +1606,6 @@ lstat(p, uap) return (error); vp = nd.ni_vp; error = vn_stat(vp, &sb, p); - if (vp->v_type == VLNK) - sb.st_mode |= S_IFLNK | ACCESSPERMS; /* 0777 */ vput(vp); if (error) return (error); diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c index 3d258cc15784..709d8633b51d 100644 --- a/sys/kern/vfs_lookup.c +++ b/sys/kern/vfs_lookup.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_lookup.c 8.4 (Berkeley) 2/16/94 - * $Id: vfs_lookup.c,v 1.25 1998/02/06 12:13:30 eivind Exp $ + * $Id: vfs_lookup.c,v 1.26 1998/02/15 04:17:07 dyson Exp $ */ #include "opt_ktrace.h" @@ -502,6 +502,10 @@ unionlookup: ((cnp->cn_flags & FOLLOW) || trailing_slash || *ndp->ni_next == '/')) { cnp->cn_flags |= ISSYMLINK; + if (dp->v_mount->mnt_flag & MNT_NOSYMFOLLOW) { + error = EACCES; + goto bad2; + } return (0); } diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 281820c40d28..406bd37d4f7c 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94 - * $Id: vfs_syscalls.c,v 1.95 1998/03/08 09:57:21 julian Exp $ + * $Id: vfs_syscalls.c,v 1.96 1998/03/29 18:23:44 dyson Exp $ */ /* For 4.3 integer FS ID compatibility */ @@ -265,9 +265,11 @@ update: mp->mnt_kern_flag |= MNTK_WANTRDWR; mp->mnt_flag &=~ (MNT_NOSUID | MNT_NOEXEC | MNT_NODEV | MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_NOATIME | + MNT_NOSYMFOLLOW | MNT_NOCLUSTERR | MNT_NOCLUSTERW | MNT_SUIDDIR); mp->mnt_flag |= SCARG(uap, flags) & (MNT_NOSUID | MNT_NOEXEC | MNT_NODEV | MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_FORCE | + MNT_NOSYMFOLLOW | MNT_NOATIME | MNT_NOCLUSTERR | MNT_NOCLUSTERW | MNT_SUIDDIR); /* * Mount the filesystem. @@ -1503,8 +1505,6 @@ olstat(p, uap) return (error); vp = nd.ni_vp; error = vn_stat(vp, &sb, p); - if (vp->v_type == VLNK) - sb.st_mode |= S_IFLNK | ACCESSPERMS; /* 0777 */ vput(vp); if (error) return (error); @@ -1606,8 +1606,6 @@ lstat(p, uap) return (error); vp = nd.ni_vp; error = vn_stat(vp, &sb, p); - if (vp->v_type == VLNK) - sb.st_mode |= S_IFLNK | ACCESSPERMS; /* 0777 */ vput(vp); if (error) return (error); diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index f63c720d90d3..ee9080989e22 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94 - * $Id: vfs_vnops.c,v 1.53 1998/04/06 18:43:28 peter Exp $ + * $Id: vfs_vnops.c,v 1.54 1998/04/06 19:32:37 peter Exp $ */ #include <sys/param.h> @@ -394,6 +394,11 @@ vn_stat(vp, sb, p) break; case VLNK: mode |= S_IFLNK; + /* This is a cosmetic change, symlinks does not have a mode. */ + if (vp->v_mount->mnt_flag & MNT_NOSYMFOLLOW) + sb->st_mode &= ~ACCESSPERMS; /* 0000 */ + else + sb->st_mode |= ACCESSPERMS; /* 0777 */ break; case VSOCK: mode |= S_IFSOCK; |