[libvirt] [PATCHv2 2/6] event: server RPC protocol tweaks for domain lifecycle events

Daniel P. Berrange berrange at redhat.com
Tue Feb 11 15:57:51 UTC 2014


On Wed, Jan 29, 2014 at 10:49:22AM -0700, Eric Blake wrote:
> This patch adds some new RPC call numbers, but for ease of review,
> they sit idle until a later patch adds the client counterpart to
> drive the new RPCs.  Also for ease of review, I limited this patch
> to just the lifecycle event; although converting the remaining
> 15 domain events will be quite mechanical.  On the server side,
> we have to have a function per RPC call, largely with duplicated
> bodies (the key difference being that we store in our callback
> opaque pointer whether events should be fired with old or new
> style); meanwhile, a single function can drive multiple RPC
> messages, along with a strategic choice of XDR struct layout,
> makes the event generation code for both styles fairly compact.
> 
> I debated about adding a tri-state witness variable per
> connection (values 'unknown', 'legacy', 'modern').  It would start
> as 'unknown', move to 'legacy' if any RPC call is made to a legacy
> event call, and move to 'modern' if the feature probe is made;
> then the event code could issue an error if the witness state is
> incorrect (a legacy RPC call while in 'modern', a modern RPC call
> while in 'unknown' or 'legacy', and a feature probe while in
> 'legacy' or 'modern').  But while it might prevent odd behavior
> caused by protocol fuzzing, I don't see that it would prevent
> any security holes, so I considered it bloat.
> 
> * src/libvirt_internal.h (VIR_DRV_FEATURE_REMOTE_EVENT_CALLBACK):
> New feature.
> * src/remote/remote_protocol.x
> (REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_REGISTER_ANY)
> (REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_DEREGISTER_ANY)
> (REMOTE_PROC_DOMAIN_EVENT_CALLBACK_LIFECYCLE): New RPCs.
> * daemon/remote.c (daemonClientCallback): Add field.
> (remoteDispatchConnectDomainEventCallbackRegisterAny)
> (remoteDispatchConnectDomainEventCallbackDeregisterAny): New
> functions.
> (remoteDispatchConnectDomainEventRegisterAny)
> (remoteDispatchConnectDomainEventDeregisterAny): Mark legacy use.
> (remoteRelayDomainEventLifecycle): Change message based on legacy
> or new use.
> (remoteDispatchConnectSupportsFeature): Advertise new feature.
> * src/remote_protocol-structs: Regenerate.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  daemon/remote.c              | 173 ++++++++++++++++++++++++++++++++++++++++---
>  src/libvirt_internal.h       |   7 +-
>  src/remote/remote_protocol.x |  39 +++++++++-
>  src/remote_protocol-structs  |  17 +++++
>  4 files changed, 225 insertions(+), 11 deletions(-)

ACK



> @@ -5068,5 +5085,25 @@ enum remote_procedure {
>       * @generate: both
>       * @acl: none
>       */
> -    REMOTE_PROC_NETWORK_EVENT_LIFECYCLE = 315
> +    REMOTE_PROC_NETWORK_EVENT_LIFECYCLE = 315,
> +
> +    /**
> +     * @generate: none
> +     * @priority: high
> +     * @acl: none
> +     */
> +    REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_REGISTER_ANY = 316,
> +
> +    /**
> +     * @generate: none
> +     * @priority: high
> +     * @acl: none
> +     */
> +    REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_DEREGISTER_ANY = 317,

I believe these ACLs need to be non-none now

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list