diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/client/ntclient.c | 2 | ||||
-rw-r--r-- | source/include/proto.h | 2 | ||||
-rw-r--r-- | source/smbd/ipc.c | 2 | ||||
-rw-r--r-- | source/smbparse.c | 7 |
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 */ |