aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Capitulino <lcapitulino@redhat.com>2009-12-04 15:24:09 -0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-12-07 16:36:49 -0600
commitb3dfdb5a3bae5fb3170397440dfebd579a3fcb04 (patch)
tree2021f19826758cb1c5e3b55275b4ac89565c1179
parent6ccc51fd20bbb016667a0ba06698f1cc71859917 (diff)
monitor: Introduce 'block_passwd' command
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 <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> (cherry picked from commit a3a55a2edb7c0fd72bc62a8a4c719a1e1983e6ac)
-rw-r--r--monitor.c16
-rw-r--r--qemu-monitor.hx14
2 files changed, 30 insertions, 0 deletions
diff --git a/monitor.c b/monitor.c
index ba76f3416d..27c696b2d4 100644
--- a/monitor.c
+++ b/monitor.c
@@ -772,6 +772,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 62e395bffd..c2670ee1d9 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -1047,6 +1047,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