diff options
-rw-r--r-- | fs/cifs/CHANGES | 5 | ||||
-rw-r--r-- | fs/cifs/inode.c | 22 |
2 files changed, 15 insertions, 12 deletions
diff --git a/fs/cifs/CHANGES b/fs/cifs/CHANGES index 5d1f4873d701..f75bdc661769 100644 --- a/fs/cifs/CHANGES +++ b/fs/cifs/CHANGES | |||
@@ -9,7 +9,10 @@ from read-only back to read-write, reflect this change in default file mode | |||
9 | (we had been leaving a file's mode read-only until the inode were reloaded). | 9 | (we had been leaving a file's mode read-only until the inode were reloaded). |
10 | Allow setting of attribute back to ATTR_NORMAL (removing readonly dos attribute | 10 | Allow setting of attribute back to ATTR_NORMAL (removing readonly dos attribute |
11 | when archive dos attribute not set and we are changing mode back to writeable | 11 | when archive dos attribute not set and we are changing mode back to writeable |
12 | on server which does not support the Unix Extensions). | 12 | on server which does not support the Unix Extensions). Remove read only dos |
13 | attribute on chmod when adding any write permission (ie on any of | ||
14 | user/group/other (not all of user/group/other ie 0222) when | ||
15 | mounted to windows. | ||
13 | 16 | ||
14 | Version 1.47 | 17 | Version 1.47 |
15 | ------------ | 18 | ------------ |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index f414526e476a..eeea33752e68 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -1339,17 +1339,17 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) | |||
1339 | cpu_to_le32(cifsInode->cifsAttrs | | 1339 | cpu_to_le32(cifsInode->cifsAttrs | |
1340 | ATTR_READONLY); | 1340 | ATTR_READONLY); |
1341 | } | 1341 | } |
1342 | } else if ((mode & S_IWUGO) == S_IWUGO) { | 1342 | } else if (cifsInode->cifsAttrs & ATTR_READONLY) { |
1343 | if (cifsInode->cifsAttrs & ATTR_READONLY) { | 1343 | /* If file is readonly on server, we would |
1344 | set_dosattr = TRUE; | 1344 | not be able to write to it - so if any write |
1345 | time_buf.Attributes = | 1345 | bit is enabled for user or group or other we |
1346 | cpu_to_le32(cifsInode->cifsAttrs & | 1346 | need to at least try to remove r/o dos attr */ |
1347 | (~ATTR_READONLY)); | 1347 | set_dosattr = TRUE; |
1348 | /* Windows ignores set to zero */ | 1348 | time_buf.Attributes = cpu_to_le32(cifsInode->cifsAttrs & |
1349 | if(time_buf.Attributes == 0) | 1349 | (~ATTR_READONLY)); |
1350 | time_buf.Attributes |= | 1350 | /* Windows ignores set to zero */ |
1351 | cpu_to_le32(ATTR_NORMAL); | 1351 | if(time_buf.Attributes == 0) |
1352 | } | 1352 | time_buf.Attributes |= cpu_to_le32(ATTR_NORMAL); |
1353 | } | 1353 | } |
1354 | /* BB to be implemented - | 1354 | /* BB to be implemented - |
1355 | via Windows security descriptors or streams */ | 1355 | via Windows security descriptors or streams */ |