All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: "John Berberian, Jr" <jeb.study@gmail.com>,
	qemu-devel@nongnu.org, Stefan Weil <sw@weilnetz.de>,
	Juan Quintela <quintela@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [PATCH v2] Fix exec migration on Windows (w32+w64).
Date: Mon, 16 Jan 2023 09:22:15 +0000	[thread overview]
Message-ID: <Y8UXR6uqdv22auoE@redhat.com> (raw)
In-Reply-To: <CAJ+F1C+x3tSHAb6LbL+GK0m08UuKCS0RWygz41gMFycqL0JrrQ@mail.gmail.com>

On Mon, Jan 16, 2023 at 11:17:08AM +0400, Marc-André Lureau wrote:
> Hi
> 
> On Mon, Jan 16, 2023 at 5:35 AM John Berberian, Jr <jeb.study@gmail.com> wrote:
> >
> > * Use cmd instead of /bin/sh on Windows.
> >
> > * Try to auto-detect cmd.exe's path, but default to a hard-coded path.
> >
> > Note that this will require that gspawn-win[32|64]-helper.exe and
> > gspawn-win[32|64]-helper-console.exe are included in the Windows binary
> > distributions (cc: Stefan Weil).
> >
> > Signed-off-by: "John Berberian, Jr" <jeb.study@gmail.com>
> > ---
> > Whoops, forgot a header. Here's a revised patch.
> >
> >  migration/exec.c | 24 ++++++++++++++++++++++++
> >  1 file changed, 24 insertions(+)
> >
> > diff --git a/migration/exec.c b/migration/exec.c
> > index 375d2e1b54..38604d73a6 100644
> > --- a/migration/exec.c
> > +++ b/migration/exec.c
> > @@ -23,12 +23,31 @@
> >  #include "migration.h"
> >  #include "io/channel-command.h"
> >  #include "trace.h"
> > +#include "qemu/cutils.h"
> >
> > +#ifdef WIN32
> > +const char *exec_get_cmd_path(void);
> > +const char *exec_get_cmd_path(void)
> > +{
> > +    g_autofree char *detected_path = g_new(char, MAX_PATH);
> > +    if (GetSystemDirectoryA(detected_path, MAX_PATH) == 0) {
> > +        warn_report("Could not detect cmd.exe path, using default.");
> > +        return "C:\\Windows\\System32\\cmd.exe";
> > +    }
> > +    pstrcat(detected_path, MAX_PATH, "\\cmd.exe");
> > +    return g_steal_pointer(&detected_path);
> > +}
> > +#endif
> >
> >  void exec_start_outgoing_migration(MigrationState *s, const char *command, Error **errp)
> >  {
> >      QIOChannel *ioc;
> > +
> > +#ifdef WIN32
> > +    const char *argv[] = { exec_get_cmd_path(), "/c", command, NULL };
> > +#else
> >      const char *argv[] = { "/bin/sh", "-c", command, NULL };
> > +#endif
> 
> It may be a better idea to use g_shell_parse_argv() instead.

For non-Windows that would not be compatible though.  eg if someone is
currently using shell redirection or pipelined commands:

  migrate  "exec:dd of=/foo 1>/dev/null 2>&1"

When we introduce a new QAPI format for migration args though, I've
suggested we drop support for passing exec via shell, and require an
explicit argv[] array:

  https://lists.gnu.org/archive/html/qemu-devel/2023-01/msg01434.html

For Windows since we don't have back compat to worry about, we
can avoid passing via cmd.exe from the start.

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2023-01-16  9:22 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-16  1:34 [PATCH v2] Fix exec migration on Windows (w32+w64) John Berberian, Jr
2023-01-16  7:17 ` Marc-André Lureau
2023-01-16  9:22   ` Daniel P. Berrangé [this message]
2023-01-17 17:07     ` John Berberian, Jr
2023-01-31  4:50       ` John Berberian, Jr.
2023-01-31 10:01       ` Marc-André Lureau
2023-02-18  2:00         ` John Berberian, Jr
2023-02-28 11:11           ` Juan Quintela
2023-02-28 11:24             ` Daniel P. Berrangé
2023-02-28 11:35             ` Juan Quintela
2023-02-28 11:43               ` Daniel P. Berrangé
2023-02-28 12:51                 ` Juan Quintela
2023-02-28 11:22         ` Daniel P. Berrangé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y8UXR6uqdv22auoE@redhat.com \
    --to=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=jeb.study@gmail.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=sw@weilnetz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.