aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-08-01 14:51:02 +0000
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-08-01 14:51:02 +0000
commit396f929762d10ba2c7b38f7e8a2276dd066be2d7 (patch)
tree373bc53db7a72ddbdc425eb3aff7699b47537df3
parentccf21c31fa2a72f6411275ad3c1992e0371f8156 (diff)
Ask password when encrypted disk image is used (Laurent Vivier)
This patch repairs the management of encrypted disk images and allows to enter the password. Changelog: v2: - move read_password() before do_loadvm() - really start monitor if output is stdio. Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4976 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--console.h1
-rw-r--r--monitor.c8
-rw-r--r--vl.c27
3 files changed, 16 insertions, 20 deletions
diff --git a/console.h b/console.h
index 561ef51bca..e852dd11e3 100644
--- a/console.h
+++ b/console.h
@@ -160,6 +160,7 @@ extern uint8_t _translate_keycode(const int key);
does not need to include console.h */
/* monitor.c */
void monitor_init(CharDriverState *hd, int show_banner);
+void monitor_start_input(void);
void term_puts(const char *str);
void term_vprintf(const char *fmt, va_list ap);
void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
diff --git a/monitor.c b/monitor.c
index fc135caf50..10562d52fc 100644
--- a/monitor.c
+++ b/monitor.c
@@ -76,8 +76,6 @@ static term_cmd_t info_cmds[];
static uint8_t term_outbuf[1024];
static int term_outbuf_index;
-static void monitor_start_input(void);
-
CPUState *mon_cpu = NULL;
void term_flush(void)
@@ -2659,15 +2657,13 @@ static void term_read(void *opaque, const uint8_t *buf, int size)
readline_handle_byte(buf[i]);
}
-static void monitor_start_input(void);
-
static void monitor_handle_command1(void *opaque, const char *cmdline)
{
monitor_handle_command(cmdline);
monitor_start_input();
}
-static void monitor_start_input(void)
+void monitor_start_input(void)
{
readline_start("(qemu) ", 0, monitor_handle_command1, NULL);
}
@@ -2708,8 +2704,6 @@ void monitor_init(CharDriverState *hd, int show_banner)
hide_banner = !show_banner;
qemu_chr_add_handlers(hd, term_can_read, term_read, term_event, NULL);
-
- readline_start("", 0, monitor_handle_command1, NULL);
}
/* XXX: use threads ? */
diff --git a/vl.c b/vl.c
index 218398403f..746742e703 100644
--- a/vl.c
+++ b/vl.c
@@ -5687,7 +5687,7 @@ static int drive_init(struct drive_opt *arg, int snapshot,
bdrv_flags |= BDRV_O_SNAPSHOT;
if (!cache)
bdrv_flags |= BDRV_O_DIRECT;
- if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) {
+ if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) {
fprintf(stderr, "qemu: could not open disk image %s\n",
file);
return -1;
@@ -7975,22 +7975,14 @@ int qemu_key_check(BlockDriverState *bs, const char *name)
return -EPERM;
}
-static BlockDriverState *get_bdrv(int index)
-{
- if (index > nb_drives)
- return NULL;
- return drives_table[index].bdrv;
-}
-
static void read_passwords(void)
{
BlockDriverState *bs;
int i;
- for(i = 0; i < 6; i++) {
- bs = get_bdrv(i);
- if (bs)
- qemu_key_check(bs, bdrv_get_device_name(bs));
+ for(i = 0; i < nb_drives; i++) {
+ bs = drives_table[i].bdrv;
+ qemu_key_check(bs, bdrv_get_device_name(bs));
}
}
@@ -8159,6 +8151,7 @@ int main(int argc, char **argv)
int optind;
const char *r, *optarg;
CharDriverState *monitor_hd;
+ int has_monitor;
const char *monitor_device;
const char *serial_devices[MAX_SERIAL_PORTS];
int serial_device_index;
@@ -9023,6 +9016,8 @@ int main(int argc, char **argv)
}
/* Maintain compatibility with multiple stdio monitors */
+
+ has_monitor = 0;
if (!strcmp(monitor_device,"stdio")) {
for (i = 0; i < MAX_SERIAL_PORTS; i++) {
const char *devname = serial_devices[i];
@@ -9035,6 +9030,7 @@ int main(int argc, char **argv)
break;
}
}
+ has_monitor = 1;
}
if (monitor_device) {
monitor_hd = qemu_chr_open(monitor_device);
@@ -9043,6 +9039,7 @@ int main(int argc, char **argv)
exit(1);
}
monitor_init(monitor_hd, !nographic);
+ has_monitor = 1;
}
for(i = 0; i < MAX_SERIAL_PORTS; i++) {
@@ -9103,12 +9100,16 @@ int main(int argc, char **argv)
}
#endif
+ read_passwords();
+
+ if (has_monitor)
+ monitor_start_input();
+
if (loadvm)
do_loadvm(loadvm);
{
/* XXX: simplify init */
- read_passwords();
if (autostart) {
vm_start();
}