mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
libcli/util: let tstream_read_pdu_blob_* cope with variable length headers
metze
This commit is contained in:
parent
0b5a556b76
commit
e628bf1081
@ -97,7 +97,9 @@ static void tstream_read_pdu_blob_done(struct tevent_req *subreq)
|
||||
struct tstream_read_pdu_blob_state);
|
||||
ssize_t ret;
|
||||
int sys_errno;
|
||||
size_t pdu_size;
|
||||
size_t old_buf_size = state->pdu_blob.length;
|
||||
size_t new_buf_size = 0;
|
||||
size_t pdu_size = 0;
|
||||
NTSTATUS status;
|
||||
uint8_t *buf;
|
||||
|
||||
@ -116,20 +118,26 @@ static void tstream_read_pdu_blob_done(struct tevent_req *subreq)
|
||||
return;
|
||||
} else if (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) {
|
||||
/* more to get */
|
||||
if (pdu_size > 0) {
|
||||
new_buf_size = pdu_size;
|
||||
} else {
|
||||
/* we don't know the size yet, so get one more byte */
|
||||
new_buf_size = old_buf_size + 1;
|
||||
}
|
||||
} else if (!NT_STATUS_IS_OK(status)) {
|
||||
tevent_req_nterror(req, status);
|
||||
return;
|
||||
}
|
||||
|
||||
buf = talloc_realloc(state, state->pdu_blob.data, uint8_t, pdu_size);
|
||||
buf = talloc_realloc(state, state->pdu_blob.data, uint8_t, new_buf_size);
|
||||
if (tevent_req_nomem(buf, req)) {
|
||||
return;
|
||||
}
|
||||
state->pdu_blob.data = buf;
|
||||
state->pdu_blob.length = pdu_size;
|
||||
state->pdu_blob.length = new_buf_size;
|
||||
|
||||
state->tmp_vector.iov_base = (char *) (buf + state->tmp_vector.iov_len);
|
||||
state->tmp_vector.iov_len = pdu_size - state->tmp_vector.iov_len;
|
||||
state->tmp_vector.iov_base = (char *) (buf + old_buf_size);
|
||||
state->tmp_vector.iov_len = new_buf_size - old_buf_size;
|
||||
|
||||
subreq = tstream_readv_send(state,
|
||||
state->caller.ev,
|
||||
|
Loading…
Reference in New Issue
Block a user