From patchwork Fri Dec 4 17:24:09 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 40358 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C06B0B7BF2 for ; Sat, 5 Dec 2009 05:02:15 +1100 (EST) Received: from localhost ([127.0.0.1]:36178 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NGcTQ-0001ry-RO for incoming@patchwork.ozlabs.org; Fri, 04 Dec 2009 13:01:44 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NGbtI-0000rQ-2N for qemu-devel@nongnu.org; Fri, 04 Dec 2009 12:24:24 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NGbtD-0000pG-VR for qemu-devel@nongnu.org; Fri, 04 Dec 2009 12:24:23 -0500 Received: from [199.232.76.173] (port=38199 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NGbtD-0000pD-Q1 for qemu-devel@nongnu.org; Fri, 04 Dec 2009 12:24:19 -0500 Received: from mx1.redhat.com ([209.132.183.28]:60049) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NGbtD-0000qa-GK for qemu-devel@nongnu.org; Fri, 04 Dec 2009 12:24:19 -0500 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nB4HOITG015787 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 4 Dec 2009 12:24:18 -0500 Received: from localhost (vpn-11-221.rdu.redhat.com [10.11.11.221]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nB4HOGGX032155; Fri, 4 Dec 2009 12:24:17 -0500 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Fri, 4 Dec 2009 15:24:09 -0200 Message-Id: <1259947449-17576-3-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1259947449-17576-1-git-send-email-lcapitulino@redhat.com> References: <1259947449-17576-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.17 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: aliguori@us.ibm.com Subject: [Qemu-devel] [PATCH 2/2] monitor: Introduce 'block_passwd' command X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org When using encrypted disk images, QEMU will prompt the user for passwords when started. This makes sense for the user protocol, but doesn't for QMP. The solution is to have Monitor command which allows the user or a Client to set passwords in advance, so that we avoid the prompt completely. This is what block_passwd does, for example: (QEMU) block_passwd ide0-hd0 foobar Signed-off-by: Luiz Capitulino --- monitor.c | 16 ++++++++++++++++ qemu-monitor.hx | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-) diff --git a/monitor.c b/monitor.c index 47b11f8..a3ae488 100644 --- a/monitor.c +++ b/monitor.c @@ -807,6 +807,22 @@ static void do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data) eject_device(mon, bs, force); } +static void do_block_set_passwd(Monitor *mon, const QDict *qdict, + QObject **ret_data) +{ + BlockDriverState *bs; + + bs = bdrv_find(qdict_get_str(qdict, "device")); + if (!bs) { + qemu_error_new(QERR_DEVICE_NOT_FOUND, qdict_get_str(qdict, "device")); + return; + } + + if (bdrv_set_key(bs, qdict_get_str(qdict, "password")) < 0) { + qemu_error_new(QERR_INVALID_PASSWORD); + } +} + static void do_change_block(Monitor *mon, const char *device, const char *filename, const char *fmt) { diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 93cbb62..d7c6522 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -1048,6 +1048,20 @@ Close the file descriptor previously assigned to @var{fdname} using the used by another monitor command. ETEXI + { + .name = "block_passwd", + .args_type = "device:B,password:s", + .params = "block_passwd device password", + .help = "set the password of encrypted block devices", + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_block_set_passwd, + }, + +STEXI +@item block_passwd @var{device} @var{password} +Set the encrypted device @var{device} password to @var{password} +ETEXI + STEXI @end table ETEXI