
On Wed, Sep 19, 2007 at 06:49:48PM +0100, Daniel P. Berrange wrote:
On Wed, Sep 19, 2007 at 02:51:42PM +0100, Richard W.M. Jones wrote:
Are you sure they don't go over the wire? My reading of doRemoteOpen suggests that they do:
static int doRemoteOpen (virConnectPtr conn, struct private_data *priv, const char *uri_str, int flags) { // bunch of code which reads 'flags' but never modifies it
/* Finally we can call the remote side's open function. */ remote_open_args args = { &name, flags };
if (call (conn, priv, 1, REMOTE_PROC_OPEN, (xdrproc_t) xdr_remote_open_args, (char *) &args, (xdrproc_t) xdr_void, (char *) NULL) == -1) goto failed;
and the 'call' function just serialises whatever is in the args array. But at this point flags could contain VIR_DRV_OPEN_REMOTE_* flags.
Unless I'm reading this code wrong ...
Yep that's a bug - we're passing bogus data to the server. Fortunately its not checking any flag except _RO, but I'll fix this & repost.
Here's a tweaked patch which explicitly only passes through the _RO flag to the remote_open_args. Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|