r16566: add pull function for a site32/offset32 blob
authorStefan Metzmacher <metze@samba.org>
Tue, 27 Jun 2006 17:16:14 +0000 (17:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:09:35 +0000 (14:09 -0500)
metze
(This used to be commit 81702c36c28e9e32860c5d91887d2ad2121ce306)

source4/libcli/smb2/request.c

index 43445575f08634a56aa3a1ee04319f9fa0eb4f89..2f1117cf301164465c169f04408eca859a12e993 100644 (file)
@@ -508,6 +508,30 @@ NTSTATUS smb2_pull_o32s32_blob(struct smb2_request_buffer *buf, TALLOC_CTX *mem_
        return NT_STATUS_OK;
 }
 
+/*
+  pull a uint32_t length/ uint32_t ofs/blob triple from a data blob
+  the ptr points to the start of the offset/length pair
+*/
+NTSTATUS smb2_pull_s32o32_blob(struct smb2_request_buffer *buf, TALLOC_CTX *mem_ctx, uint8_t *ptr, DATA_BLOB *blob)
+{
+       uint32_t ofs, size;
+       if (smb2_oob(buf, ptr, 8)) {
+               return NT_STATUS_BUFFER_TOO_SMALL;
+       }
+       size = IVAL(ptr, 0);
+       ofs  = IVAL(ptr, 4);
+       if (ofs == 0 || size == 0) {
+               *blob = data_blob(NULL, 0);
+               return NT_STATUS_OK;
+       }
+       if (smb2_oob(buf, buf->hdr + ofs, size)) {
+               return NT_STATUS_BUFFER_TOO_SMALL;
+       }
+       *blob = data_blob_talloc(mem_ctx, buf->hdr + ofs, size);
+       NT_STATUS_HAVE_NO_MEMORY(blob->data);
+       return NT_STATUS_OK;
+}
+
 /*
   pull a string in a uint16_t ofs/ uint16_t length/blob format
   UTF-16 without termination