[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 11/15] qemu-img: copy *key-secret opts when opening n
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PULL 11/15] qemu-img: copy *key-secret opts when opening newly created files |
Date: |
Mon, 29 May 2017 17:06:50 +0200 |
From: "Daniel P. Berrange" <address@hidden>
The qemu-img dd/convert commands will create an image file and
then try to open it. Historically it has been possible to open
new files without passing any options. With encrypted files
though, the *key-secret options are mandatory, so we need to
provide those options when opening the newly created file.
Signed-off-by: Daniel P. Berrange <address@hidden>
Message-id: address@hidden
Reviewed-by: Max Reitz <address@hidden>
Signed-off-by: Max Reitz <address@hidden>
---
qemu-img.c | 42 +++++++++++++++++++++++++++++++++++++-----
1 file changed, 37 insertions(+), 5 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index e0e3d31..0bf941b 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -314,14 +314,17 @@ static BlockBackend *img_open_opts(const char *optstr,
}
static BlockBackend *img_open_file(const char *filename,
+ QDict *options,
const char *fmt, int flags,
bool writethrough, bool quiet,
bool force_share)
{
BlockBackend *blk;
Error *local_err = NULL;
- QDict *options = qdict_new();
+ if (!options) {
+ options = qdict_new();
+ }
if (fmt) {
qdict_put_str(options, "driver", fmt);
}
@@ -344,6 +347,35 @@ static BlockBackend *img_open_file(const char *filename,
}
+static int img_add_key_secrets(void *opaque,
+ const char *name, const char *value,
+ Error **errp)
+{
+ QDict *options = opaque;
+
+ if (g_str_has_suffix(name, "key-secret")) {
+ qdict_put(options, name, qstring_from_str(value));
+ }
+
+ return 0;
+}
+
+static BlockBackend *img_open_new_file(const char *filename,
+ QemuOpts *create_opts,
+ const char *fmt, int flags,
+ bool writethrough, bool quiet,
+ bool force_share)
+{
+ QDict *options = NULL;
+
+ options = qdict_new();
+ qemu_opt_foreach(create_opts, img_add_key_secrets, options, &error_abort);
+
+ return img_open_file(filename, options, fmt, flags, writethrough, quiet,
+ force_share);
+}
+
+
static BlockBackend *img_open(bool image_opts,
const char *filename,
const char *fmt, int flags, bool writethrough,
@@ -364,7 +396,7 @@ static BlockBackend *img_open(bool image_opts,
blk = img_open_opts(filename, opts, flags, writethrough, quiet,
force_share);
} else {
- blk = img_open_file(filename, fmt, flags, writethrough, quiet,
+ blk = img_open_file(filename, NULL, fmt, flags, writethrough, quiet,
force_share);
}
return blk;
@@ -2286,8 +2318,8 @@ static int img_convert(int argc, char **argv)
* That has to wait for bdrv_create to be improved
* to allow filenames in option syntax
*/
- s.target = img_open_file(out_filename, out_fmt, flags,
- writethrough, quiet, false);
+ s.target = img_open_new_file(out_filename, opts, out_fmt,
+ flags, writethrough, quiet, false);
}
if (!s.target) {
ret = -1;
@@ -4351,7 +4383,7 @@ static int img_dd(int argc, char **argv)
* with the bdrv_create() call above which does not
* support image-opts style.
*/
- blk2 = img_open_file(out.filename, out_fmt, BDRV_O_RDWR,
+ blk2 = img_open_file(out.filename, NULL, out_fmt, BDRV_O_RDWR,
false, false, false);
if (!blk2) {
--
1.8.3.1
- [Qemu-block] [PULL 01/15] stream: fix crash in stream_start() when block_job_create() fails, (continued)
- [Qemu-block] [PULL 01/15] stream: fix crash in stream_start() when block_job_create() fails, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 03/15] iotests: 147: Don't test inet6 if not available, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 05/15] mirror: Drop permissions on s->target on completion, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 04/15] nvme: Add support for Controller Memory Buffers, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 07/15] qemu-img: Fix documentation of convert, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 08/15] qemu-img: add support for --object with 'dd' command, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 06/15] qcow2: remove extra local_error variable, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 09/15] qemu-img: fix --image-opts usage with dd command, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 10/15] qemu-img: introduce --target-image-opts for 'convert' command, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 12/15] qemu-img: Fix leakage of options on error, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 11/15] qemu-img: copy *key-secret opts when opening newly created files,
Kevin Wolf <=
- [Qemu-block] [PULL 13/15] block: Tweak error message related to qemu-img amend, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 14/15] block: Fix backing paths for filenames with colons, Kevin Wolf, 2017/05/29
- [Qemu-block] [PULL 15/15] block/file-*: *_parse_filename() and colons, Kevin Wolf, 2017/05/29
- Re: [Qemu-block] [PULL 00/15] Block layer patches, Stefan Hajnoczi, 2017/05/30