|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl: Set VNC password through QMP
On Wed, 2012-02-08 at 11:49 +0000, Anthony PERARD wrote:
> This patch provide the code to set the VNC password to QEMU upstream through
> VNC. The password is still stored in xenstore but will not be used by QEMU
> upstream.
>
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
>
> ---
> tools/libxl/libxl_create.c | 3 +++
> tools/libxl/libxl_dm.c | 21 ++++++++++++---------
> tools/libxl/libxl_internal.h | 1 +
> tools/libxl/libxl_qmp.c | 37 +++++++++++++++++++++++++++++++++++++
> 4 files changed, 53 insertions(+), 9 deletions(-)
>
> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index ebf2ed7..ae0d668 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -619,6 +619,9 @@ static int do_domain_create(libxl__gc *gc,
> libxl_domain_config *d_config,
> if (dm_info->device_model_version
> == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
> libxl__qmp_initializations(ctx, domid);
> + if (dm_info->vncpasswd) {
> + libxl__qmp_vnc_password(gc, domid, dm_info->vncpasswd);
Is your tree up to date? I thought I'd removed dm_info ;-)
This seems like the sort of thing libxl__qmp_initializations ought to
handle. Perhaps we should pass the domain_config down and do it there?
> + }
> }
> ret = libxl__confirm_device_model_startup(gc, dm_info, dm_starting);
> if (ret < 0) {
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index 97d91b4..6f7d0d5 100644
> --- a/tools/libxl/libxl_dm.c
> +++ b/tools/libxl/libxl_dm.c
> @@ -271,10 +271,8 @@ static char **
> libxl__build_device_model_args_new(libxl__gc *gc,
> if (info->vnc) {
> int display = 0;
> const char *listen = "127.0.0.1";
> + char *vncarg = NULL;
>
> - if (info->vncpasswd && info->vncpasswd[0]) {
> - assert(!"missing code for supplying vnc password to qemu");
> - }
> flexarray_append(dm_args, "-vnc");
>
> if (info->vncdisplay) {
> @@ -287,13 +285,16 @@ static char **
> libxl__build_device_model_args_new(libxl__gc *gc,
> }
>
> if (strchr(listen, ':') != NULL)
> - flexarray_append(dm_args,
> - libxl__sprintf(gc, "%s%s", listen,
> - info->vncunused ? ",to=99" : ""));
> + vncarg = libxl__sprintf(gc, "%s", listen);
> else
> - flexarray_append(dm_args,
> - libxl__sprintf(gc, "%s:%d%s", listen, display,
> - info->vncunused ? ",to=99" : ""));
> + vncarg = libxl__sprintf(gc, "%s:%d", listen, display);
> + if (info->vncpasswd && info->vncpasswd[0]) {
> + vncarg = libxl__sprintf(gc, "%s,password", vncarg);
> + }
> + if (info->vncunused) {
> + vncarg = libxl__sprintf(gc, "%s,to=99", vncarg);
Not new, but I've been meaning to ask: what is to=99 for here? It seems
a bit arbitrary and the default behaviour without it appears to be to
keep looking for an available port which sounds like what we want.
> + }
> + flexarray_append(dm_args, vncarg);
> }
> if (info->sdl) {
> flexarray_append(dm_args, "-sdl");
> @@ -862,6 +863,8 @@ int libxl__create_device_model(libxl__gc *gc,
> }
>
> if (info->vncpasswd) {
> + /* This xenstore key will only be used by qemu-xen-traditionnal.
> + * The code to supply vncpasswd to qemu-xen is later. */
> retry_transaction:
> /* Find uuid and the write the vnc password to xenstore for qemu. */
> t = xs_transaction_start(ctx->xsh);
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index fa7fb16..b33be99 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -592,6 +592,7 @@ _hidden int libxl__qmp_pci_del(libxl__gc *gc, int domid,
> libxl_device_pci *pcidev);
> /* Save current QEMU state into fd. */
> _hidden int libxl__qmp_migrate(libxl__gc *gc, int domid, int fd);
> +_hidden int libxl__qmp_vnc_password(libxl__gc *gc, int domid, char
> *password);
> /* close and free the QMP handler */
> _hidden void libxl__qmp_close(libxl__qmp_handler *qmp);
> /* remove the socket file, if the file has already been removed,
> diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
> index 1777e44..274db19 100644
> --- a/tools/libxl/libxl_qmp.c
> +++ b/tools/libxl/libxl_qmp.c
> @@ -879,6 +879,43 @@ out:
> return rc;
> }
>
> +static int qmp_change(libxl__gc *gc, int domid,
> + char *device, char *target, char *arg)
> +{
> + libxl__qmp_handler *qmp = NULL;
> + flexarray_t *parameters = NULL;
> + libxl_key_value_list args = NULL;
> + int rc = 0;
> +
> + qmp = libxl__qmp_initialize(libxl__gc_owner(gc), domid);
> + if (!qmp)
> + return ERROR_FAIL;
> +
> + parameters = flexarray_make(6, 1);
> + flexarray_append_pair(parameters, "device", device);
> + flexarray_append_pair(parameters, "target", target);
> + if (arg)
> + flexarray_append_pair(parameters, "arg", arg);
> + args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count);
> + if (!args)
> + return ERROR_NOMEM;
> +
> + rc = qmp_synchronous_send(qmp, "change", &args,
> + NULL, NULL, qmp->timeout);
> +
> + flexarray_free(parameters);
> + libxl__qmp_close(qmp);
> + return rc;
> +}
> +
> +int libxl__qmp_vnc_password(libxl__gc *gc, int domid, char *password)
> +{
> + if (!password)
> + return ERROR_FAIL;
> +
> + return qmp_change(gc, domid, "vnc", "password", password);
> +}
> +
> int libxl__qmp_initializations(libxl_ctx *ctx, uint32_t domid)
> {
> libxl__qmp_handler *qmp = NULL;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |