diff mbox

[v2,1/6] qemu-img: add support for --object with 'dd' command

Message ID 20170203120254.15062-2-berrange@redhat.com
State New
Headers show

Commit Message

Daniel P. Berrangé Feb. 3, 2017, 12:02 p.m. UTC
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(+)

Comments

Max Reitz Feb. 3, 2017, 9:01 p.m. UTC | #1
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) {
>
Daniel P. Berrangé Feb. 20, 2017, 12:32 p.m. UTC | #2
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 mbox

Patch

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) {