[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] vncpassword support in libxl
Ian Jackson wrote: Gihan Munasinghe writes ("[Xen-devel] [PATCH] vncpassword support in libxl"):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.It looks like a mostly reasonable patch, thanks. However you have made a couple of apparently accidental changes: - libxl_exec(null, logfile_w, logfile_w, + libxl_exec(null, logfile_w, logfile_w, ... - printf("Parsing config file %s\n", config_file); and so on. Done In this case, please resubmit with only the necessary changes. While you're at it, you should probably ensure that you submit a patch which doesn't introduce tabs. I don't mind them but I know some people do. You may want (setq indent-tabs-mode nil) in Emacs. Made the code to use spaces as well New patch attached 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 17:34:45.000000000 +0100 @@ -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,6 +1017,27 @@ 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 */ @@ -1571,6 +1597,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 +1680,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 17:40:44.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)) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |