From: Ralph Boehme Date: Sun, 28 Oct 2018 01:05:45 +0000 (+0100) Subject: s4:libcli/smb2: reapply request endtime X-Git-Tag: samba-4.8.8~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ae8c5670017dfe7e06d13e9441ad4f9434a378c;p=thirdparty%2Fsamba.git s4:libcli/smb2: reapply request endtime tevent_req_finish() removed a possible request timeout, make sure to reinstall it. This happened when an interim SMB2 response was received. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13667 Signed-off-by: Ralph Boehme Reviewed-by: Volker Lendecke Reviewed-by: Jeremy Allison (cherry picked from commit a6de555c51ca34ef24ac4b4cb672cd748d3197a1) --- diff --git a/source4/libcli/smb2/transport.c b/source4/libcli/smb2/transport.c index 1d08289341b..18cc490be48 100644 --- a/source4/libcli/smb2/transport.c +++ b/source4/libcli/smb2/transport.c @@ -293,7 +293,24 @@ static void smb2_request_done(struct tevent_req *subreq) req->status = smb2cli_req_recv(req->subreq, req, &req->recv_iov, NULL, 0); if (NT_STATUS_EQUAL(req->status, STATUS_PENDING)) { + struct timeval endtime = smbXcli_req_endtime(subreq); + bool ok; + req->cancel.can_cancel = true; + if (timeval_is_zero(&endtime)) { + return; + } + + ok = tevent_req_set_endtime( + subreq, req->transport->ev, endtime); + if (!ok) { + req->status = NT_STATUS_INTERNAL_ERROR; + req->state = SMB2_REQUEST_ERROR; + if (req->async.fn) { + req->async.fn(req); + } + return; + } return; } TALLOC_FREE(req->subreq);