Exemplo n.º 1
0
/*
  recv a write reply
*/
NTSTATUS smb2_write_recv(struct smb2_request *req, struct smb2_write *io)
{
    if (!smb2_request_receive(req) ||
            smb2_request_is_error(req)) {
        return smb2_request_destroy(req);
    }

    SMB2_CHECK_PACKET_RECV(req, 0x10, true);

    io->out._pad     = SVAL(req->in.body, 0x02);
    io->out.nwritten = IVAL(req->in.body, 0x04);
    io->out.unknown1 = BVAL(req->in.body, 0x08);

    return smb2_request_destroy(req);
}
Exemplo n.º 2
0
/*
  recv a find reply
*/
NTSTATUS smb2_find_recv(struct smb2_request *req, TALLOC_CTX *mem_ctx,
                        struct smb2_find *io)
{
    NTSTATUS status;

    if (!smb2_request_receive(req) ||
            smb2_request_is_error(req)) {
        return smb2_request_destroy(req);
    }

    SMB2_CHECK_PACKET_RECV(req, 0x08, true);

    status = smb2_pull_o16s32_blob(&req->in, mem_ctx,
                                   req->in.body+0x02, &io->out.blob);
    if (!NT_STATUS_IS_OK(status)) {
        return status;
    }

    return smb2_request_destroy(req);
}
Exemplo n.º 3
0
/**
  recv a session setup reply
*/
NTSTATUS smb2_session_setup_recv(struct smb2_request *req, TALLOC_CTX *mem_ctx, 
				 struct smb2_session_setup *io)
{
	NTSTATUS status;

	if (!smb2_request_receive(req) || 
	    (smb2_request_is_error(req) && 
	     !NT_STATUS_EQUAL(req->status, NT_STATUS_MORE_PROCESSING_REQUIRED))) {
		return smb2_request_destroy(req);
	}

	SMB2_CHECK_PACKET_RECV(req, 0x08, true);

	io->out.session_flags = SVAL(req->in.body, 0x02);
	io->out.uid           = BVAL(req->in.hdr,  SMB2_HDR_SESSION_ID);
	
	status = smb2_pull_o16s16_blob(&req->in, mem_ctx, req->in.body+0x04, &io->out.secblob);
	if (!NT_STATUS_IS_OK(status)) {
		smb2_request_destroy(req);
		return status;
	}

	return smb2_request_destroy(req);
}