From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KcbPu-00021a-U7 for qemu-devel@nongnu.org; Mon, 08 Sep 2008 03:44:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KcbPs-00021K-EW for qemu-devel@nongnu.org; Mon, 08 Sep 2008 03:44:09 -0400 Received: from [199.232.76.173] (port=55657 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KcbPs-00021H-8D for qemu-devel@nongnu.org; Mon, 08 Sep 2008 03:44:08 -0400 Received: from mx20.gnu.org ([199.232.41.8]:44399) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KcbPr-0005ud-H7 for qemu-devel@nongnu.org; Mon, 08 Sep 2008 03:44:07 -0400 Received: from ecfrec.frec.bull.fr ([129.183.4.8]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KcbPK-0008Qr-63 for qemu-devel@nongnu.org; Mon, 08 Sep 2008 03:43:34 -0400 Subject: Re: [Qemu-devel] [PATCH] Correct the password prompt management. From: Laurent Vivier In-Reply-To: <48C46EEA.2040000@codemonkey.ws> References: <1220344407.4174.4.camel@frecb07144> <48C46EEA.2040000@codemonkey.ws> Content-Type: multipart/mixed; boundary="=-bBos6yisgIeVZIl1tX89" Date: Mon, 08 Sep 2008 09:43:21 +0200 Message-Id: <1220859801.4147.2.camel@frecb07144> Mime-Version: 1.0 Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: qemu-devel@nongnu.org --=-bBos6yisgIeVZIl1tX89 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Le dimanche 07 septembre 2008 =C3=A0 19:16 -0500, Anthony Liguori a =C3=A9= crit : > Hi Laurent, >=20 > This patch is whitespace damaged.. >=20 > Laurent Vivier wrote: > > if (!hide_banner) > > term_printf("QEMU %s monitor - type 'help' for more information > > \n", > > =20 Sorry, find the good one attached. Regards, Laurent --=20 ----------------- Laurent.Vivier@bull.net ------------------ "La perfection est atteinte non quand il ne reste rien =C3=A0 ajouter mais quand il ne reste rien =C3=A0 enlever." Saint Exup=C3=A9ry --=-bBos6yisgIeVZIl1tX89 Content-Disposition: attachment; filename=qemu-encrypted.patch Content-Type: text/x-patch; name=qemu-encrypted.patch; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Correct the password prompt management. This patch allows to provide a password for encrypted disks by moving the password prompt after the monitor initialisation and by removing the explicit start of the monitor command input. The start of the command input is triggered by the term event CHR_EVENT_RESET. Moreover, during a password read, the term event CHR_EVENT_RESET is ignored to avoid a reset to the command prompt and delayed after the end of password input. Signed-off-by: Laurent Vivier --- monitor.c | 17 ++++++++++++++++- vl.c | 19 ++++++------------- 2 files changed, 22 insertions(+), 14 deletions(-) Index: qemu/monitor.c =================================================================== --- qemu.orig/monitor.c 2008-09-04 16:27:30.000000000 +0200 +++ qemu/monitor.c 2008-09-08 09:35:17.000000000 +0200 @@ -69,6 +69,8 @@ typedef struct term_cmd_t { #define MAX_MON 4 static CharDriverState *monitor_hd[MAX_MON]; static int hide_banner; +static int read_password; +static int need_reset; static term_cmd_t term_cmds[]; static term_cmd_t info_cmds[]; @@ -2703,6 +2705,11 @@ static void term_event(void *opaque, int if (event != CHR_EVENT_RESET) return; + if (read_password) { /* ignore reset when reading password */ + need_reset = 1; + return; + } + if (!hide_banner) term_printf("QEMU %s monitor - type 'help' for more information\n", QEMU_VERSION); @@ -2735,7 +2742,8 @@ void monitor_init(CharDriverState *hd, i qemu_chr_add_handlers(hd, term_can_read, term_read, term_event, NULL); - readline_start("", 0, monitor_handle_command1, NULL); + read_password = 0; + need_reset = 0; } /* XXX: use threads ? */ @@ -2756,6 +2764,8 @@ void monitor_readline(const char *prompt int i; int old_focus[MAX_MON]; + read_password = is_password; + if (is_password) { for (i = 0; i < MAX_MON; i++) { old_focus[i] = 0; @@ -2779,5 +2789,10 @@ void monitor_readline(const char *prompt for (i = 0; i < MAX_MON; i++) if (old_focus[i]) monitor_hd[i]->focus = old_focus[i]; + read_password = 0; + if (need_reset) { + term_event(NULL, CHR_EVENT_RESET); + need_reset = 0; + } } } Index: qemu/vl.c =================================================================== --- qemu.orig/vl.c 2008-09-05 11:17:44.000000000 +0200 +++ qemu/vl.c 2008-09-08 09:35:17.000000000 +0200 @@ -5737,7 +5737,7 @@ static int drive_init(struct drive_opt * 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; @@ -8039,22 +8039,14 @@ int qemu_key_check(BlockDriverState *bs, 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)); } } @@ -9198,12 +9190,13 @@ int main(int argc, char **argv) } #endif + read_passwords(); + if (loadvm) do_loadvm(loadvm); { /* XXX: simplify init */ - read_passwords(); if (autostart) { vm_start(); } --=-bBos6yisgIeVZIl1tX89--