s4:libcli:smb2: add support durable handle request v2 blob in smb2_create_send
authorMichael Adam <obnox@samba.org>
Mon, 27 Feb 2012 19:15:01 +0000 (20:15 +0100)
committerMichael Adam <obnox@samba.org>
Sat, 3 Mar 2012 16:03:06 +0000 (17:03 +0100)
source4/libcli/smb2/create.c

index 438651f427f2173c025518a2274fb60242688a5b..4a5fca3205c34b93398ace75c561ea4f8e42d99a 100644 (file)
@@ -106,6 +106,34 @@ struct smb2_request *smb2_create_send(struct smb2_tree *tree, struct smb2_create
                }
        }
 
+       if (io->in.durable_open_v2) {
+               uint8_t data[32];
+               uint32_t flags = 0;
+               DATA_BLOB guid_blob;
+
+               SIVAL(data, 0, io->in.timeout);
+               if (io->in.persistent_open) {
+                       flags = SMB2_DHANDLE_FLAG_PERSISTENT;
+               }
+               SIVAL(data, 4, flags);
+               SBVAL(data, 8, 0x0); /* reserved */
+               status = GUID_to_ndr_blob(&io->in.create_guid, req, /* TALLOC_CTX */
+                                         &guid_blob);
+               if (!NT_STATUS_IS_OK(status)) {
+                       talloc_free(req);
+                       return NULL;
+               }
+               memcpy(data+16, guid_blob.data, 16);
+
+               status = smb2_create_blob_add(req, &blobs,
+                                             SMB2_CREATE_TAG_DH2Q,
+                                             data_blob_const(data, 32));
+               if (!NT_STATUS_IS_OK(status)) {
+                       talloc_free(req);
+                       return NULL;
+               }
+       }
+
        if (io->in.durable_handle) {
                uint8_t data[16];
                smb2_push_handle(data, io->in.durable_handle);