WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] vncpassword support in libxl

To: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] vncpassword support in libxl
From: Gihan Munasinghe <GMunasinghe@xxxxxxxxxxxx>
Date: Thu, 06 May 2010 20:48:47 +0100
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Thu, 06 May 2010 12:50:02 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <19426.59726.296401.555607@xxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4BE2D9B9.8010908@xxxxxxxxxxxx> <4BE2E434.6040001@xxxxxxxxxxxx> <19426.59726.296401.555607@xxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.24 (Macintosh/20100228)
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