[Libvir] PATCH: Allow remote driver to handle any connection URI

Daniel P. Berrange berrange at redhat.com
Wed Sep 19 17:49:48 UTC 2007


On Wed, Sep 19, 2007 at 02:51:42PM +0100, Richard W.M. Jones wrote:
> Daniel P. Berrange wrote:
> >On Wed, Sep 19, 2007 at 02:08:33PM +0100, Richard W.M. Jones wrote:
> >>>>/* Must not overlap with virDrvOpenFlags */
> >>>>enum virDrvOpenRemoteFlags {
> >>>>    VIR_DRV_OPEN_REMOTE_RO = (1 << 0),
> >>>>-    VIR_DRV_OPEN_REMOTE_UNIX = (1 << 1),
> >>>>-    VIR_DRV_OPEN_REMOTE_USER = (1 << 2),
> >>>>-    VIR_DRV_OPEN_REMOTE_AUTOSTART = (1 << 3),
> >>>>+    VIR_DRV_OPEN_REMOTE_USER = (1 << 1),
> >>>>+    VIR_DRV_OPEN_REMOTE_AUTOSTART = (1 << 2),
> >>>>};
> >>> I'm just a bit worried about changing those if they end up on the wire
> >>>in some ways. If that's the case then just keep he enum as-is.
> >>I don't really understand the purpose of these flags.  They _do_ go over 
> >>the wire in both the current and proposed implementation, but the remote 
> >>end doesn't interpret them (unless I'm missing something ...?)
> >
> >These flags are only used by remote_internal.c between the methods 
> >remoteOpen,
> >remoteNetworkOpen and the doRemoteOpen call. They don't go over the wire.  
> >
> >NB, not to be confused with 'enum virDrvOpenFlags' which does go over the
> >wire.
> 
> 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.

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  -=| 




More information about the libvir-list mailing list