From 19645521a92869be7210fb663ed5e0e82e329ca5 Mon Sep 17 00:00:00 2001 From: John Starks Date: Thu, 22 Jun 2017 17:15:10 -0700 Subject: [PATCH] LCOW: pass command arguments without extra quoting Signed-off-by: John Starks --- daemon/exec_windows.go | 6 ++++-- daemon/oci_windows.go | 2 +- libcontainerd/client_windows.go | 6 +++++- libcontainerd/container_windows.go | 6 +++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/daemon/exec_windows.go b/daemon/exec_windows.go index 1d6974cda9..b7b45149cf 100644 --- a/daemon/exec_windows.go +++ b/daemon/exec_windows.go @@ -8,7 +8,9 @@ import ( func execSetPlatformOpt(c *container.Container, ec *exec.Config, p *libcontainerd.Process) error { // Process arguments need to be escaped before sending to OCI. - p.Args = escapeArgs(p.Args) - p.User.Username = ec.User + if c.Platform == "windows" { + p.Args = escapeArgs(p.Args) + p.User.Username = ec.User + } return nil } diff --git a/daemon/oci_windows.go b/daemon/oci_windows.go index 67e3473537..9f44c66523 100644 --- a/daemon/oci_windows.go +++ b/daemon/oci_windows.go @@ -98,7 +98,7 @@ func (daemon *Daemon) createSpec(c *container.Container) (*specs.Spec, error) { // In s.Process s.Process.Args = append([]string{c.Path}, c.Args...) - if !c.Config.ArgsEscaped { + if !c.Config.ArgsEscaped && img.OS == "windows" { s.Process.Args = escapeArgs(s.Process.Args) } diff --git a/libcontainerd/client_windows.go b/libcontainerd/client_windows.go index d7f312e6e4..be77ea6e55 100644 --- a/libcontainerd/client_windows.go +++ b/libcontainerd/client_windows.go @@ -420,7 +420,11 @@ func (clnt *client) AddProcess(ctx context.Context, containerID, processFriendly // Configure the environment for the process createProcessParms.Environment = setupEnvironmentVariables(procToAdd.Env) - createProcessParms.CommandLine = strings.Join(procToAdd.Args, " ") + if container.ociSpec.Platform.OS == "windows" { + createProcessParms.CommandLine = strings.Join(procToAdd.Args, " ") + } else { + createProcessParms.CommandArgs = procToAdd.Args + } createProcessParms.User = procToAdd.User.Username logrus.Debugf("libcontainerd: commandLine: %s", createProcessParms.CommandLine) diff --git a/libcontainerd/container_windows.go b/libcontainerd/container_windows.go index 3fd8b6793d..af3e0ef579 100644 --- a/libcontainerd/container_windows.go +++ b/libcontainerd/container_windows.go @@ -82,7 +82,11 @@ func (ctr *container) start(attachStdio StdioCallback) error { // Configure the environment for the process createProcessParms.Environment = setupEnvironmentVariables(ctr.ociSpec.Process.Env) - createProcessParms.CommandLine = strings.Join(ctr.ociSpec.Process.Args, " ") + if ctr.ociSpec.Platform.OS == "windows" { + createProcessParms.CommandLine = strings.Join(ctr.ociSpec.Process.Args, " ") + } else { + createProcessParms.CommandArgs = ctr.ociSpec.Process.Args + } createProcessParms.User = ctr.ociSpec.Process.User.Username // LCOW requires the raw OCI spec passed through HCS and onwards to GCS for the utility VM.