The line:
authorMatthew Chapman <matty@samba.org>
Sun, 21 Mar 1999 13:01:31 +0000 (13:01 +0000)
committerMatthew Chapman <matty@samba.org>
Sun, 21 Mar 1999 13:01:31 +0000 (13:01 +0000)
    this_pdu_data_pos = data_pos - p->prev_pdu_file_offset;

is correct for first two PDU's only, after that it results in extra
garbage after each fragment and hence "Protocol Error" messages from
NT4 SP4. Changed to:

    this_pdu_data_pos = (pdu_data_sent == 0) ? 0 : (pdu_data_sent - 0x18);
(This used to be commit b9e8a3ef3a25a81c4bb125bdd4f4d8334a578c85)

source3/rpc_server/srv_pipe_hnd.c

index 27aa79381cde75c6972edc65a22c5587f973be35..531fcf6add033d5d7253d1814be8b722a22b59b1 100644 (file)
@@ -230,8 +230,8 @@ int read_pipe(pipes_struct *p, char *data, uint32 pos, int n)
 
        /* the read request starts from where the SMBtrans2 left off. */
        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;
+       this_pdu_data_pos = (pdu_data_sent == 0) ? 0 : (pdu_data_sent - 0x18);
 
        if (!IS_BITS_SET_ALL(p->hdr.flags, RPC_FLG_LAST))
        {
@@ -255,7 +255,7 @@ int read_pipe(pipes_struct *p, char *data, uint32 pos, int n)
        }
        
        pdu_len = mem_buf_len(p->rhdr.data);
-       num = pdu_len - (int)this_pdu_data_pos;
+       num = pdu_len - this_pdu_data_pos;
        
        DEBUG(6,("read_pipe: pdu_len: %d num: %d n: %d\n", pdu_len, num, n));