devfs_vnops.c (163606) | devfs_vnops.c (164033) |
---|---|
1/*- 2 * Copyright (c) 2000-2004 3 * Poul-Henning Kamp. All rights reserved. 4 * Copyright (c) 1989, 1992-1993, 1995 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software donated to Berkeley by 8 * Jan-Simon Pendry. --- 17 unchanged lines hidden (view full) --- 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95 32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43 33 * | 1/*- 2 * Copyright (c) 2000-2004 3 * Poul-Henning Kamp. All rights reserved. 4 * Copyright (c) 1989, 1992-1993, 1995 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software donated to Berkeley by 8 * Jan-Simon Pendry. --- 17 unchanged lines hidden (view full) --- 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95 32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43 33 * |
34 * $FreeBSD: head/sys/fs/devfs/devfs_vnops.c 163606 2006-10-22 11:52:19Z rwatson $ | 34 * $FreeBSD: head/sys/fs/devfs/devfs_vnops.c 164033 2006-11-06 13:42:10Z rwatson $ |
35 */ 36 37/* 38 * TODO: 39 * remove empty directories 40 * mkdir: want it ? 41 */ 42 --- 7 unchanged lines hidden (view full) --- 50#include <sys/file.h> 51#include <sys/filedesc.h> 52#include <sys/filio.h> 53#include <sys/kernel.h> 54#include <sys/lock.h> 55#include <sys/malloc.h> 56#include <sys/mount.h> 57#include <sys/namei.h> | 35 */ 36 37/* 38 * TODO: 39 * remove empty directories 40 * mkdir: want it ? 41 */ 42 --- 7 unchanged lines hidden (view full) --- 50#include <sys/file.h> 51#include <sys/filedesc.h> 52#include <sys/filio.h> 53#include <sys/kernel.h> 54#include <sys/lock.h> 55#include <sys/malloc.h> 56#include <sys/mount.h> 57#include <sys/namei.h> |
58#include <sys/priv.h> |
|
58#include <sys/proc.h> 59#include <sys/stat.h> 60#include <sys/sx.h> 61#include <sys/time.h> 62#include <sys/ttycom.h> 63#include <sys/unistd.h> 64#include <sys/vnode.h> 65 --- 1074 unchanged lines hidden (view full) --- 1140 uid = de->de_uid; 1141 else 1142 uid = vap->va_uid; 1143 if (vap->va_gid == (gid_t)VNOVAL) 1144 gid = de->de_gid; 1145 else 1146 gid = vap->va_gid; 1147 if (uid != de->de_uid || gid != de->de_gid) { | 59#include <sys/proc.h> 60#include <sys/stat.h> 61#include <sys/sx.h> 62#include <sys/time.h> 63#include <sys/ttycom.h> 64#include <sys/unistd.h> 65#include <sys/vnode.h> 66 --- 1074 unchanged lines hidden (view full) --- 1141 uid = de->de_uid; 1142 else 1143 uid = vap->va_uid; 1144 if (vap->va_gid == (gid_t)VNOVAL) 1145 gid = de->de_gid; 1146 else 1147 gid = vap->va_gid; 1148 if (uid != de->de_uid || gid != de->de_gid) { |
1148 if (((ap->a_cred->cr_uid != de->de_uid) || uid != de->de_uid || 1149 (gid != de->de_gid && !groupmember(gid, ap->a_cred))) && 1150 (error = suser_cred(ap->a_td->td_ucred, SUSER_ALLOWJAIL)) != 0) 1151 return (error); | 1149 if ((ap->a_cred->cr_uid != de->de_uid) || uid != de->de_uid || 1150 (gid != de->de_gid && !groupmember(gid, ap->a_cred))) { 1151 error = priv_check_cred(ap->a_td->td_ucred, 1152 PRIV_VFS_CHOWN, SUSER_ALLOWJAIL); 1153 if (error) 1154 return (error); 1155 } |
1152 de->de_uid = uid; 1153 de->de_gid = gid; 1154 c = 1; 1155 } 1156 1157 if (vap->va_mode != (mode_t)VNOVAL) { | 1156 de->de_uid = uid; 1157 de->de_gid = gid; 1158 c = 1; 1159 } 1160 1161 if (vap->va_mode != (mode_t)VNOVAL) { |
1158 if ((ap->a_cred->cr_uid != de->de_uid) && 1159 (error = suser_cred(ap->a_td->td_ucred, SUSER_ALLOWJAIL))) 1160 return (error); | 1162 if (ap->a_cred->cr_uid != de->de_uid) { 1163 error = priv_check_cred(ap->a_td->td_ucred, 1164 PRIV_VFS_ADMIN, SUSER_ALLOWJAIL); 1165 if (error) 1166 return (error); 1167 } |
1161 de->de_mode = vap->va_mode; 1162 c = 1; 1163 } 1164 1165 if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) { 1166 /* See the comment in ufs_vnops::ufs_setattr(). */ 1167 if ((error = VOP_ACCESS(vp, VADMIN, ap->a_cred, ap->a_td)) && 1168 ((vap->va_vaflags & VA_UTIMES_NULL) == 0 || --- 53 unchanged lines hidden (view full) --- 1222 int i, error; 1223 struct devfs_dirent *dd; 1224 struct devfs_dirent *de; 1225 struct devfs_mount *dmp; 1226 struct thread *td; 1227 1228 td = ap->a_cnp->cn_thread; 1229 KASSERT(td == curthread, ("devfs_symlink: td != curthread")); | 1168 de->de_mode = vap->va_mode; 1169 c = 1; 1170 } 1171 1172 if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) { 1173 /* See the comment in ufs_vnops::ufs_setattr(). */ 1174 if ((error = VOP_ACCESS(vp, VADMIN, ap->a_cred, ap->a_td)) && 1175 ((vap->va_vaflags & VA_UTIMES_NULL) == 0 || --- 53 unchanged lines hidden (view full) --- 1229 int i, error; 1230 struct devfs_dirent *dd; 1231 struct devfs_dirent *de; 1232 struct devfs_mount *dmp; 1233 struct thread *td; 1234 1235 td = ap->a_cnp->cn_thread; 1236 KASSERT(td == curthread, ("devfs_symlink: td != curthread")); |
1230 error = suser(td); | 1237 1238 error = priv_check(td, PRIV_DEVFS_SYMLINK); |
1231 if (error) 1232 return(error); 1233 dmp = VFSTODEVFS(ap->a_dvp->v_mount); 1234 dd = ap->a_dvp->v_data; 1235 de = devfs_newdirent(ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen); 1236 de->de_uid = 0; 1237 de->de_gid = 0; 1238 de->de_mode = 0755; --- 134 unchanged lines hidden --- | 1239 if (error) 1240 return(error); 1241 dmp = VFSTODEVFS(ap->a_dvp->v_mount); 1242 dd = ap->a_dvp->v_data; 1243 de = devfs_newdirent(ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen); 1244 de->de_uid = 0; 1245 de->de_gid = 0; 1246 de->de_mode = 0755; --- 134 unchanged lines hidden --- |