From nobody Wed May 1 15:03:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494857270939749.9819796032083; Mon, 15 May 2017 07:07:50 -0700 (PDT) Received: from localhost ([::1]:37077 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGf5-00067e-Kk for importer@patchew.org; Mon, 15 May 2017 10:07:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52230) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGcG-0003oU-2b for qemu-devel@nongnu.org; Mon, 15 May 2017 10:04:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dAGcE-0002T5-Rc for qemu-devel@nongnu.org; Mon, 15 May 2017 10:04:52 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58034) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dAGcA-0002Pi-FF; Mon, 15 May 2017 10:04:46 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7B561BDD4; Mon, 15 May 2017 14:04:45 +0000 (UTC) Received: from t460.redhat.com (ovpn-117-216.ams2.redhat.com [10.36.117.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id E49177D513; Mon, 15 May 2017 14:04:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 7B561BDD4 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=berrange@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 7B561BDD4 From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Mon, 15 May 2017 15:04:07 +0100 Message-Id: <20170515140410.14172-2-berrange@redhat.com> In-Reply-To: <20170515140410.14172-1-berrange@redhat.com> References: <20170515140410.14172-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 15 May 2017 14:04:45 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v9 1/4] qemu-img: add support for --object with 'dd' command X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The qemu-img dd command added --image-opts support, but missed the corresponding --object support. This prevented passing secrets (eg auth passwords) needed by certain disk images. Reviewed-by: Fam Zheng Reviewed-by: Max Reitz Reviewed-by: Eric Blake Signed-off-by: Daniel P. Berrange --- qemu-img.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/qemu-img.c b/qemu-img.c index b506839..181f499 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -4158,6 +4158,7 @@ static int img_dd(int argc, char **argv) }; const struct option long_options[] =3D { { "help", no_argument, 0, 'h'}, + { "object", required_argument, 0, OPTION_OBJECT}, { "image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, { "force-share", no_argument, 0, 'U'}, { 0, 0, 0, 0 } @@ -4186,6 +4187,15 @@ static int img_dd(int argc, char **argv) case 'U': force_share =3D true; break; + case OPTION_OBJECT: { + QemuOpts *opts; + opts =3D qemu_opts_parse_noisily(&qemu_object_opts, + optarg, true); + if (!opts) { + ret =3D -1; + goto out; + } + } break; case OPTION_IMAGE_OPTS: image_opts =3D true; break; @@ -4230,6 +4240,14 @@ static int img_dd(int argc, char **argv) ret =3D -1; goto out; } + + if (qemu_opts_foreach(&qemu_object_opts, + user_creatable_add_opts_foreach, + NULL, NULL)) { + ret =3D -1; + goto out; + } + blk1 =3D img_open(image_opts, in.filename, fmt, 0, false, false, force_share); =20 --=20 2.9.3 From nobody Wed May 1 15:03:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494857315383762.8233082579437; Mon, 15 May 2017 07:08:35 -0700 (PDT) Received: from localhost ([::1]:37078 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGfm-0006hf-Pc for importer@patchew.org; Mon, 15 May 2017 10:08:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52315) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGcP-0003sd-0K for qemu-devel@nongnu.org; Mon, 15 May 2017 10:05:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dAGcO-0002X2-5G for qemu-devel@nongnu.org; Mon, 15 May 2017 10:05:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38636) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dAGcJ-0002Un-Gc; Mon, 15 May 2017 10:04:55 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5CD7E85540; Mon, 15 May 2017 14:04:54 +0000 (UTC) Received: from t460.redhat.com (ovpn-117-216.ams2.redhat.com [10.36.117.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id F278A7D4EB; Mon, 15 May 2017 14:04:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5CD7E85540 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=berrange@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 5CD7E85540 From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Mon, 15 May 2017 15:04:08 +0100 Message-Id: <20170515140410.14172-3-berrange@redhat.com> In-Reply-To: <20170515140410.14172-1-berrange@redhat.com> References: <20170515140410.14172-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 15 May 2017 14:04:54 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v9 2/4] qemu-img: fix --image-opts usage with dd command X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The --image-opts flag can only be used to affect the parsing of the source image. The target image has to be specified in the traditional style regardless, since it needs to be passed to the bdrv_create() API which does not support the new style opts. Reviewed-by: Fam Zheng Reviewed-by: Max Reitz Signed-off-by: Daniel P. Berrange --- qemu-img.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index 181f499..4dc1d56 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -4316,8 +4316,13 @@ static int img_dd(int argc, char **argv) goto out; } =20 - blk2 =3D img_open(image_opts, out.filename, out_fmt, BDRV_O_RDWR, - false, false, false); + /* TODO, we can't honour --image-opts for the target, + * since it needs to be given in a format compatible + * with the bdrv_create() call above which does not + * support image-opts style. + */ + blk2 =3D img_open_file(out.filename, out_fmt, BDRV_O_RDWR, + false, false, false); =20 if (!blk2) { ret =3D -1; --=20 2.9.3 From nobody Wed May 1 15:03:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494857211090474.21867636538843; Mon, 15 May 2017 07:06:51 -0700 (PDT) Received: from localhost ([::1]:37073 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGe7-00052s-K4 for importer@patchew.org; Mon, 15 May 2017 10:06:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52396) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGcg-0004AH-M3 for qemu-devel@nongnu.org; Mon, 15 May 2017 10:05:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dAGcb-0002e3-ER for qemu-devel@nongnu.org; Mon, 15 May 2017 10:05:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:5775) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dAGcU-0002YV-45; Mon, 15 May 2017 10:05:06 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0D35F19D39C; Mon, 15 May 2017 14:05:05 +0000 (UTC) Received: from t460.redhat.com (ovpn-117-216.ams2.redhat.com [10.36.117.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4B0CE7D4EB; Mon, 15 May 2017 14:04:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0D35F19D39C Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=berrange@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0D35F19D39C From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Mon, 15 May 2017 15:04:09 +0100 Message-Id: <20170515140410.14172-4-berrange@redhat.com> In-Reply-To: <20170515140410.14172-1-berrange@redhat.com> References: <20170515140410.14172-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 15 May 2017 14:05:05 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v9 3/4] qemu-img: introduce --target-image-opts for 'convert' command X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The '--image-opts' flag indicates whether the source filename includes options. The target filename has to remain in the plain filename format though, since it needs to be passed to bdrv_create(). When using --skip-create though, it would be possible to use image-opts syntax. This adds --target-image-opts to indicate that the target filename includes options. Currently this mandates use of the --skip-create flag too. Reviewed-by: Fam Zheng Signed-off-by: Daniel P. Berrange --- qemu-img-cmds.hx | 4 +-- qemu-img.c | 84 ++++++++++++++++++++++++++++++++++++++--------------= ---- qemu-img.texi | 12 ++++++-- 3 files changed, 69 insertions(+), 31 deletions(-) diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index 469ec12..c298331 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -40,9 +40,9 @@ STEXI ETEXI =20 DEF("convert", img_convert, - "convert [--object objectdef] [--image-opts] [-U] [-c] [-p] [-q] [-n] = [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-B backing_file] [-o op= tions] [-s snapshot_id_or_name] [-l snapshot_param] [-S sparse_size] [-m nu= m_coroutines] [-W] filename [filename2 [...]] output_filename") + "convert [--object objectdef] [--image-opts] [--target-image-opts] [-U= ] [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-= B backing_file] [-o options] [-s snapshot_id_or_name] [-l snapshot_param] [= -S sparse_size] [-m num_coroutines] [-W] filename [filename2 [...]] output_= filename") STEXI -@item convert [--object @var{objectdef}] [--image-opts] [-U] [-c] [-p] [-q= ] [-n] [-f @var{fmt}] [-t @var{cache}] [-T @var{src_cache}] [-O @var{output= _fmt}] [-B @var{backing_file}][-o @var{options}] [-s @var{snapshot_id_or_na= me}] [-l @var{snapshot_param}] [-S @var{sparse_size}] [-m @var{num_coroutin= es}] [-W] @var{filename} [@var{filename2} [...]] @var{output_filename} +@item convert [--object @var{objectdef}] [--image-opts] [--target-image-op= ts] [-U] [-c] [-p] [-q] [-n] [-f @var{fmt}] [-t @var{cache}] [-T @var{src_c= ache}] [-O @var{output_fmt}] [-B @var{backing_file}][-o @var{options}] [-s = @var{snapshot_id_or_name}] [-l @var{snapshot_param}] [-S @var{sparse_size}]= [-m @var{num_coroutines}] [-W] @var{filename} [@var{filename2} [...]] @var= {output_filename} ETEXI =20 DEF("dd", img_dd, diff --git a/qemu-img.c b/qemu-img.c index 4dc1d56..e0e3d31 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -60,6 +60,7 @@ enum { OPTION_PATTERN =3D 260, OPTION_FLUSH_INTERVAL =3D 261, OPTION_NO_DRAIN =3D 262, + OPTION_TARGET_IMAGE_OPTS =3D 263, }; =20 typedef enum OutputFormat { @@ -1913,10 +1914,10 @@ static int convert_do_copy(ImgConvertState *s) static int img_convert(int argc, char **argv) { int c, bs_i, flags, src_flags =3D 0; - const char *fmt =3D NULL, *out_fmt =3D "raw", *cache =3D "unsafe", + const char *fmt =3D NULL, *out_fmt =3D NULL, *cache =3D "unsafe", *src_cache =3D BDRV_DEFAULT_CACHE, *out_baseimg =3D NULL, *out_filename, *out_baseimg_param, *snapshot_name =3D NULL; - BlockDriver *drv, *proto_drv; + BlockDriver *drv =3D NULL, *proto_drv =3D NULL; BlockDriverInfo bdi; BlockDriverState *out_bs; QemuOpts *opts =3D NULL, *sn_opts =3D NULL; @@ -1924,7 +1925,7 @@ static int img_convert(int argc, char **argv) char *options =3D NULL; Error *local_err =3D NULL; bool writethrough, src_writethrough, quiet =3D false, image_opts =3D f= alse, - skip_create =3D false, progress =3D false; + skip_create =3D false, progress =3D false, tgt_image_opts =3D fal= se; int64_t ret =3D -EINVAL; bool force_share =3D false; =20 @@ -1942,6 +1943,7 @@ static int img_convert(int argc, char **argv) {"object", required_argument, 0, OPTION_OBJECT}, {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, {"force-share", no_argument, 0, 'U'}, + {"target-image-opts", no_argument, 0, OPTION_TARGET_IMAGE_OPTS= }, {0, 0, 0, 0} }; c =3D getopt_long(argc, argv, ":hf:O:B:ce6o:s:l:S:pt:T:qnm:WU", @@ -2062,9 +2064,16 @@ static int img_convert(int argc, char **argv) case OPTION_IMAGE_OPTS: image_opts =3D true; break; + case OPTION_TARGET_IMAGE_OPTS: + tgt_image_opts =3D true; + break; } } =20 + if (!out_fmt && !tgt_image_opts) { + out_fmt =3D "raw"; + } + if (qemu_opts_foreach(&qemu_object_opts, user_creatable_add_opts_foreach, NULL, NULL)) { @@ -2076,12 +2085,22 @@ static int img_convert(int argc, char **argv) goto fail_getopt; } =20 + if (tgt_image_opts && !skip_create) { + error_report("--target-image-opts requires use of -n flag"); + goto fail_getopt; + } + s.src_num =3D argc - optind - 1; out_filename =3D s.src_num >=3D 1 ? argv[argc - 1] : NULL; =20 if (options && has_help_option(options)) { - ret =3D print_block_option_help(out_filename, out_fmt); - goto fail_getopt; + if (out_fmt) { + ret =3D print_block_option_help(out_filename, out_fmt); + goto fail_getopt; + } else { + error_report("Option help requires a format be specified"); + goto fail_getopt; + } } =20 if (s.src_num < 1) { @@ -2146,22 +2165,22 @@ static int img_convert(int argc, char **argv) goto out; } =20 - /* Find driver and parse its options */ - drv =3D bdrv_find_format(out_fmt); - if (!drv) { - error_report("Unknown file format '%s'", out_fmt); - ret =3D -1; - goto out; - } + if (!skip_create) { + /* Find driver and parse its options */ + drv =3D bdrv_find_format(out_fmt); + if (!drv) { + error_report("Unknown file format '%s'", out_fmt); + ret =3D -1; + goto out; + } =20 - proto_drv =3D bdrv_find_protocol(out_filename, true, &local_err); - if (!proto_drv) { - error_report_err(local_err); - ret =3D -1; - goto out; - } + proto_drv =3D bdrv_find_protocol(out_filename, true, &local_err); + if (!proto_drv) { + error_report_err(local_err); + ret =3D -1; + goto out; + } =20 - if (!skip_create) { if (!drv->create_opts) { error_report("Format driver '%s' does not support image creati= on", drv->format_name); @@ -2218,7 +2237,7 @@ static int img_convert(int argc, char **argv) const char *preallocation =3D qemu_opt_get(opts, BLOCK_OPT_PREALLOC); =20 - if (!drv->bdrv_co_pwritev_compressed) { + if (drv && !drv->bdrv_co_pwritev_compressed) { error_report("Compression not supported for this file format"); ret =3D -1; goto out; @@ -2258,19 +2277,30 @@ static int img_convert(int argc, char **argv) goto out; } =20 - /* XXX we should allow --image-opts to trigger use of - * img_open() here, but then we have trouble with - * the bdrv_create() call which takes different params. - * Not critical right now, so fix can wait... - */ - s.target =3D img_open_file(out_filename, out_fmt, flags, writethrough,= quiet, - false); + if (skip_create) { + s.target =3D img_open(tgt_image_opts, out_filename, out_fmt, + flags, writethrough, quiet, false); + } else { + /* TODO ultimately we should allow --target-image-opts + * to be used even when -n is not given. + * That has to wait for bdrv_create to be improved + * to allow filenames in option syntax + */ + s.target =3D img_open_file(out_filename, out_fmt, flags, + writethrough, quiet, false); + } if (!s.target) { ret =3D -1; goto out; } out_bs =3D blk_bs(s.target); =20 + if (s.compressed && !out_bs->drv->bdrv_co_pwritev_compressed) { + error_report("Compression not supported for this file format"); + ret =3D -1; + goto out; + } + /* increase bufsectors from the default 4096 (2M) if opt_transfer * or discard_alignment of the out_bs is greater. Limit to 32768 (16MB) * as maximum. */ diff --git a/qemu-img.texi b/qemu-img.texi index 50a2364..5b925ec 100644 --- a/qemu-img.texi +++ b/qemu-img.texi @@ -45,9 +45,17 @@ keys. =20 @item --image-opts =20 -Indicates that the @var{filename} parameter is to be interpreted as a +Indicates that the source @var{filename} parameter is to be interpreted as= a full option string, not a plain filename. This parameter is mutually -exclusive with the @var{-f} and @var{-F} parameters. +exclusive with the @var{-f} parameter. + +@item --target-image-opts + +Indicates that the @var{output_filename} parameter(s) are to be interprete= d as +a full option string, not a plain filename. This parameter is mutually +exclusive with the @var{-O} parameters. It is currently required to also u= se +the @var{-n} parameter to skip image creation. This restriction may be rel= axed +in a future release. =20 @item fmt is the disk image format. It is guessed automatically in most cases. See b= elow --=20 2.9.3 From nobody Wed May 1 15:03:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1494857436701141.14477564258777; Mon, 15 May 2017 07:10:36 -0700 (PDT) Received: from localhost ([::1]:37094 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGhk-0008LR-9G for importer@patchew.org; Mon, 15 May 2017 10:10:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52403) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dAGch-0004Aq-N6 for qemu-devel@nongnu.org; Mon, 15 May 2017 10:05:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dAGce-0002eh-I2 for qemu-devel@nongnu.org; Mon, 15 May 2017 10:05:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38908) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dAGcZ-0002co-1o; Mon, 15 May 2017 10:05:11 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0895EC04B92D; Mon, 15 May 2017 14:05:10 +0000 (UTC) Received: from t460.redhat.com (ovpn-117-216.ams2.redhat.com [10.36.117.216]) by smtp.corp.redhat.com (Postfix) with ESMTP id 844727D4EB; Mon, 15 May 2017 14:05:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0895EC04B92D Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=berrange@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0895EC04B92D From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Mon, 15 May 2017 15:04:10 +0100 Message-Id: <20170515140410.14172-5-berrange@redhat.com> In-Reply-To: <20170515140410.14172-1-berrange@redhat.com> References: <20170515140410.14172-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 15 May 2017 14:05:10 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v9 4/4] qemu-img: copy *key-secret opts when opening newly created files X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , qemu-block@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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. Reviewed-by: Max Reitz Reviewed-by: Fam Zheng Reviewed-by: Eric Blake Signed-off-by: Daniel P. Berrange --- qemu-img.c | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/qemu-img.c b/qemu-img.c index e0e3d31..dcddded 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -314,15 +314,18 @@ static BlockBackend *img_open_opts(const char *optstr, } =20 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 =3D NULL; - QDict *options =3D qdict_new(); =20 if (fmt) { + if (!options) { + options =3D qdict_new(); + } qdict_put_str(options, "driver", fmt); } =20 @@ -344,6 +347,35 @@ static BlockBackend *img_open_file(const char *filenam= e, } =20 =20 +static int img_add_key_secrets(void *opaque, + const char *name, const char *value, + Error **errp) +{ + QDict *options =3D 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 =3D NULL; + + options =3D qdict_new(); + qemu_opt_foreach(create_opts, img_add_key_secrets, options, &error_abo= rt); + + return img_open_file(filename, options, fmt, flags, writethrough, quie= t, + force_share); +} + + static BlockBackend *img_open(bool image_opts, const char *filename, const char *fmt, int flags, bool writethroug= h, @@ -364,7 +396,7 @@ static BlockBackend *img_open(bool image_opts, blk =3D img_open_opts(filename, opts, flags, writethrough, quiet, force_share); } else { - blk =3D img_open_file(filename, fmt, flags, writethrough, quiet, + blk =3D img_open_file(filename, NULL, fmt, flags, writethrough, qu= iet, 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 =3D img_open_file(out_filename, out_fmt, flags, - writethrough, quiet, false); + s.target =3D img_open_new_file(out_filename, opts, out_fmt, + flags, writethrough, quiet, false); } if (!s.target) { ret =3D -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 =3D img_open_file(out.filename, out_fmt, BDRV_O_RDWR, + blk2 =3D img_open_file(out.filename, NULL, out_fmt, BDRV_O_RDWR, false, false, false); =20 if (!blk2) { --=20 2.9.3