From d9e9f063ddaa5465c97d52e8edf25d957b1bddee Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 28 Oct 2020 10:35:59 +0100 Subject: [PATCH] smbd: use SMB_VFS_CREATE_FILE() in call_trans2mkdir() Use SMB_VFS_CREATE_FILE() instead of the create_directory() in order to have a fsp that we can pass to set_ea(). Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- source3/smbd/trans2.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 497ae94b392..41ed5e8a0b7 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -9561,6 +9561,7 @@ static void call_trans2mkdir(connection_struct *conn, struct smb_request *req, char **ppdata, int total_data, unsigned int max_data_bytes) { + struct files_struct *fsp = NULL; struct smb_filename *smb_dname = NULL; char *params = *pparams; char *pdata = *ppdata; @@ -9661,8 +9662,24 @@ static void call_trans2mkdir(connection_struct *conn, struct smb_request *req, * The System i QNTC IBM SMB client puts bad values here, * so ignore them. */ - status = create_directory(conn, req, smb_dname); - + status = SMB_VFS_CREATE_FILE( + conn, /* conn */ + req, /* req */ + smb_dname, /* fname */ + MAXIMUM_ALLOWED_ACCESS, /* access_mask */ + FILE_SHARE_NONE, /* share_access */ + FILE_CREATE, /* create_disposition*/ + FILE_DIRECTORY_FILE, /* create_options */ + FILE_ATTRIBUTE_DIRECTORY, /* file_attributes */ + 0, /* oplock_request */ + NULL, /* lease */ + 0, /* allocation_size */ + 0, /* private_flags */ + NULL, /* sd */ + NULL, /* ea_list */ + &fsp, /* result */ + NULL, /* pinfo */ + NULL, NULL); /* create context */ if (!NT_STATUS_IS_OK(status)) { reply_nterror(req, status); goto out; @@ -9670,7 +9687,7 @@ static void call_trans2mkdir(connection_struct *conn, struct smb_request *req, /* Try and set any given EA. */ if (ea_list) { - status = set_ea(conn, NULL, smb_dname, ea_list); + status = set_ea(conn, fsp, smb_dname, ea_list); if (!NT_STATUS_IS_OK(status)) { reply_nterror(req, status); goto out; @@ -9690,6 +9707,10 @@ static void call_trans2mkdir(connection_struct *conn, struct smb_request *req, send_trans2_replies(conn, req, NT_STATUS_OK, params, 2, *ppdata, 0, max_data_bytes); out: + if (fsp != NULL) { + close_file(NULL, fsp, NORMAL_CLOSE); + fsp = NULL; + } TALLOC_FREE(smb_dname); return; } -- 2.47.3