Message ID | 20170203120254.15062-2-berrange@redhat.com |
---|---|
State | New |
Headers | show |
On 03.02.2017 13:02, Daniel P. Berrange wrote: > 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: Eric Blake <eblake@redhat.com> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com> > --- > qemu-img.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/qemu-img.c b/qemu-img.c > index 74e3362..391a141 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -3949,6 +3949,7 @@ static int img_dd(int argc, char **argv) > }; > const struct option long_options[] = { > { "help", no_argument, 0, 'h'}, > + { "object", required_argument, 0, OPTION_OBJECT}, > { "image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, > { 0, 0, 0, 0 } > }; > @@ -3971,6 +3972,14 @@ static int img_dd(int argc, char **argv) > case 'h': > help(); > break; > + case OPTION_OBJECT: { > + QemuOpts *opts; > + opts = qemu_opts_parse_noisily(&qemu_object_opts, > + optarg, true); > + if (!opts) { > + return 1; > + } > + } break; > case OPTION_IMAGE_OPTS: > image_opts = true; > break; > @@ -4015,6 +4024,13 @@ static int img_dd(int argc, char **argv) > ret = -1; > goto out; > } > + > + if (qemu_opts_foreach(&qemu_object_opts, > + user_creatable_add_opts_foreach, > + NULL, NULL)) { > + return 1; Why not ret = -1; goto out; like the other code around this block? (Same for the case block above.) Max > + } > + > blk1 = img_open(image_opts, in.filename, fmt, 0, false, false); > > if (!blk1) { >
On Fri, Feb 03, 2017 at 10:01:53PM +0100, Max Reitz wrote: > On 03.02.2017 13:02, Daniel P. Berrange wrote: > > 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: Eric Blake <eblake@redhat.com> > > Signed-off-by: Daniel P. Berrange <berrange@redhat.com> > > --- > > qemu-img.c | 16 ++++++++++++++++ > > 1 file changed, 16 insertions(+) > > > > diff --git a/qemu-img.c b/qemu-img.c > > index 74e3362..391a141 100644 > > --- a/qemu-img.c > > +++ b/qemu-img.c > > @@ -3949,6 +3949,7 @@ static int img_dd(int argc, char **argv) > > }; > > const struct option long_options[] = { > > { "help", no_argument, 0, 'h'}, > > + { "object", required_argument, 0, OPTION_OBJECT}, > > { "image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, > > { 0, 0, 0, 0 } > > }; > > @@ -3971,6 +3972,14 @@ static int img_dd(int argc, char **argv) > > case 'h': > > help(); > > break; > > + case OPTION_OBJECT: { > > + QemuOpts *opts; > > + opts = qemu_opts_parse_noisily(&qemu_object_opts, > > + optarg, true); > > + if (!opts) { > > + return 1; > > + } > > + } break; > > case OPTION_IMAGE_OPTS: > > image_opts = true; > > break; > > @@ -4015,6 +4024,13 @@ static int img_dd(int argc, char **argv) > > ret = -1; > > goto out; > > } > > + > > + if (qemu_opts_foreach(&qemu_object_opts, > > + user_creatable_add_opts_foreach, > > + NULL, NULL)) { > > + return 1; > > Why not ret = -1; goto out; like the other code around this block? > > (Same for the case block above.) This was just copy+paste from other previous command handlers. I'll change it to match img_dd() code style. Regards, Daniel
diff --git a/qemu-img.c b/qemu-img.c index 74e3362..391a141 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -3949,6 +3949,7 @@ static int img_dd(int argc, char **argv) }; const struct option long_options[] = { { "help", no_argument, 0, 'h'}, + { "object", required_argument, 0, OPTION_OBJECT}, { "image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, { 0, 0, 0, 0 } }; @@ -3971,6 +3972,14 @@ static int img_dd(int argc, char **argv) case 'h': help(); break; + case OPTION_OBJECT: { + QemuOpts *opts; + opts = qemu_opts_parse_noisily(&qemu_object_opts, + optarg, true); + if (!opts) { + return 1; + } + } break; case OPTION_IMAGE_OPTS: image_opts = true; break; @@ -4015,6 +4024,13 @@ static int img_dd(int argc, char **argv) ret = -1; goto out; } + + if (qemu_opts_foreach(&qemu_object_opts, + user_creatable_add_opts_foreach, + NULL, NULL)) { + return 1; + } + blk1 = img_open(image_opts, in.filename, fmt, 0, false, false); if (!blk1) {