Ok, attached is an adaptation of Jeremy's initial patch to do this.
The logic for determining which interface to listen on goes like this:
- If 'vnclisten' is set in guest config, use that (can use 0.0.0.0 to
indicate all interfaces)
- If 'vnc-listen' is set in /etc/xen/xend-config.sxp, use that
(again can set it to 0.0.0.0 to listen on all interfaces by
default)
- Else use 127.0.0.1
So, this makes VNC local only by default using 127.0.0.1. Anyone who wants
the old behaviour can just change xend-config.sxp setting...
(vnc-listen '0.0.0.0')
...which will affect all guests without an explicit setting.
Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx>
Regards,
Dan.
------------------------------------------------------------------------
diff -r 593b5623a0d2 tools/examples/xend-config.sxp
--- a/tools/examples/xend-config.sxp Fri Sep 29 15:40:35 2006 +0100
+++ b/tools/examples/xend-config.sxp Fri Sep 29 13:01:11 2006 -0400
@@ -130,3 +130,8 @@
# The tool used for initiating virtual TPM migration
#(external-migration-tool '')
+
+# The interface for VNC servers to listen on. Defaults
+# to 127.0.0.1 To restore old 'listen everywhere' behaviour
+# set this to 0.0.0.0
+#(vnc-listen '127.0.0.1')
diff -r 593b5623a0d2 tools/examples/xmexample.hvm
--- a/tools/examples/xmexample.hvm Fri Sep 29 15:40:35 2006 +0100
+++ b/tools/examples/xmexample.hvm Fri Sep 29 13:01:11 2006 -0400
@@ -132,6 +132,11 @@ vnc=1
vnc=1
#----------------------------------------------------------------------------
+# address that should be listened on for the VNC server if vnc is set.
+# default is to use 'vnc-listen' setting from /etc/xen/xend-config.sxp
+#vnclisten="127.0.0.1"
+
+#----------------------------------------------------------------------------
# set VNC display number, default = domid
#vncdisplay=1
diff -r 593b5623a0d2 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c Fri Sep 29 15:40:35 2006 +0100
+++ b/tools/ioemu/vl.c Fri Sep 29 13:01:11 2006 -0400
@@ -122,6 +122,7 @@ int nographic;
int nographic;
int vncviewer;
int vncunused;
+struct sockaddr_in vnclisten_addr;
const char* keyboard_layout = NULL;
int64_t ticks_per_sec;
char *boot_device = NULL;
@@ -2783,10 +2784,24 @@ fail:
return -1;
}
+int parse_host(struct sockaddr_in *saddr, const char *buf)
+{
+ struct hostent *he;
+
+ if (isdigit(buf[0])) {
+ if (!inet_aton(buf, &saddr->sin_addr))
+ return -1;