msdosfs_vfsops.c (162647) | msdosfs_vfsops.c (164033) |
---|---|
1/* $FreeBSD: head/sys/fs/msdosfs/msdosfs_vfsops.c 162647 2006-09-26 04:12:49Z tegge $ */ | 1/* $FreeBSD: head/sys/fs/msdosfs/msdosfs_vfsops.c 164033 2006-11-06 13:42:10Z rwatson $ */ |
2/* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */ 3 4/*- 5 * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. 6 * Copyright (C) 1994, 1995, 1997 TooLs GmbH. 7 * All rights reserved. 8 * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below). 9 * --- 37 unchanged lines hidden (view full) --- 47 * 48 * October 1992 49 */ 50 51#include <sys/param.h> 52#include <sys/systm.h> 53#include <sys/conf.h> 54#include <sys/namei.h> | 2/* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */ 3 4/*- 5 * Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank. 6 * Copyright (C) 1994, 1995, 1997 TooLs GmbH. 7 * All rights reserved. 8 * Original code by Paul Popelka (paulp@uts.amdahl.com) (see below). 9 * --- 37 unchanged lines hidden (view full) --- 47 * 48 * October 1992 49 */ 50 51#include <sys/param.h> 52#include <sys/systm.h> 53#include <sys/conf.h> 54#include <sys/namei.h> |
55#include <sys/priv.h> |
|
55#include <sys/proc.h> 56#include <sys/kernel.h> 57#include <sys/vnode.h> 58#include <sys/mount.h> 59#include <sys/bio.h> 60#include <sys/buf.h> 61#include <sys/fcntl.h> 62#include <sys/malloc.h> --- 225 unchanged lines hidden (view full) --- 288 if (error && (flags & FORCECLOSE) == 0) 289 return (error); 290 } else if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && 291 !vfs_flagopt(mp->mnt_optnew, "ro", NULL, 0)) { 292 /* 293 * If upgrade to read-write by non-root, then verify 294 * that user has necessary permissions on the device. 295 */ | 56#include <sys/proc.h> 57#include <sys/kernel.h> 58#include <sys/vnode.h> 59#include <sys/mount.h> 60#include <sys/bio.h> 61#include <sys/buf.h> 62#include <sys/fcntl.h> 63#include <sys/malloc.h> --- 225 unchanged lines hidden (view full) --- 289 if (error && (flags & FORCECLOSE) == 0) 290 return (error); 291 } else if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && 292 !vfs_flagopt(mp->mnt_optnew, "ro", NULL, 0)) { 293 /* 294 * If upgrade to read-write by non-root, then verify 295 * that user has necessary permissions on the device. 296 */ |
296 if (suser(td)) { 297 devvp = pmp->pm_devvp; 298 vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td); 299 error = VOP_ACCESS(devvp, VREAD | VWRITE, 300 td->td_ucred, td); 301 if (error) { 302 VOP_UNLOCK(devvp, 0, td); 303 return (error); 304 } | 297 devvp = pmp->pm_devvp; 298 vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, td); 299 error = VOP_ACCESS(devvp, VREAD | VWRITE, 300 td->td_ucred, td); 301 if (error) 302 error = priv_check(td, PRIV_VFS_MOUNT_PERM); 303 if (error) { |
305 VOP_UNLOCK(devvp, 0, td); | 304 VOP_UNLOCK(devvp, 0, td); |
305 return (error); |
|
306 } | 306 } |
307 VOP_UNLOCK(devvp, 0, td); |
|
307 DROP_GIANT(); 308 g_topology_lock(); 309 error = g_access(pmp->pm_cp, 0, 1, 0); 310 g_topology_unlock(); 311 PICKUP_GIANT(); 312 if (error) 313 return (error); 314 --- 33 unchanged lines hidden (view full) --- 348 if (!vn_isdisk(devvp, &error)) { 349 vput(devvp); 350 return (error); 351 } 352 /* 353 * If mount by non-root, then verify that user has necessary 354 * permissions on the device. 355 */ | 308 DROP_GIANT(); 309 g_topology_lock(); 310 error = g_access(pmp->pm_cp, 0, 1, 0); 311 g_topology_unlock(); 312 PICKUP_GIANT(); 313 if (error) 314 return (error); 315 --- 33 unchanged lines hidden (view full) --- 349 if (!vn_isdisk(devvp, &error)) { 350 vput(devvp); 351 return (error); 352 } 353 /* 354 * If mount by non-root, then verify that user has necessary 355 * permissions on the device. 356 */ |
356 if (suser(td)) { 357 accessmode = VREAD; 358 if ((mp->mnt_flag & MNT_RDONLY) == 0) 359 accessmode |= VWRITE; 360 error = VOP_ACCESS(devvp, accessmode, td->td_ucred, td); 361 if (error) { 362 vput(devvp); 363 return (error); 364 } | 357 accessmode = VREAD; 358 if ((mp->mnt_flag & MNT_RDONLY) == 0) 359 accessmode |= VWRITE; 360 error = VOP_ACCESS(devvp, accessmode, td->td_ucred, td); 361 if (error) 362 error = priv_check(td, PRIV_VFS_MOUNT_PERM); 363 if (error) { 364 vput(devvp); 365 return (error); |
365 } 366 if ((mp->mnt_flag & MNT_UPDATE) == 0) { 367 error = mountmsdosfs(devvp, mp, td); 368#ifdef MSDOSFS_DEBUG /* only needed for the printf below */ 369 pmp = VFSTOMSDOSFS(mp); 370#endif 371 } else { 372 if (devvp != pmp->pm_devvp) --- 599 unchanged lines hidden --- | 366 } 367 if ((mp->mnt_flag & MNT_UPDATE) == 0) { 368 error = mountmsdosfs(devvp, mp, td); 369#ifdef MSDOSFS_DEBUG /* only needed for the printf below */ 370 pmp = VFSTOMSDOSFS(mp); 371#endif 372 } else { 373 if (devvp != pmp->pm_devvp) --- 599 unchanged lines hidden --- |