[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/34] hmp: hmp_cont(): don't rely on QERR_DEVICE_EN
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 12/34] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED |
Date: |
Wed, 1 Aug 2012 22:02:32 -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 6b72a64..1ebeb63 100644
--- a/hmp.c
+++ b/hmp.c
@@ -610,34 +610,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 02/34] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg, (continued)
- [Qemu-devel] [PATCH 02/34] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 03/34] qerror: QERR_DEVICE_ENCRYPTED: add filename info to human msg, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 04/34] qerror: reduce public exposure, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 06/34] qerror: avoid passing qerr pointer, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 05/34] qerror: drop qerror_abort(), Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 08/34] qerror: qerror_format(): return an allocated string, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 07/34] qerror: QError: drop file, linenr, func, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 10/34] error: don't delay error message construction, Luiz Capitulino, 2012/08/01
- [Qemu-devel] [PATCH 12/34] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED,
Luiz Capitulino <=
[Qemu-devel] [PATCH 14/34] net: inet_connect(), inet_connect_opts(): add in_progress argument, Luiz Capitulino, 2012/08/01
[Qemu-devel] [PATCH 11/34] qmp: query-block: add 'valid_encryption_key' field, Luiz Capitulino, 2012/08/01