[libvirt] [PATCH v3 2/2] domain_conf: add "default" to list of valid spice channels

Alon Levy alevy at redhat.com
Tue May 8 19:10:34 UTC 2012


On Tue, May 08, 2012 at 12:19:45PM -0600, Eric Blake wrote:
> On 05/08/2012 11:42 AM, Alon Levy wrote:
> > qemu's behavior in this case is to change the spice server behavior to
> > require secure connection to any channel not otherwise specified as
> > being in plaintext mode. libvirt doesn't currently allow requesting this
> > (via plaintext-channel=<channel name>).
> > 
> > RHBZ: 819499
> > 
> > Signed-off-by: Alon Levy <alevy at redhat.com>
> > ---
> >  docs/formatdomain.html.in                          |    3 +++
> >  docs/schemas/domaincommon.rng                      |    9 +++++++++
> >  src/conf/domain_conf.c                             |   20 ++++++++++++++++++++
> >  src/conf/domain_conf.h                             |    1 +
> >  src/qemu/qemu_command.c                            |   13 +++++++++++++
> >  .../qemuxml2argv-graphics-spice.args               |    2 +-
> >  .../qemuxml2argv-graphics-spice.xml                |    2 +-
> >  7 files changed, 48 insertions(+), 2 deletions(-)
> 
> Definitely more code, but I think I like it better.  In particular,
> 
> > 
> > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> > index 0525577..c0268b2 100644
> > --- a/docs/formatdomain.html.in
> > +++ b/docs/formatdomain.html.in
> > @@ -2929,6 +2929,9 @@ qemu-kvm -net nic,model=? /dev/null
> >                <span class="since">Since 0.9.3</span>
> >                NB, this may not be supported by all hypervisors.
> >                <span class="since">"spice" since 0.8.6</span>.
> > +              The <code>defaultMode</code> attribute sets the default channel
> > +              security policy, valid values are <code>secure</code>,
> > +              <code>insecure</code> and the default <code>any</code>.
> 
> I didn't realize that 'any' was different!  Having a defaultMode call it
> out makes sense now, given this matrix:
> 
>                    insecure   any        secure
> tls available      plaintext  tls        tls
> tls disabled       plaintext  plaintext  error
> 
> And it also makes sense to the qemu command line - you can only specify
> plaintext or tls to lock a channel to a particular mode; if you omit the
> specification, then the mode defaults to the best available (according
> to whether tls is available).

Your table is correct and a good summary. But to be clear the "any"
value is not a valid value to put in qemu's command line, it's the
internal default state (actually it's oring of the two valid channel
modes, insecure and secure). But it behaves exactly like your table
explains, i.e. not setting tls-channel=default or
plaintext-channel=default results in the middle column, setting
tls-channel=default in the right, and plaintext-channel=default in the
left. You could have expanded the table because it's also possible to
start spice with only tls-port set, and no port, then you would get the
reverse of the right column:

                     insecure   any        secure
both                 plaintext  tls        tls
only clear           plaintext  plaintext  error
only tls             error      plaintext  tls

> 
> Missing a <span>since</span> notation; I've added that.
> 
> > @@ -12124,6 +12140,10 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
> >              virBufferEscapeString(buf, " keymap='%s'",
> >                                    def->data.spice.keymap);
> >  
> > +        if (def->data.spice.defaultMode != VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY)
> > +            virBufferAsprintf(buf, " defaultMode='%s'",
> > +              virDomainGraphicsSpiceChannelModeTypeToString(def->data.spice.defaultMode));
> 
> This means we don't output the user's explicit defaultMode='any'.  It's
> easy enough to fix by making the enum have four values instead of three
> (the fourth value, 'default', is value 0 and not valid in XML, as the
> placeholder for no attribute present, but otherwise behaves like 'any').
>  Then again, you matched the style of the individual channels, so I
> won't bother changing it.
> 
> > +++ b/src/conf/domain_conf.h
> > @@ -1233,6 +1233,7 @@ struct _virDomainGraphicsDef {
> >              virDomainGraphicsAuthDef auth;
> >              unsigned int autoport :1;
> >              int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST];
> > +            int defaultMode;
> 
> I like to add a comment to the enum values that are valid in this field.
> 
> ACK; I squashed this in, then pushed:

Looks good.

> 
> diff --git i/docs/formatdomain.html.in w/docs/formatdomain.html.in
> index 816af41..1478832 100644
> --- i/docs/formatdomain.html.in
> +++ w/docs/formatdomain.html.in
> @@ -2931,7 +2931,11 @@ qemu-kvm -net nic,model=? /dev/null
>                <span class="since">"spice" since 0.8.6</span>.
>                The <code>defaultMode</code> attribute sets the default
> channel
>                security policy, valid values are <code>secure</code>,
> -              <code>insecure</code> and the default <code>any</code>.
> +              <code>insecure</code> and the default <code>any</code>
> +              (which is secure if possible, but falls back to insecure
> +              rather than erroring out if no secure path is
> +              available). <span class="since">"defaultMode" since
> +              0.9.12</span>.
>              </p>
>              <p>
>                When SPICE has both a normal and TLS secured TCP port
> diff --git i/src/conf/domain_conf.h w/src/conf/domain_conf.h
> index 895ddc4..00178e1 100644
> --- i/src/conf/domain_conf.h
> +++ w/src/conf/domain_conf.h
> @@ -1233,7 +1233,7 @@ struct _virDomainGraphicsDef {
>              virDomainGraphicsAuthDef auth;
>              unsigned int autoport :1;
>              int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST];
> -            int defaultMode;
> +            int defaultMode; /* enum virDomainGraphicsSpiceChannelMode */
>              int image;
>              int jpeg;
>              int zlib;
> 
> -- 
> Eric Blake   eblake at redhat.com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
> 





More information about the libvir-list mailing list