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.
Signed-off-by: Chris Webb <chris@arachsys.com>
---
monitor.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/monitor.c b/monitor.c
index 22360fc..6ae5729 100644
--- a/monitor.c
+++ b/monitor.c
@@ -433,7 +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);
+ monitor_readline("Password: ", 1, password, sizeof(password));
password[sizeof(password)-1] = '\0';
if (vnc_display_password(NULL, password) < 0)
term_printf("could not set VNC server password\n");
--
The next line can go as well, the string is already NULL terminated. Thiemo --
You're quite right. I'll update the two patches to reflect this change. 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.
Signed-off-by: Chris Webb <chris@arachsys.com>
---
monitor.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/monitor.c b/monitor.c
index 22360fc..a252838 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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.
Signed-off-by: Chris Webb <chris@arachsys.com>
---
monitor.c | 14 +++++++++-----
qemu-doc.texi | 8 ++++----
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/monitor.c b/monitor.c
index a252838..f6a2783 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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);
}
}
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 1735d92..ca3b181 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -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 ...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.
Signed-off-by: Chris Webb <chris@arachsys.com>
---
monitor.c | 14 +++++++++-----
qemu-doc.texi | 8 ++++----
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/monitor.c b/monitor.c
index a252838..f6a2783 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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);
}
}
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 1735d92..ca3b181 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -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 ...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.
Signed-off-by: Chris Webb <chris@arachsys.com>
---
monitor.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/monitor.c b/monitor.c
index 22360fc..a252838 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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 {
--
Applied. Thanks. Regards, Anthony Liguori --
