1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

expose a function for pushing all SMB2 create blobs

(This used to be commit f5985a0490)
This commit is contained in:
Andrew Tridgell 2008-05-28 16:27:38 +10:00
parent 2173169e19
commit 773f5cce80

View File

@ -125,6 +125,35 @@ static NTSTATUS smb2_create_blob_push_one(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer
return NT_STATUS_OK;
}
/*
create a buffer of a set of create blobs
*/
NTSTATUS smb2_create_blob_push(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer,
const struct smb2_create_blobs blobs)
{
int i;
NTSTATUS status;
*buffer = data_blob(NULL, 0);
for (i=0; i < blobs.num_blobs; i++) {
bool last = false;
const struct smb2_create_blob *c;
if ((i + 1) == blobs.num_blobs) {
last = true;
}
c = &blobs.blobs[i];
status = smb2_create_blob_push_one(mem_ctx, buffer, c, last);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
}
return NT_STATUS_OK;
}
NTSTATUS smb2_create_blob_add(TALLOC_CTX *mem_ctx, struct smb2_create_blobs *b,
const char *tag, DATA_BLOB data)
{
@ -160,8 +189,7 @@ struct smb2_request *smb2_create_send(struct smb2_tree *tree, struct smb2_create
{
struct smb2_request *req;
NTSTATUS status;
DATA_BLOB blob = data_blob(NULL, 0);
uint32_t i;
DATA_BLOB blob;
struct smb2_create_blobs blobs = io->in.blobs;
req = smb2_request_init_tree(tree, SMB2_OP_CREATE, 0x38, true, 0);
@ -281,22 +309,11 @@ struct smb2_request *smb2_create_send(struct smb2_tree *tree, struct smb2_create
}
/* and any custom blobs */
for (i=0; i < blobs.num_blobs; i++) {
bool last = false;
const struct smb2_create_blob *c;
if ((i + 1) == blobs.num_blobs) {
last = true;
}
c = &blobs.blobs[i];
status = smb2_create_blob_push_one(req, &blob,
c, last);
status = smb2_create_blob_push(req, &blob, blobs);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(req);
return NULL;
}
}
status = smb2_push_o32s32_blob(&req->out, 0x30, blob);
if (!NT_STATUS_IS_OK(status)) {
@ -304,6 +321,8 @@ struct smb2_request *smb2_create_send(struct smb2_tree *tree, struct smb2_create
return NULL;
}
data_blob_free(&blob);
smb2_transport_send(req);
return req;