mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
[CIFS] Add write perm for usr to file on windows should remove r/o dos attr
Remove read only dos attribute on chmod when adding any write permission (ie on any of user/group/other (not all of user/group/other ie 0222) when mounted to windows. Suggested by: Urs Fleisch Signed-off-by: Urs Fleisch <urs.fleisch@gmail.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
3a9f462f6d
commit
5268df2ead
@ -9,7 +9,10 @@ from read-only back to read-write, reflect this change in default file mode
|
||||
(we had been leaving a file's mode read-only until the inode were reloaded).
|
||||
Allow setting of attribute back to ATTR_NORMAL (removing readonly dos attribute
|
||||
when archive dos attribute not set and we are changing mode back to writeable
|
||||
on server which does not support the Unix Extensions).
|
||||
on server which does not support the Unix Extensions). Remove read only dos
|
||||
attribute on chmod when adding any write permission (ie on any of
|
||||
user/group/other (not all of user/group/other ie 0222) when
|
||||
mounted to windows.
|
||||
|
||||
Version 1.47
|
||||
------------
|
||||
|
@ -1339,17 +1339,17 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
||||
cpu_to_le32(cifsInode->cifsAttrs |
|
||||
ATTR_READONLY);
|
||||
}
|
||||
} else if ((mode & S_IWUGO) == S_IWUGO) {
|
||||
if (cifsInode->cifsAttrs & ATTR_READONLY) {
|
||||
set_dosattr = TRUE;
|
||||
time_buf.Attributes =
|
||||
cpu_to_le32(cifsInode->cifsAttrs &
|
||||
(~ATTR_READONLY));
|
||||
/* Windows ignores set to zero */
|
||||
if(time_buf.Attributes == 0)
|
||||
time_buf.Attributes |=
|
||||
cpu_to_le32(ATTR_NORMAL);
|
||||
}
|
||||
} else if (cifsInode->cifsAttrs & ATTR_READONLY) {
|
||||
/* If file is readonly on server, we would
|
||||
not be able to write to it - so if any write
|
||||
bit is enabled for user or group or other we
|
||||
need to at least try to remove r/o dos attr */
|
||||
set_dosattr = TRUE;
|
||||
time_buf.Attributes = cpu_to_le32(cifsInode->cifsAttrs &
|
||||
(~ATTR_READONLY));
|
||||
/* Windows ignores set to zero */
|
||||
if(time_buf.Attributes == 0)
|
||||
time_buf.Attributes |= cpu_to_le32(ATTR_NORMAL);
|
||||
}
|
||||
/* BB to be implemented -
|
||||
via Windows security descriptors or streams */
|
||||
|
Loading…
Reference in New Issue
Block a user