summaryrefslogtreecommitdiff
path: root/source3/rpc_server/srv_pipe_hnd.c
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>1999-02-03 01:58:52 +0000
committerLuke Leighton <lkcl@samba.org>1999-02-03 01:58:52 +0000
commitf61fc8923d4eceab8c82ff9c49745f9c6bed44e7 (patch)
treea17bde6255d035cc8f47283d4c2686fd2f0ca88a /source3/rpc_server/srv_pipe_hnd.c
parent1153f00f889e5bb310e895d319eed75bc93deef4 (diff)
downloadsamba-f61fc8923d4eceab8c82ff9c49745f9c6bed44e7.tar.gz
samba-f61fc8923d4eceab8c82ff9c49745f9c6bed44e7.tar.bz2
samba-f61fc8923d4eceab8c82ff9c49745f9c6bed44e7.zip
corrections to get data stream for 2nd and subsequent pdus copied from
right place (forgot to subtract 0x18 header bytes) (This used to be commit 5b9a7278da4a25ea217f914c8daae31238fa5cfe)
Diffstat (limited to 'source3/rpc_server/srv_pipe_hnd.c')
-rw-r--r--source3/rpc_server/srv_pipe_hnd.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c
index e29e1ee8db..ca5dde18d2 100644
--- a/source3/rpc_server/srv_pipe_hnd.c
+++ b/source3/rpc_server/srv_pipe_hnd.c
@@ -135,7 +135,6 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name,
p->file_offset = 0;
p->prev_pdu_file_offset = 0;
p->hdr_offsets = 0;
- p->next_frag_start = 0;
p->ntlmssp_validated = False;
p->ntlmssp_auth = False;
@@ -203,10 +202,11 @@ ssize_t write_pipe(pipes_struct *p, char *data, size_t n)
int read_pipe(pipes_struct *p, char *data, uint32 pos, int n)
{
int num = 0;
- int len = 0;
+ int pdu_len = 0;
uint32 hdr_num = 0;
- int data_hdr_pos;
- int data_pos;
+ int pdu_data_sent; /* amount of current pdu already sent */
+ int data_pos; /* entire rpc data sent - no headers, no auth verifiers */
+ int this_pdu_data_pos;
DEBUG(6,("read_pipe: %x", p->pnum));
@@ -230,37 +230,37 @@ int read_pipe(pipes_struct *p, char *data, uint32 pos, int n)
DEBUG(6,("read_pipe: p: %p file_offset: %d file_pos: %d\n",
p, p->file_offset, n));
- DEBUG(6,("read_pipe: next_frag_start: %d\n",
- p->next_frag_start));
/* the read request starts from where the SMBtrans2 left off. */
- data_hdr_pos = p->file_offset - p->prev_pdu_file_offset;
- data_pos = data_hdr_pos - p->hdr_offsets;
+ data_pos = p->file_offset - p->hdr_offsets;
+ this_pdu_data_pos = data_pos - p->prev_pdu_file_offset;
+ pdu_data_sent = p->file_offset - p->prev_pdu_file_offset;
if (!IS_BITS_SET_ALL(p->hdr.flags, RPC_FLG_LAST))
{
/* intermediate fragment - possibility of another header */
- DEBUG(5,("read_pipe: frag_len: %d data_pos: %d data_hdr_pos: %d\n",
- p->hdr.frag_len, data_pos, data_hdr_pos));
+ DEBUG(5,("read_pipe: frag_len: %d data_pos: %d pdu_data_sent: %d\n",
+ p->hdr.frag_len, data_pos, pdu_data_sent));
- if (data_hdr_pos == 0)
+ if (pdu_data_sent == 0)
{
DEBUG(6,("read_pipe: next fragment header\n"));
/* this is subtracted from the total data bytes, later */
hdr_num = 0x18;
p->hdr_offsets += 0x18;
+ data_pos -= 0x18;
/* create and copy in a new header. */
- create_rpc_reply(p, p->file_offset - p->hdr_offsets, p->rdata.offset);
+ create_rpc_reply(p, data_pos, p->rdata.offset);
}
}
- len = mem_buf_len(p->rhdr.data);
- num = len - (int)data_pos;
+ pdu_len = mem_buf_len(p->rhdr.data);
+ num = pdu_len - (int)this_pdu_data_pos;
- DEBUG(6,("read_pipe: len: %d num: %d n: %d\n", len, num, n));
+ DEBUG(6,("read_pipe: pdu_len: %d num: %d n: %d\n", pdu_len, num, n));
if (num > n) num = n;
if (num <= 0)
@@ -274,17 +274,17 @@ int read_pipe(pipes_struct *p, char *data, uint32 pos, int n)
DEBUG(5,("read_pipe: warning - data read only part of a header\n"));
}
- mem_buf_copy(data, p->rhdr.data, data_pos, num);
+ mem_buf_copy(data, p->rhdr.data, pdu_data_sent, num);
- data_pos += num;
- data_hdr_pos += num;
p->file_offset += num;
+ pdu_data_sent += num;
if (hdr_num == 0x18 && num == 0x18)
{
DEBUG(6,("read_pipe: just header read\n"));
}
- else if (data_hdr_pos == p->next_frag_start)
+
+ if (pdu_data_sent == p->hdr.frag_len)
{
DEBUG(6,("read_pipe: next fragment expected\n"));
p->prev_pdu_file_offset = p->file_offset;