1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-15 23:24:37 +03:00

Fixed problems people were having with creating profile

directories (NTTrans/Create with Security Descriptor for
a directory). It turns out the CIFS spec is bogus (what a
suprise) and the 'is a directory' flag is actually embedded
in the create_options field.

Jeremy.
This commit is contained in:
Jeremy Allison -
parent 54dd51176f
commit 68750d8153
2 changed files with 14 additions and 2 deletions

View File

@ -1187,6 +1187,16 @@ struct bitmap {
#define FILE_OVERWRITE 4
#define FILE_OVERWRITE_IF 5
/* CreateOptions field. */
#define FILE_DIRECTORY_FILE 0x0001
#define FILE_WRITE_THROUGH 0x0002
#define FILE_SEQUENTIAL_ONLY 0x0004
#define FILE_NON_DIRECTORY_FILE 0x0040
#define FILE_NO_EA_KNOWLEDGE 0x0200
#define FILE_EIGHT_DOT_THREE_ONLY 0x0400
#define FILE_RANDOM_ACCESS 0x0800
#define FILE_DELETE_ON_CLOSE 0x1000
/* Responses when opening a file. */
#define FILE_WAS_OPENED 1
#define FILE_WAS_CREATED 2

View File

@ -407,6 +407,7 @@ int reply_ntcreate_and_X(connection_struct *conn,
uint32 file_attributes = IVAL(inbuf,smb_ntcreate_FileAttributes);
uint32 share_access = IVAL(inbuf,smb_ntcreate_ShareAccess);
uint32 create_disposition = IVAL(inbuf,smb_ntcreate_CreateDisposition);
uint32 create_options = IVAL(inbuf,smb_ntcreate_CreateOptions);
uint32 fname_len = MIN(((uint32)SVAL(inbuf,smb_ntcreate_NameLength)),
((uint32)sizeof(fname)-1));
int smb_ofun;
@ -521,7 +522,7 @@ int reply_ntcreate_and_X(connection_struct *conn,
* If it's a request for a directory open, deal with it separately.
*/
if(flags & OPEN_DIRECTORY) {
if(create_options & FILE_DIRECTORY_FILE) {
oplock_request = 0;
open_directory(fsp, conn, fname, smb_ofun,
@ -699,6 +700,7 @@ static int call_nt_transact_create(connection_struct *conn,
uint32 file_attributes = IVAL(params,20);
uint32 share_access = IVAL(params,24);
uint32 create_disposition = IVAL(params,28);
uint32 create_options = IVAL(params,32);
uint32 fname_len = MIN(((uint32)IVAL(params,44)),
((uint32)sizeof(fname)-1));
int smb_ofun;
@ -781,7 +783,7 @@ static int call_nt_transact_create(connection_struct *conn,
* If it's a request for a directory open, deal with it separately.
*/
if(flags & OPEN_DIRECTORY) {
if(create_options & FILE_DIRECTORY_FILE) {
oplock_request = 0;