diff options
author | bp <bp@FreeBSD.org> | 2006-11-05 06:38:42 +0000 |
---|---|---|
committer | bp <bp@FreeBSD.org> | 2006-11-05 06:38:42 +0000 |
commit | 85d804ea67ac9184d4002b5aa06b96f384cae596 (patch) | |
tree | 20005aa8f27e6b631e9fa503f795e1976e10d214 /sys/fs/smbfs/smbfs_vnops.c | |
parent | 499769a9434f854d8c58f011509ffae07d45e003 (diff) | |
download | FreeBSD-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.c | 14 |
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; |