|
Lines 820-828
Link Here
|
| 820 |
struct proc *p = cnp->cn_proc; |
820 |
struct proc *p = cnp->cn_proc; |
| 821 |
|
821 |
|
| 822 |
*vpp = NULLVP; |
822 |
*vpp = NULLVP; |
| 823 |
if ((flags & ISLASTCN) && (dvp->v_mount->mnt_flag & MNT_RDONLY) && |
|
|
| 824 |
(cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) |
| 825 |
return (EROFS); |
| 826 |
if (dvp->v_type != VDIR) |
823 |
if (dvp->v_type != VDIR) |
| 827 |
return (ENOTDIR); |
824 |
return (ENOTDIR); |
| 828 |
lockparent = flags & LOCKPARENT; |
825 |
lockparent = flags & LOCKPARENT; |
|
Lines 833-838
Link Here
|
| 833 |
struct vattr vattr; |
830 |
struct vattr vattr; |
| 834 |
int vpid; |
831 |
int vpid; |
| 835 |
|
832 |
|
|
|
833 |
if ((flags & ISLASTCN) && |
| 834 |
(dvp->v_mount->mnt_flag & MNT_RDONLY) && |
| 835 |
(cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) |
| 836 |
return (EROFS); |
| 837 |
|
| 836 |
if ((error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred, p)) != 0) { |
838 |
if ((error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred, p)) != 0) { |
| 837 |
*vpp = NULLVP; |
839 |
*vpp = NULLVP; |
| 838 |
return (error); |
840 |
return (error); |
|
Lines 894-899
Link Here
|
| 894 |
goto nfsmout; |
896 |
goto nfsmout; |
| 895 |
} |
897 |
} |
| 896 |
nfsm_getfh(fhp, fhsize, v3); |
898 |
nfsm_getfh(fhp, fhsize, v3); |
|
|
899 |
|
| 900 |
if ((flags & ISLASTCN) && (dvp->v_mount->mnt_flag & MNT_RDONLY) && |
| 901 |
(cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) |
| 902 |
return (EROFS); |
| 897 |
|
903 |
|
| 898 |
/* |
904 |
/* |
| 899 |
* Handle RENAME case... |
905 |
* Handle RENAME case... |