libcli/smb2: async replies with STATUS_PENDING are not signed
authorStefan Metzmacher <metze@samba.org>
Wed, 13 Aug 2008 07:42:27 +0000 (09:42 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 14 Aug 2008 11:13:49 +0000 (13:13 +0200)
metze

source/libcli/smb2/transport.c

index d9691bec7c5e3b59573a9524bba5f704c7481692..b946a102c87236b3b58db11480a3b3fac7968167 100644 (file)
@@ -235,6 +235,17 @@ static NTSTATUS smb2_transport_finish_recv(void *private, DATA_BLOB blob)
        req->in.body_size = req->in.size - (SMB2_HDR_BODY+NBT_HDR_SIZE);
        req->status       = NT_STATUS(IVAL(hdr, SMB2_HDR_STATUS));
 
+       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);
+               for (i=0; i< req->cancel.do_cancel; i++) {
+                       smb2_cancel(req);
+               }
+               talloc_free(buffer);
+               return NT_STATUS_OK;
+       }
+
        if (req->session && req->session->signing_active) {
                status = smb2_check_signature(&req->in, 
                                              req->session->session_key);
@@ -244,19 +255,6 @@ static NTSTATUS smb2_transport_finish_recv(void *private, DATA_BLOB blob)
                        return status;
                }
        }
-       
-
-       if (NT_STATUS_EQUAL(req->status, STATUS_PENDING)) {
-               if (flags & 0x00000002) {
-                       req->cancel.can_cancel = true;
-                       req->cancel.pending_id = IVAL(hdr, SMB2_HDR_PID);
-                       for (i=0; i< req->cancel.do_cancel; i++) {
-                               smb2_cancel(req);
-                       }
-               }
-               talloc_free(buffer);
-               return NT_STATUS_OK;
-       }
 
        buffer_code = SVAL(req->in.body, 0);
        req->in.body_fixed = (buffer_code & ~1);