diff options
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 76 |
1 files changed, 23 insertions, 53 deletions
@@ -201,6 +201,7 @@ ram_addr_t ram_size; int nb_nics; NICInfo nd_table[MAX_NICS]; int vm_running; +static int autostart; static int rtc_utc = 1; static int rtc_date_offset = -1; /* -1 means no change */ int cirrus_vga_enabled = 1; @@ -2607,11 +2608,13 @@ int drive_init(struct drive_opt *arg, int snapshot, void *opaque) bdrv_flags |= BDRV_O_CACHE_WB; else if (cache == 3) /* not specified */ bdrv_flags |= BDRV_O_CACHE_DEF; - 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; } + if (bdrv_key_required(bdrv)) + autostart = 0; return drives_table_idx; } @@ -2658,7 +2661,7 @@ int usb_device_add_dev(USBDevice *dev) return 0; } -static int usb_device_add(const char *devname) +static int usb_device_add(const char *devname, int is_hotplug) { const char *p; USBDevice *dev; @@ -2675,7 +2678,18 @@ static int usb_device_add(const char *devname) } else if (!strcmp(devname, "keyboard")) { dev = usb_keyboard_init(); } else if (strstart(devname, "disk:", &p)) { - dev = usb_msd_init(p); + BlockDriverState *bs; + + dev = usb_msd_init(p, &bs); + if (!dev) + return -1; + if (bdrv_key_required(bs)) { + autostart = 0; + if (is_hotplug && monitor_read_bdrv_key(bs) < 0) { + dev->handle_destroy(dev); + return -1; + } + } } else if (!strcmp(devname, "wacom-tablet")) { dev = usb_wacom_init(); } else if (strstart(devname, "serial:", &p)) { @@ -2756,7 +2770,7 @@ static int usb_device_del(const char *devname) void do_usb_add(const char *devname) { - usb_device_add(devname); + usb_device_add(devname, 1); } void do_usb_del(const char *devname) @@ -4334,45 +4348,6 @@ static const QEMUOption qemu_options[] = { { NULL }, }; -/* password input */ - -int qemu_key_check(BlockDriverState *bs, const char *name) -{ - char password[256]; - int i; - - if (!bdrv_is_encrypted(bs)) - return 0; - - term_printf("%s is encrypted.\n", name); - for(i = 0; i < 3; i++) { - monitor_readline("Password: ", 1, password, sizeof(password)); - if (bdrv_set_key(bs, password) == 0) - return 0; - term_printf("invalid password\n"); - } - 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)); - } -} - #ifdef HAS_AUDIO struct soundhw soundhw[] = { #ifdef HAS_AUDIO_CHOICE @@ -4639,7 +4614,6 @@ int main(int argc, char **argv, char **envp) int fds[2]; int tb_size; const char *pid_file = NULL; - int autostart; const char *incoming = NULL; int fd = 0; struct passwd *pwd = NULL; @@ -4696,7 +4670,7 @@ int main(int argc, char **argv, char **envp) kernel_cmdline = ""; cyls = heads = secs = 0; translation = BIOS_ATA_TRANSLATION_AUTO; - monitor_device = "vc"; + monitor_device = "vc:80Cx24C"; serial_devices[0] = "vc:80Cx24C"; for(i = 1; i < MAX_SERIAL_PORTS; i++) @@ -5637,7 +5611,7 @@ int main(int argc, char **argv, char **envp) /* init USB devices */ if (usb_enabled) { for(i = 0; i < usb_devices_index; i++) { - if (usb_device_add(usb_devices[i]) < 0) { + if (usb_device_add(usb_devices[i], 0) < 0) { fprintf(stderr, "Warning: could not add USB device %s\n", usb_devices[i]); } @@ -5693,6 +5667,7 @@ int main(int argc, char **argv, char **envp) } text_consoles_set_display(display_state); + qemu_chr_initial_reset(); if (monitor_device && monitor_hd) monitor_init(monitor_hd, !nographic); @@ -5747,13 +5722,8 @@ int main(int argc, char **argv, char **envp) qemu_start_incoming_migration(incoming); } - { - /* XXX: simplify init */ - read_passwords(); - if (autostart) { - vm_start(); - } - } + if (autostart) + vm_start(); if (daemonize) { uint8_t status = 0; |