disable most mode changes on non-unix/non-cifsacl mounts
authorJeff Layton <jlayton@redhat.com>
Thu, 22 May 2008 13:33:34 +0000 (09:33 -0400)
committerSteve French <sfrench@us.ibm.com>
Sun, 25 May 2008 00:33:58 +0000 (00:33 +0000)
commit5132861a7a44498ebb18357473f8b8d4cdc70e9f
tree7a1efb101645878623a73f380113fd29f43aeae4
parentb7206153f61bb63ee2cffa63905b57ec01d20e6e
disable most mode changes on non-unix/non-cifsacl mounts

CIFS currently allows you to change the mode of an inode on a share that
doesn't have unix extensions enabled, and isn't using cifsacl. The inode
in this case *only* has its mode changed in memory on the client. This
is problematic since it can change any time the inode is purged from the
cache.

This patch makes cifs_setattr silently ignore most mode changes when
unix extensions and cifsacl support are not enabled, and when the share
is not mounted with the "dynperm" option. The exceptions are:

When a mode change would remove all write access to an inode we turn on
the ATTR_READONLY bit on the server and remove all write bits from the
inode's mode in memory.

When a mode change would add a write bit to an inode that previously had
them all turned off, it turns off the ATTR_READONLY bit on the server,
and resets the mode back to what it would normally be (generally, the
file_mode or dir_mode of the share).

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/inode.c