Skip to contentSkip to conversation

Two VNC patches

PATCH Chris Webb 2 participants 3 messages Dec 8, 2008 KVM

lore
Share & tools
lore

Chris Webb

author
#0 lore raw

I sent this pair of VNC-related patches to the qemu-devel list a couple of weeks back and I'm not sure whether they've got lost in the cracks or were in some way not acceptable and need fixing up.

The first one is a straightforward bug-fix, and the second is a trivial convenience feature in the monitor which I imagine ought to be fairly uncontroversial?

Cheers,

Chris.

Fix off-by-one bug limiting VNC passwords to 7 characters instead of 8

monitor_readline expects buf_size to include the terminating \0, but do_change_vnc in monitor.c calls it as though it doesn't. The other site where monitor_readline reads a password (in vl.c) passes the buffer length correctly.

---
 monitor.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
monitor.c +1 -2
index 22360fc..a252838 100644
@@ -433,8 +433,7 @@ static void do_change_vnc(const char *target)
     if (strcmp(target, "passwd") == 0 ||
 	strcmp(target, "password") == 0) {
 	char password[9];
-	monitor_readline("Password: ", 1, password, sizeof(password)-1);
-	password[sizeof(password)-1] = '\0';
+	monitor_readline("Password: ", 1, password, sizeof(password));
 	if (vnc_display_password(NULL, password) < 0)
 	    term_printf("could not set VNC server password\n");
     } else {

Accept password as an argument to 'change vnc password' monitor command

This allows easier use of the change vnc password monitor command from management scripts, without having to implement expect(1)-like behaviour.

---
 monitor.c     |   14 +++++++++-----
 qemu-doc.texi |    8 ++++----
 2 files changed, 13 insertions(+), 9 deletions(-)
monitor.c +9 -5
index a252838..f6a2783 100644
@@ -428,12 +428,16 @@ static void do_change_block(const char *device, const char *filename, const char
     qemu_key_check(bs, filename);
 }
 
-static void do_change_vnc(const char *target)
+static void do_change_vnc(const char *target, const char *arg)
 {
     if (strcmp(target, "passwd") == 0 ||
 	strcmp(target, "password") == 0) {
 	char password[9];
-	monitor_readline("Password: ", 1, password, sizeof(password));
+	if (arg) {
+	    strncpy(password, arg, sizeof(password));
+	    password[sizeof(password) - 1] = '\0';
+	} else
+	    monitor_readline("Password: ", 1, password, sizeof(password));
 	if (vnc_display_password(NULL, password) < 0)
 	    term_printf("could not set VNC server password\n");
     } else {
@@ -442,12 +446,12 @@ static void do_change_vnc(const char *target)
     }
 }
 
-static void do_change(const char *device, const char *target, const char *fmt)
+static void do_change(const char *device, const char *target, const char *arg)
 {
     if (strcmp(device, "vnc") == 0) {
-	do_change_vnc(target);
+	do_change_vnc(target, arg);
     } else {
-	do_change_block(device, target, fmt);
+	do_change_block(device, target, arg);
     }
 }
 
qemu-doc.texi +4 -4
index 1735d92..ca3b181 100644
@@ -1233,11 +1233,11 @@ and @var{options} are described at @ref{sec_invocation}. eg
 (qemu) change vnc localhost:1
 @end example
 
-@item change vnc password
+@item change vnc password [@var{password}]
 
-Change the password associated with the VNC server. The monitor will prompt for
-the new password to be entered. VNC passwords are only significant upto 8 letters.
-eg.
+Change the password associated with the VNC server. If the new password is not
+supplied, the monitor will prompt for it to be entered. VNC passwords are only
+significant up to 8 letters. eg
 
 @example
 (qemu) change vnc password
#1 lore raw

Hey Chris,

Am Montag, den 08.12.2008, 13:56 +0000 schrieb Chris Webb:

Quoted 3 lines

I sent this pair of VNC-related patches to the qemu-devel list a couple of weeks back and I'm not sure whether they've got lost in the cracks or were in some way not acceptable and need fixing up.

Can you resend them as inline patches?

Cheers fabian

Quoted 111 lines

The first one is a straightforward bug-fix, and the second is a trivial convenience feature in the monitor which I imagine ought to be fairly uncontroversial?

Cheers,

Chris.
E-Mail-Nachricht-Anlage

Quoted 20 lines

-------- Weitergeleitete Nachricht --------

Fix off-by-one bug limiting VNC passwords to 7 characters instead of 8

monitor_readline expects buf_size to include the terminating \0, but do_change_vnc in monitor.c calls it as though it doesn't. The other site where monitor_readline reads a password (in vl.c) passes the buffer length correctly.

---
 monitor.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
monitor.c +0 -0
index 22360fc..a252838 100644

monitor.c static void do_change_vnc(const char *target) · line 439

Quoted 9 lines
monitor.c +1 -2
@@ -433,8 +433,7 @@ static void do_change_vnc(const char *target)
     if (strcmp(target, "passwd") == 0 ||
 	strcmp(target, "password") == 0) {
 	char password[9];
-	monitor_readline("Password: ", 1, password, sizeof(password)-1);
-	password[sizeof(password)-1] = '\0';
+	monitor_readline("Password: ", 1, password, sizeof(password));
 	if (vnc_display_password(NULL, password) < 0)
 	    term_printf("could not set VNC server password\n");
     } else {

E-Mail-Nachricht-Anlage

Quoted 73 lines

-------- Weitergeleitete Nachricht --------

Accept password as an argument to 'change vnc password' monitor command

This allows easier use of the change vnc password monitor command from management scripts, without having to implement expect(1)-like behaviour.

---
 monitor.c     |   14 +++++++++-----
 qemu-doc.texi |    8 ++++----
 2 files changed, 13 insertions(+), 9 deletions(-)
monitor.c +9 -5
index a252838..f6a2783 100644
@@ -428,12 +428,16 @@ static void do_change_block(const char *device, const char *filename, const char
     qemu_key_check(bs, filename);
 }
 
-static void do_change_vnc(const char *target)
+static void do_change_vnc(const char *target, const char *arg)
 {
     if (strcmp(target, "passwd") == 0 ||
 	strcmp(target, "password") == 0) {
 	char password[9];
-	monitor_readline("Password: ", 1, password, sizeof(password));
+	if (arg) {
+	    strncpy(password, arg, sizeof(password));
+	    password[sizeof(password) - 1] = '\0';
+	} else
+	    monitor_readline("Password: ", 1, password, sizeof(password));
 	if (vnc_display_password(NULL, password) < 0)
 	    term_printf("could not set VNC server password\n");
     } else {
@@ -442,12 +446,12 @@ static void do_change_vnc(const char *target)
     }
 }
 
-static void do_change(const char *device, const char *target, const char *fmt)
+static void do_change(const char *device, const char *target, const char *arg)
 {
     if (strcmp(device, "vnc") == 0) {
-	do_change_vnc(target);
+	do_change_vnc(target, arg);
     } else {
-	do_change_block(device, target, fmt);
+	do_change_block(device, target, arg);
     }
 }
 
qemu-doc.texi +4 -4
index 1735d92..ca3b181 100644
@@ -1233,11 +1233,11 @@ and @var{options} are described at @ref{sec_invocation}. eg
 (qemu) change vnc localhost:1
 @end example
 
-@item change vnc password
+@item change vnc password [@var{password}]
 
-Change the password associated with the VNC server. The monitor will prompt for
-the new password to be entered. VNC passwords are only significant upto 8 letters.
-eg.
+Change the password associated with the VNC server. If the new password is not
+supplied, the monitor will prompt for it to be entered. VNC passwords are only
+significant up to 8 letters. eg
 
 @example
 (qemu) change vnc password
author
#2 lore raw
Quoted 1 line · Fabian Deutsch

Can you resend them as inline patches?

Sure, no problem: I've resent the original messages which had the patches inline.

Best wishes,

Chris.