diff options
author | Jeremy Allison <jra@samba.org> | 2010-10-15 13:30:07 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2010-10-15 17:38:21 -0700 |
commit | 92adb686372a9b67e47efb5b051bc351212f1780 (patch) | |
tree | 99fbc82ab0fc0d233f41711d8ab631963683df1a /source3 | |
parent | 68d1b3b5052f20bfd9ac8771c917b07a854d8fd3 (diff) | |
download | samba-92adb686372a9b67e47efb5b051bc351212f1780.tar.gz |
Fix bug #7733 - Invalid client DOS attributes on create can cause incorrect unix mode_t to be generated.
It turns out a client can send an NTCreateX call for a new file, but specify
FILE_ATTRIBUTE_DIRECTORY in the attribute list. Windows silently strips this,
but we don't - causing the unix_mode() function to go through the "mode bits
for new directory" codepath, instead of the "mode bits for new file" codepath.
Jeremy.
Diffstat (limited to 'source3')
-rw-r--r-- | source3/smbd/open.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 77f33b1cb30..10e01203745 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1512,6 +1512,12 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, ZERO_STRUCT(id); + /* Windows allows a new file to be created and + silently removes a FILE_ATTRIBUTE_DIRECTORY + sent by the client. Do the same. */ + + new_dos_attributes &= ~FILE_ATTRIBUTE_DIRECTORY; + if (conn->printer) { /* * Printers are handled completely differently. @@ -2469,6 +2475,9 @@ static NTSTATUS open_directory(connection_struct *conn, SMB_ASSERT(!is_ntfs_stream_smb_fname(smb_dname)); + /* Ensure we have a directory attribute. */ + file_attributes |= FILE_ATTRIBUTE_DIRECTORY; + DEBUG(5,("open_directory: opening directory %s, access_mask = 0x%x, " "share_access = 0x%x create_options = 0x%x, " "create_disposition = 0x%x, file_attributes = 0x%x\n", |