nbd: Tolerate more errors to structured reply request
commit5de47735c79a030edc3e6258ab5476b630c61765
authorEric Blake <eblake@redhat.com>
Sat, 24 Aug 2019 17:28:13 +0000 (24 12:28 -0500)
committerEric Blake <eblake@redhat.com>
Thu, 5 Sep 2019 20:57:37 +0000 (5 15:57 -0500)
tree82a973c886ff32e2c72a5923b2670e100d67f153
parentdf18c04edf57b55737ed5125bffe71a8196938a0
nbd: Tolerate more errors to structured reply request

A server may have a reason to reject a request for structured replies,
beyond just not recognizing them as a valid request; similarly, it may
have a reason for rejecting a request for a meta context.  It doesn't
hurt us to continue talking to such a server; otherwise 'qemu-nbd
--list' of such a server fails to display all available details about
the export.

Encountered when temporarily tweaking nbdkit to reply with
NBD_REP_ERR_POLICY.  Present since structured reply support was first
added (commit d795299b reused starttls handling, but starttls is
different in that we can't fall back to other behavior on any error).

Note that for an unencrypted client trying to connect to a server that
requires encryption, this defers the point of failure to when we
finally execute a strict command (such as NBD_OPT_GO or NBD_OPT_LIST),
now that the intermediate NBD_OPT_STRUCTURED_REPLY does not diagnose
NBD_REP_ERR_TLS_REQD as fatal; but as the protocol eventually gets us
to a command where we can't continue onwards, the changed error
message doesn't cause any security concerns.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20190824172813.29720-3-eblake@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
[eblake: fix iotest 233]
nbd/client.c
nbd/trace-events
tests/qemu-iotests/233.out