summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authorlulf <lulf@FreeBSD.org>2010-01-18 19:09:16 +0000
committerlulf <lulf@FreeBSD.org>2010-01-18 19:09:16 +0000
commit4c036705bb86a68cea72910ba4ce20d2c2c5aa50 (patch)
treea5b611aa99d791a9b845fa7ad8d29ab4482afbba /sys/fs
parent0c9159162933c77f1f7a00357884f282b389d15d (diff)
downloadFreeBSD-src-4c036705bb86a68cea72910ba4ce20d2c2c5aa50.zip
FreeBSD-src-4c036705bb86a68cea72910ba4ce20d2c2c5aa50.tar.gz
Revert parts of r202283:
- Return EOPNOTSUPP before EROFS to be consistent with other filesystems. - Fix setting of the nodump flag for users without PRIV_VFS_SYSFLAGS privilege. Submitted by: jh@
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/ext2fs/ext2_vnops.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/fs/ext2fs/ext2_vnops.c b/sys/fs/ext2fs/ext2_vnops.c
index 6b0d371..43a2302 100644
--- a/sys/fs/ext2fs/ext2_vnops.c
+++ b/sys/fs/ext2fs/ext2_vnops.c
@@ -402,11 +402,12 @@ ext2_setattr(ap)
return (EINVAL);
}
if (vap->va_flags != VNOVAL) {
- if (vp->v_mount->mnt_flag & MNT_RDONLY)
- return (EROFS);
/* Disallow flags not supported by ext2fs. */
if(vap->va_flags & ~(SF_APPEND | SF_IMMUTABLE | UF_NODUMP))
- return(EOPNOTSUPP);
+ return (EOPNOTSUPP);
+
+ if (vp->v_mount->mnt_flag & MNT_RDONLY)
+ return (EROFS);
/*
* Callers may only modify the file flags on objects they
* have VADMIN rights for.
@@ -430,9 +431,11 @@ ext2_setattr(ap)
ip->i_flags = vap->va_flags;
} else {
if (ip->i_flags
- & (SF_NOUNLINK | SF_IMMUTABLE | SF_APPEND))
+ & (SF_NOUNLINK | SF_IMMUTABLE | SF_APPEND) ||
+ (vap->va_flags & UF_SETTABLE) != vap->va_flags)
return (EPERM);
ip->i_flags &= SF_SETTABLE;
+ ip->i_flags |= (vap->va_flags & UF_SETTABLE);
}
ip->i_flag |= IN_CHANGE;
if (vap->va_flags & (IMMUTABLE | APPEND))
OpenPOWER on IntegriCloud