Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/fs/smbfs Use DENYNONE to give unixy semantics of permitt...
details: https://anonhg.NetBSD.org/src/rev/f6d764fcdc85
branches: trunk
changeset: 570764:f6d764fcdc85
user: peter <peter%NetBSD.org@localhost>
date: Wed Oct 27 19:17:13 2004 +0000
description:
Use DENYNONE to give unixy semantics of permitting everything not forbidden
by permissions. Ie denial is up to server with clients/openers needing to use
advisory locks for further control. From FreeBSD.
Fixes file access problem when the file is already open on the server.
Problem reported by George Abdelmalik <gabdelmalik at avdat dot com dot au>
Reviewed by jdolecek.
diffstat:
sys/fs/smbfs/smbfs_vnops.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diffs (58 lines):
diff -r f51371c663cf -r f6d764fcdc85 sys/fs/smbfs/smbfs_vnops.c
--- a/sys/fs/smbfs/smbfs_vnops.c Wed Oct 27 19:12:31 2004 +0000
+++ b/sys/fs/smbfs/smbfs_vnops.c Wed Oct 27 19:17:13 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: smbfs_vnops.c,v 1.44 2004/09/13 19:25:48 jdolecek Exp $ */
+/* $NetBSD: smbfs_vnops.c,v 1.45 2004/10/27 19:17:13 peter Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.44 2004/09/13 19:25:48 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.45 2004/10/27 19:17:13 peter Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -270,17 +270,25 @@
smb_makescred(&scred, ap->a_p, ap->a_cred);
if (vp->v_type == VDIR)
- error = smbfs_smb_ntcreatex(np, SMB_AM_OPENREAD, &scred);
+ error = smbfs_smb_ntcreatex(np,
+ SMB_SM_DENYNONE|SMB_AM_OPENREAD, &scred);
else {
- accmode = SMB_AM_OPENREAD;
+ /*
+ * Use DENYNONE to give unixy semantics of permitting
+ * everything not forbidden by permissions. Ie denial
+ * is up to server with clients/openers needing to use
+ * advisory locks for further control.
+ */
+ accmode = SMB_SM_DENYNONE|SMB_AM_OPENREAD;
if ((vp->v_mount->mnt_flag & MNT_RDONLY) == 0)
- accmode = SMB_AM_OPENRW;
+ accmode = SMB_SM_DENYNONE|SMB_AM_OPENRW;
error = smbfs_smb_open(np, accmode, &scred);
if (error) {
if (ap->a_mode & FWRITE)
return EACCES;
- error = smbfs_smb_open(np, SMB_AM_OPENREAD, &scred);
+ error = smbfs_smb_open(np,
+ SMB_SM_DENYNONE|SMB_AM_OPENREAD, &scred);
}
}
if (!error)
@@ -420,7 +428,8 @@
np->n_size = vap->va_size;
uvm_vnp_setsize(vp, vap->va_size);
if ((np->n_flag & NOPEN) == 0) {
- error = smbfs_smb_open(np, SMB_AM_OPENRW, &scred);
+ error = smbfs_smb_open(np,
+ SMB_SM_DENYNONE|SMB_AM_OPENRW, &scred);
if (error == 0)
doclose = 1;
}
Home |
Main Index |
Thread Index |
Old Index