From f31a52787d90becc3c96633adbb1c8d9768e635f Mon Sep 17 00:00:00 2001 From: Steve French Date: Fri, 6 Apr 2007 19:28:16 +0000 Subject: [PATCH] --- yaml --- r: 53956 b: refs/heads/master c: 5268df2ead6def933ace27ab4d46f67d2989b905 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/cifs/CHANGES | 5 ++++- trunk/fs/cifs/inode.c | 22 +++++++++++----------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index 48e974b36fef..c29bcb0d5fe1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3a9f462f6d07ab6f26a347120e173e945139befd +refs/heads/master: 5268df2ead6def933ace27ab4d46f67d2989b905 diff --git a/trunk/fs/cifs/CHANGES b/trunk/fs/cifs/CHANGES index 5d1f4873d701..f75bdc661769 100644 --- a/trunk/fs/cifs/CHANGES +++ b/trunk/fs/cifs/CHANGES @@ -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 ------------ diff --git a/trunk/fs/cifs/inode.c b/trunk/fs/cifs/inode.c index f414526e476a..eeea33752e68 100644 --- a/trunk/fs/cifs/inode.c +++ b/trunk/fs/cifs/inode.c @@ -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 */