summaryrefslogtreecommitdiffstats
path: root/sys/fs/smbfs/smbfs_vnops.c
diff options
context:
space:
mode:
authorbp <bp@FreeBSD.org>2006-11-05 06:38:42 +0000
committerbp <bp@FreeBSD.org>2006-11-05 06:38:42 +0000
commit85d804ea67ac9184d4002b5aa06b96f384cae596 (patch)
tree20005aa8f27e6b631e9fa503f795e1976e10d214 /sys/fs/smbfs/smbfs_vnops.c
parent499769a9434f854d8c58f011509ffae07d45e003 (diff)
downloadFreeBSD-src-85d804ea67ac9184d4002b5aa06b96f384cae596.zip
FreeBSD-src-85d804ea67ac9184d4002b5aa06b96f384cae596.tar.gz
Create a bidirectional mapping of the DOS 'read only' attribute
to the 'w' flag. PR: kern/77958 Submitted by: ghozzy gmail com MFC after: 1 month
Diffstat (limited to 'sys/fs/smbfs/smbfs_vnops.c')
-rw-r--r--sys/fs/smbfs/smbfs_vnops.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/fs/smbfs/smbfs_vnops.c b/sys/fs/smbfs/smbfs_vnops.c
index ebdb309..f65d2e0 100644
--- a/sys/fs/smbfs/smbfs_vnops.c
+++ b/sys/fs/smbfs/smbfs_vnops.c
@@ -44,6 +44,7 @@
#include <sys/vnode.h>
#include <sys/limits.h>
#include <sys/lockf.h>
+#include <sys/stat.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
@@ -301,6 +302,7 @@ smbfs_setattr(ap)
struct smb_vc *vcp = SSTOVC(ssp);
u_quad_t tsize = 0;
int isreadonly, doclose, error = 0;
+ int old_n_dosattr;
SMBVDEBUG("\n");
if (vap->va_flags != VNOVAL)
@@ -346,6 +348,18 @@ smbfs_setattr(ap)
return error;
}
}
+ if (vap->va_mode != (mode_t)VNOVAL) {
+ old_n_dosattr = np->n_dosattr;
+ if (vap->va_mode & S_IWUSR)
+ np->n_dosattr &= ~SMB_FA_RDONLY;
+ else
+ np->n_dosattr |= SMB_FA_RDONLY;
+ if (np->n_dosattr != old_n_dosattr) {
+ error = smbfs_smb_setpattr(np, np->n_dosattr, NULL, &scred);
+ if (error)
+ return error;
+ }
+ }
mtime = atime = NULL;
if (vap->va_mtime.tv_sec != VNOVAL)
mtime = &vap->va_mtime;
OpenPOWER on IntegriCloud