[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-tools] [PATCH] vncpassword support in libxl
On Thu, May 06, 2010 at 04:18:47PM +0100, Gihan Munasinghe wrote: > Guys > > When trying to move xen4.0 and libxl I found that libxl does not support > vncpassword with in the device model. > Was there are particular reason this feature is not implemented . To get > our vms ported in to xen4 and to change our management stack to use > libxl. I have done the following patch what do you guys think. > I think you should send this patch to xen-devel. -- Pasi > Thanks > Gihan > diff -Naur vanila/xen-4.0.0/tools/libxl/libxl.c xen-4.0.0/tools/libxl/libxl.c > --- vanila/xen-4.0.0/tools/libxl/libxl.c 2010-04-07 17:12:04.000000000 > +0100 > +++ xen-4.0.0/tools/libxl/libxl.c 2010-05-06 15:38:02.000000000 +0100 > @@ -186,7 +186,7 @@ > if (info->hvm) { > ret = build_hvm(ctx, domid, info, state); > if (ret) goto out; > - > + > vments = libxl_calloc(ctx, 5, sizeof(char *)); > vments[0] = "rtc/timeoffset"; > vments[1] = (info->u.hvm.timeoffset) ? info->u.hvm.timeoffset : ""; > @@ -663,7 +663,11 @@ > flexarray_set(dm_args, num++, "-vnc"); > if (info->vncdisplay) { > if (info->vnclisten && strchr(info->vnclisten, ':') == NULL) { > - flexarray_set(dm_args, num++, libxl_sprintf(ctx, "%s:%d", > info->vnclisten, info->vncdisplay)); > + if(info->vncpasswd){ > + flexarray_set(dm_args, num++, libxl_sprintf(ctx, > "%s:%d,password", info->vnclisten, info->vncdisplay)); > + }else{ > + flexarray_set(dm_args, num++, libxl_sprintf(ctx, "%s:%d", > info->vnclisten, info->vncdisplay)); > + } > } else { > flexarray_set(dm_args, num++, libxl_sprintf(ctx, > "127.0.0.1:%d", info->vncdisplay)); > } > @@ -786,6 +790,7 @@ > vfb->vnclisten = info->vnclisten; > vfb->vncdisplay = info->vncdisplay; > vfb->vncunused = info->vncunused; > + vfb->vncpasswd = info->vncpasswd; > vfb->keymap = info->keymap; > vfb->sdl = info->sdl; > vfb->opengl = info->opengl; > @@ -1012,10 +1017,32 @@ > p->dom_path = libxl_xs_get_dompath(ctx, info->domid); > if (!p->dom_path) { libxl_free(ctx, p); return ERROR_FAIL; } > > + xs_transaction_t t; > + char *vm_path; > + char **pass_stuff; > + if(info->vncpasswd){ > + retry_transaction: > + //Supporting vnc password > + // Need to find uuid and the write the vnc password to xenstore so that > qemu can pick it up > + t = xs_transaction_start(ctx->xsh); > + vm_path = libxl_xs_read(ctx,t,libxl_sprintf(ctx, "%s/vm", > p->dom_path)); > + if(vm_path){ > + //Now write the vncpassword in to it > + pass_stuff = libxl_calloc(ctx, 2, sizeof(char *)); > + pass_stuff[0] = "vncpasswd"; > + pass_stuff[1] = info->vncpasswd; > + libxl_xs_writev(ctx,t,vm_path,pass_stuff); > + if (!xs_transaction_end(ctx->xsh, t, 0)) > + if (errno == EAGAIN) > + goto retry_transaction; > + } > + > + } > + > rc = libxl_spawn_spawn(ctx, p, "device model", dm_xenstore_record_pid); > if (rc < 0) goto xit; > if (!rc) { /* inner child */ > - libxl_exec(null, logfile_w, logfile_w, > + libxl_exec(null, logfile_w, logfile_w, > info->device_model, args); > } > > @@ -1571,6 +1598,8 @@ > info->vnclisten = libxl_sprintf(ctx, "%s", vfb->vnclisten); > info->vncdisplay = vfb->vncdisplay; > info->vncunused = vfb->vncunused; > + if(vfb->vncpasswd) > + info->vncpasswd = vfb->vncpasswd; > if (vfb->keymap) > info->keymap = libxl_sprintf(ctx, "%s", vfb->keymap); > info->sdl = vfb->sdl; > @@ -1652,6 +1681,8 @@ > flexarray_set(back, boffset++, libxl_sprintf(ctx, "%d", vfb->vnc)); > flexarray_set(back, boffset++, "vnclisten"); > flexarray_set(back, boffset++, vfb->vnclisten); > + flexarray_set(back, boffset++, "vncpasswd"); > + flexarray_set(back, boffset++, vfb->vncpasswd); > flexarray_set(back, boffset++, "vncdisplay"); > flexarray_set(back, boffset++, libxl_sprintf(ctx, "%d", > vfb->vncdisplay)); > flexarray_set(back, boffset++, "vncunused"); > diff -Naur vanila/xen-4.0.0/tools/libxl/libxl.h xen-4.0.0/tools/libxl/libxl.h > --- vanila/xen-4.0.0/tools/libxl/libxl.h 2010-04-07 17:12:04.000000000 > +0100 > +++ xen-4.0.0/tools/libxl/libxl.h 2010-05-06 14:59:28.000000000 +0100 > @@ -128,6 +128,7 @@ > bool stdvga; /* stdvga enabled or disabled */ > bool vnc; /* vnc enabled or disabled */ > char *vnclisten; /* address:port that should be listened on for the VNC > server if vnc is set */ > + char *vncpasswd; /* the VNC password */ > int vncdisplay; /* set VNC display number */ > bool vncunused; /* try to find an unused port for the VNC server */ > char *keymap; /* set keyboard layout, default is en-us keyboard */ > @@ -149,6 +150,7 @@ > int devid; > bool vnc; /* vnc enabled or disabled */ > char *vnclisten; /* address:port that should be listened on for the VNC > server if vnc is set */ > + char *vncpasswd; /* the VNC password */ > int vncdisplay; /* set VNC display number */ > bool vncunused; /* try to find an unused port for the VNC server */ > char *keymap; /* set keyboard layout, default is en-us keyboard */ > diff -Naur vanila/xen-4.0.0/tools/libxl/xl.c xen-4.0.0/tools/libxl/xl.c > --- vanila/xen-4.0.0/tools/libxl/xl.c 2010-04-07 17:12:04.000000000 +0100 > +++ xen-4.0.0/tools/libxl/xl.c 2010-05-06 15:32:57.000000000 +0100 > @@ -561,6 +561,8 @@ > (*vfbs)[*num_vfbs].vnc = atoi(p2 + 1); > } else if (!strcmp(p, "vnclisten")) { > (*vfbs)[*num_vfbs].vnclisten = strdup(p2 + 1); > + } else if (!strcmp(p, "vncpasswd")) { > + (*vfbs)[*num_vfbs].vncpasswd = strdup(p2 + 1); > } else if (!strcmp(p, "vncdisplay")) { > (*vfbs)[*num_vfbs].vncdisplay = atoi(p2 + 1); > } else if (!strcmp(p, "vncunused")) { > @@ -639,6 +641,8 @@ > dm_info->vnc = l; > if (!xlu_cfg_get_string (config, "vnclisten", &buf)) > dm_info->vnclisten = strdup(buf); > + if (!xlu_cfg_get_string (config, "vncpasswd", &buf)) > + dm_info->vncpasswd = strdup(buf); > if (!xlu_cfg_get_long (config, "vncdisplay", &l)) > dm_info->vncdisplay = l; > if (!xlu_cfg_get_long (config, "vncunused", &l)) > @@ -697,7 +701,6 @@ > libxl_waiter *w1 = NULL, *w2 = NULL; > memset(&dm_info, 0x00, sizeof(dm_info)); > > - printf("Parsing config file %s\n", config_file); > parse_config_file(config_file, &info1, &info2, &disks, &num_disks, > &vifs, &num_vifs, &pcidevs, &num_pcidevs, &vfbs, &num_vfbs, &vkbs, &num_vkbs, > &dm_info); > if (debug) > printf_info(&info1, &info2, disks, num_disks, vifs, num_vifs, > pcidevs, num_pcidevs, vfbs, num_vfbs, vkbs, num_vkbs, &dm_info); > @@ -718,12 +721,14 @@ > return; > } > > + > if (!restore_file || !need_daemon) { > if (dm_info.saved_state) { > free(dm_info.saved_state); > dm_info.saved_state = NULL; > } > ret = libxl_domain_build(&ctx, &info2, domid, &state); > + > } else { > int restore_fd; > > _______________________________________________ > Xen-tools mailing list > Xen-tools@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-tools _______________________________________________ Xen-tools mailing list Xen-tools@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-tools
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |