diff options
-rw-r--r-- | libcli/smb/smb2_constants.h | 5 | ||||
-rw-r--r-- | source4/libcli/smb2/cancel.c | 2 | ||||
-rw-r--r-- | source4/libcli/smb2/smb2.h | 6 | ||||
-rw-r--r-- | source4/libcli/smb2/transport.c | 2 | ||||
-rw-r--r-- | source4/torture/smb2/util.c | 1 |
5 files changed, 10 insertions, 6 deletions
diff --git a/libcli/smb/smb2_constants.h b/libcli/smb/smb2_constants.h index a3885f9b7d..6d29d6e9ea 100644 --- a/libcli/smb/smb2_constants.h +++ b/libcli/smb/smb2_constants.h @@ -28,7 +28,7 @@ #define SMB2_HDR_EPOCH 0x06 #define SMB2_HDR_STATUS 0x08 #define SMB2_HDR_OPCODE 0x0c -#define SMB2_HDR_CREDIT 0x0e +#define SMB2_HDR_CREDIT 0x0e #define SMB2_HDR_FLAGS 0x10 #define SMB2_HDR_NEXT_COMMAND 0x14 #define SMB2_HDR_MESSAGE_ID 0x18 @@ -38,6 +38,9 @@ #define SMB2_HDR_SIGNATURE 0x30 /* 16 bytes */ #define SMB2_HDR_BODY 0x40 +/* offsets into header elements for an async SMB2 request */ +#define SMB2_HDR_ASYNC_ID 0x20 + /* header flags */ #define SMB2_HDR_FLAG_REDIRECT 0x01 #define SMB2_HDR_FLAG_ASYNC 0x02 diff --git a/source4/libcli/smb2/cancel.c b/source4/libcli/smb2/cancel.c index 65f02187c1..28ef3099f3 100644 --- a/source4/libcli/smb2/cancel.c +++ b/source4/libcli/smb2/cancel.c @@ -53,7 +53,7 @@ NTSTATUS smb2_cancel(struct smb2_request *r) SIVAL(c->out.hdr, SMB2_HDR_FLAGS, 0x00000002); SSVAL(c->out.hdr, SMB2_HDR_CREDIT, 0x0030); - SIVAL(c->out.hdr, SMB2_HDR_PID, r->cancel.pending_id); + SBVAL(c->out.hdr, SMB2_HDR_ASYNC_ID, r->cancel.async_id); SBVAL(c->out.hdr, SMB2_HDR_MESSAGE_ID, c->seqnum); if (r->session) { SBVAL(c->out.hdr, SMB2_HDR_SESSION_ID, r->session->uid); diff --git a/source4/libcli/smb2/smb2.h b/source4/libcli/smb2/smb2.h index 26b9bcb2a1..aaafedd28f 100644 --- a/source4/libcli/smb2/smb2.h +++ b/source4/libcli/smb2/smb2.h @@ -167,7 +167,7 @@ struct smb2_request { /* each request is in one of 3 possible states */ enum smb2_request_state state; - + struct smb2_transport *transport; struct smb2_session *session; struct smb2_tree *tree; @@ -177,13 +177,13 @@ struct smb2_request { struct { bool do_cancel; bool can_cancel; - uint32_t pending_id; + uint64_t async_id; } cancel; /* the NT status for this request. Set by packet receive code or code detecting error. */ NTSTATUS status; - + struct smb2_request_buffer in; struct smb2_request_buffer out; diff --git a/source4/libcli/smb2/transport.c b/source4/libcli/smb2/transport.c index dffd1acd2b..04b2d38327 100644 --- a/source4/libcli/smb2/transport.c +++ b/source4/libcli/smb2/transport.c @@ -302,7 +302,7 @@ static NTSTATUS smb2_transport_finish_recv(void *private_data, DATA_BLOB blob) if ((flags & SMB2_HDR_FLAG_ASYNC) && NT_STATUS_EQUAL(req->status, STATUS_PENDING)) { req->cancel.can_cancel = true; - req->cancel.pending_id = IVAL(hdr, SMB2_HDR_PID); + req->cancel.async_id = BVAL(hdr, SMB2_HDR_ASYNC_ID); for (i=0; i< req->cancel.do_cancel; i++) { smb2_cancel(req); } diff --git a/source4/torture/smb2/util.c b/source4/torture/smb2/util.c index 96981125c2..8feb96857d 100644 --- a/source4/torture/smb2/util.c +++ b/source4/torture/smb2/util.c @@ -322,6 +322,7 @@ NTSTATUS torture_smb2_testfile(struct smb2_tree *tree, const char *fname, r.in.length = 5; r.in.offset = 0; + // What is the purpose of this? Server returns EOF. smb2_read(tree, tree, &r); return NT_STATUS_OK; |