[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_EN
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED |
Date: |
Tue, 7 Aug 2012 12:53:23 -0300 |
This commit changes hmp_cont() to loop through all block devices
and proactively set an encryption key for any encrypted device
without a valid one.
This change is needed because QERR_DEVICE_ENCRYPTED is going to be
dropped by a future commit.
Signed-off-by: Luiz Capitulino <address@hidden>
---
hmp.c | 43 +++++++++++++++++++++++++------------------
1 file changed, 25 insertions(+), 18 deletions(-)
diff --git a/hmp.c b/hmp.c
index 25688ab..bfcc032 100644
--- a/hmp.c
+++ b/hmp.c
@@ -612,34 +612,41 @@ void hmp_pmemsave(Monitor *mon, const QDict *qdict)
static void hmp_cont_cb(void *opaque, int err)
{
- Monitor *mon = opaque;
-
if (!err) {
- hmp_cont(mon, NULL);
+ qmp_cont(NULL);
}
}
-void hmp_cont(Monitor *mon, const QDict *qdict)
+static bool blockinfo_is_encrypted(const BlockInfo *bdev)
{
- Error *errp = NULL;
-
- qmp_cont(&errp);
- if (error_is_set(&errp)) {
- if (error_is_type(errp, QERR_DEVICE_ENCRYPTED)) {
- const char *device;
+ return (bdev->inserted && bdev->inserted->encrypted);
+}
- /* The device is encrypted. Ask the user for the password
- and retry */
+static bool blockinfo_key_is_set(const BlockInfo *bdev)
+{
+ return (bdev->inserted && bdev->inserted->valid_encryption_key);
+}
- device = error_get_field(errp, "device");
- assert(device != NULL);
+void hmp_cont(Monitor *mon, const QDict *qdict)
+{
+ BlockInfoList *bdev_list, *bdev;
+ Error *errp = NULL;
- monitor_read_block_device_key(mon, device, hmp_cont_cb, mon);
- error_free(errp);
- return;
+ bdev_list = qmp_query_block(NULL);
+ for (bdev = bdev_list; bdev; bdev = bdev->next) {
+ if (blockinfo_is_encrypted(bdev->value) &&
+ !blockinfo_key_is_set(bdev->value)) {
+ monitor_read_block_device_key(mon, bdev->value->device,
+ hmp_cont_cb, NULL);
+ goto out;
}
- hmp_handle_error(mon, &errp);
}
+
+ qmp_cont(&errp);
+ hmp_handle_error(mon, &errp);
+
+out:
+ qapi_free_BlockInfoList(bdev_list);
}
void hmp_system_wakeup(Monitor *mon, const QDict *qdict)
--
1.7.11.2.249.g31c7954.dirty
- [Qemu-devel] [PATCH v2 00/35]: add new error format, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 05/35] qerror: drop qerror_abort(), Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 07/35] qerror: QError: drop file, linenr, func, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 12/35] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 02/35] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 09/35] qerror: don't delay error message construction, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 13/35] hmp_change(): don't access DeviceEncrypted's data, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 20/35] qapi: generate correct enum names for camel case enums, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 17/35] block: block_int: include qerror.h, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 03/35] qerror: QERR_DEVICE_ENCRYPTED: change error message, Luiz Capitulino, 2012/08/07
- [Qemu-devel] [PATCH 24/35] error, qerror: add ErrorClass argument to error functions, Luiz Capitulino, 2012/08/07