summaryrefslogtreecommitdiff
path: root/source3/smbd/smb2_create.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd/smb2_create.c')
-rw-r--r--source3/smbd/smb2_create.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index 02f83cbbe0..65022d5c84 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -87,6 +87,7 @@ static NTSTATUS smbd_smb2_create_recv(struct tevent_req *req,
uint64_t *out_allocation_size,
uint64_t *out_end_of_file,
uint32_t *out_file_attributes,
+ uint64_t *out_file_id_persistent,
uint64_t *out_file_id_volatile,
struct smb2_create_blobs *out_context_blobs);
@@ -264,6 +265,7 @@ static void smbd_smb2_request_create_done(struct tevent_req *tsubreq)
uint64_t out_allocation_size = 0;
uint64_t out_end_of_file = 0;
uint32_t out_file_attributes = 0;
+ uint64_t out_file_id_persistent = 0;
uint64_t out_file_id_volatile = 0;
struct smb2_create_blobs out_context_blobs;
DATA_BLOB out_context_buffer;
@@ -295,6 +297,7 @@ static void smbd_smb2_request_create_done(struct tevent_req *tsubreq)
&out_allocation_size,
&out_end_of_file,
&out_file_attributes,
+ &out_file_id_persistent,
&out_file_id_volatile,
&out_context_blobs);
if (!NT_STATUS_IS_OK(status)) {
@@ -356,7 +359,8 @@ static void smbd_smb2_request_create_done(struct tevent_req *tsubreq)
SIVAL(outbody.data, 0x38,
out_file_attributes); /* file attributes */
SIVAL(outbody.data, 0x3C, 0); /* reserved */
- SBVAL(outbody.data, 0x40, 0); /* file id (persistent) */
+ SBVAL(outbody.data, 0x40,
+ out_file_id_persistent); /* file id (persistent) */
SBVAL(outbody.data, 0x48,
out_file_id_volatile); /* file id (volatile) */
SIVAL(outbody.data, 0x50,
@@ -391,6 +395,7 @@ struct smbd_smb2_create_state {
uint64_t out_allocation_size;
uint64_t out_end_of_file;
uint32_t out_file_attributes;
+ uint64_t out_file_id_persistent;
uint64_t out_file_id_volatile;
struct smb2_create_blobs out_context_blobs;
};
@@ -791,6 +796,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
if (state->out_file_attributes == 0) {
state->out_file_attributes = FILE_ATTRIBUTE_NORMAL;
}
+ state->out_file_id_persistent = result->fnum;
state->out_file_id_volatile = result->fnum;
state->out_context_blobs = out_context_blobs;
@@ -809,6 +815,7 @@ static NTSTATUS smbd_smb2_create_recv(struct tevent_req *req,
uint64_t *out_allocation_size,
uint64_t *out_end_of_file,
uint32_t *out_file_attributes,
+ uint64_t *out_file_id_persistent,
uint64_t *out_file_id_volatile,
struct smb2_create_blobs *out_context_blobs)
{
@@ -830,6 +837,7 @@ static NTSTATUS smbd_smb2_create_recv(struct tevent_req *req,
*out_allocation_size = state->out_allocation_size;
*out_end_of_file = state->out_end_of_file;
*out_file_attributes = state->out_file_attributes;
+ *out_file_id_persistent = state->out_file_id_persistent;
*out_file_id_volatile = state->out_file_id_volatile;
*out_context_blobs = state->out_context_blobs;