[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