summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/client/ntclient.c2
-rw-r--r--source/include/proto.h2
-rw-r--r--source/smbd/ipc.c2
-rw-r--r--source/smbparse.c7
4 files changed, 7 insertions, 6 deletions
diff --git a/source/client/ntclient.c b/source/client/ntclient.c
index d2e8973ed49..71f38fcf598 100644
--- a/source/client/ntclient.c
+++ b/source/client/ntclient.c
@@ -140,7 +140,7 @@ static BOOL do_rpc_bind(uint16 fnum)
data_len = PTR_DIFF(p, data);
/* create the request RPC_HDR */
- make_rpc_hdr(&hdr, RPC_BIND, call_id, PTR_DIFF(p, data + 0x10));
+ make_rpc_hdr(&hdr, RPC_BIND, 0x0, call_id, PTR_DIFF(p, data + 0x10));
/* stream the header into data */
p = smb_io_rpc_hdr(False, &hdr, data, data, 4, 0);
diff --git a/source/include/proto.h b/source/include/proto.h
index fe35c3592eb..10b0f0b796f 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -945,7 +945,7 @@ void make_sam_info(DOM_SAM_INFO *sam,
DOM_ID_INFO_1 *id1);
char* smb_io_sam_info(BOOL io, DOM_SAM_INFO *sam, char *q, char *base, int align, int depth);
char* smb_io_gid(BOOL io, DOM_GID *gid, char *q, char *base, int align, int depth);
-void make_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type,
+void make_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type, uint8 frag,
uint32 call_id, int data_len);
char* smb_io_rpc_hdr(BOOL io, RPC_HDR *rpc, char *q, char *base, int align, int depth);
void make_rpc_iface(RPC_IFACE *ifc, char data[16], uint32 version);
diff --git a/source/smbd/ipc.c b/source/smbd/ipc.c
index b7939f2461c..aa1d2d5c4f9 100644
--- a/source/smbd/ipc.c
+++ b/source/smbd/ipc.c
@@ -2966,7 +2966,7 @@ static int api_fd_reply(int cnum,uint16 vuid,char *outbuf,
rdata_len = PTR_DIFF(p, rdata);
- make_rpc_hdr(&hdr, RPC_BINDACK, hdr.call_id, rdata_len);
+ make_rpc_hdr(&hdr, RPC_BINDACK, 0x0, hdr.call_id, rdata_len);
p = smb_io_rpc_hdr(False, &hdr, rdata, rdata, 4, 0);
diff --git a/source/smbparse.c b/source/smbparse.c
index 699e00f82b9..ed6ab248cb4 100644
--- a/source/smbparse.c
+++ b/source/smbparse.c
@@ -794,7 +794,7 @@ char* smb_io_gid(BOOL io, DOM_GID *gid, char *q, char *base, int align, int dept
/*******************************************************************
creates an RPC_HDR structure.
********************************************************************/
-void make_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type,
+void make_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type, uint8 frag,
uint32 call_id, int data_len)
{
if (hdr == NULL) return;
@@ -802,7 +802,7 @@ void make_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type,
hdr->major = 5; /* RPC version 5 */
hdr->minor = 0; /* minor version 0 */
hdr->pkt_type = pkt_type; /* RPC packet type */
- hdr->frag = 3; /* first frag + last frag */
+ hdr->frag = frag; /* first frag + last frag */
hdr->pack_type = 0x10; /* packed data representation */
hdr->frag_len = data_len; /* fragment length, fill in later */
hdr->auth_len = 0; /* authentication length */
@@ -1104,7 +1104,8 @@ void make_rpc_hdr_rr(RPC_HDR_RR *hdr, enum RPC_PKT_TYPE pkt_type,
{
if (hdr == NULL) return;
- make_rpc_hdr(&(hdr->hdr), pkt_type, call_id, data_len);
+ /* frag is FIRST_FRAG | LAST_FRAG. lkclXXXX must define these */
+ make_rpc_hdr(&(hdr->hdr), pkt_type, 0x03, call_id, data_len);
hdr->alloc_hint = data_len - 0x18; /* allocation hint */
hdr->context_id = 0; /* presentation context identifier */