mirror of
https://github.com/docker/docker-credential-helpers.git
synced 2026-06-13 16:01:28 +05:30
Merge pull request #195 from tiborvass/execabs
Use golang.org/x/sys/execabs
This commit is contained in:
+2
-1
@@ -4,7 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
|
exec "golang.org/x/sys/execabs"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Program is an interface to execute external programs.
|
// Program is an interface to execute external programs.
|
||||||
|
|||||||
@@ -2,4 +2,7 @@ module github.com/docker/docker-credential-helpers
|
|||||||
|
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require github.com/danieljoos/wincred v1.1.0
|
require (
|
||||||
|
github.com/danieljoos/wincred v1.1.0
|
||||||
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4
|
||||||
|
)
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
|
|||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
||||||
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
|
|||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
# This source code refers to The Go Authors for copyright purposes.
|
||||||
|
# The master list of authors is in the main Go distribution,
|
||||||
|
# visible at http://tip.golang.org/AUTHORS.
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
# This source code was written by the Go contributors.
|
||||||
|
# The master list of contributors is in the main Go distribution,
|
||||||
|
# visible at http://tip.golang.org/CONTRIBUTORS.
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
Additional IP Rights Grant (Patents)
|
||||||
|
|
||||||
|
"This implementation" means the copyrightable works distributed by
|
||||||
|
Google as part of the Go project.
|
||||||
|
|
||||||
|
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||||
|
no-charge, royalty-free, irrevocable (except as stated in this section)
|
||||||
|
patent license to make, have made, use, offer to sell, sell, import,
|
||||||
|
transfer and otherwise run, modify and propagate the contents of this
|
||||||
|
implementation of Go, where such license applies only to those patent
|
||||||
|
claims, both currently owned or controlled by Google and acquired in
|
||||||
|
the future, licensable by Google that are necessarily infringed by this
|
||||||
|
implementation of Go. This grant does not include claims that would be
|
||||||
|
infringed only as a consequence of further modification of this
|
||||||
|
implementation. If you or your agent or exclusive licensee institute or
|
||||||
|
order or agree to the institution of patent litigation against any
|
||||||
|
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
||||||
|
that this implementation of Go or any code incorporated within this
|
||||||
|
implementation of Go constitutes direct or contributory patent
|
||||||
|
infringement, or inducement of patent infringement, then any patent
|
||||||
|
rights granted to you under this License for this implementation of Go
|
||||||
|
shall terminate as of the date such litigation is filed.
|
||||||
+102
@@ -0,0 +1,102 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Package execabs is a drop-in replacement for os/exec
|
||||||
|
// that requires PATH lookups to find absolute paths.
|
||||||
|
// That is, execabs.Command("cmd") runs the same PATH lookup
|
||||||
|
// as exec.Command("cmd"), but if the result is a path
|
||||||
|
// which is relative, the Run and Start methods will report
|
||||||
|
// an error instead of running the executable.
|
||||||
|
//
|
||||||
|
// See https://blog.golang.org/path-security for more information
|
||||||
|
// about when it may be necessary or appropriate to use this package.
|
||||||
|
package execabs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ErrNotFound is the error resulting if a path search failed to find an executable file.
|
||||||
|
// It is an alias for exec.ErrNotFound.
|
||||||
|
var ErrNotFound = exec.ErrNotFound
|
||||||
|
|
||||||
|
// Cmd represents an external command being prepared or run.
|
||||||
|
// It is an alias for exec.Cmd.
|
||||||
|
type Cmd = exec.Cmd
|
||||||
|
|
||||||
|
// Error is returned by LookPath when it fails to classify a file as an executable.
|
||||||
|
// It is an alias for exec.Error.
|
||||||
|
type Error = exec.Error
|
||||||
|
|
||||||
|
// An ExitError reports an unsuccessful exit by a command.
|
||||||
|
// It is an alias for exec.ExitError.
|
||||||
|
type ExitError = exec.ExitError
|
||||||
|
|
||||||
|
func relError(file, path string) error {
|
||||||
|
return fmt.Errorf("%s resolves to executable in current directory (.%c%s)", file, filepath.Separator, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
// LookPath searches for an executable named file in the directories
|
||||||
|
// named by the PATH environment variable. If file contains a slash,
|
||||||
|
// it is tried directly and the PATH is not consulted. The result will be
|
||||||
|
// an absolute path.
|
||||||
|
//
|
||||||
|
// LookPath differs from exec.LookPath in its handling of PATH lookups,
|
||||||
|
// which are used for file names without slashes. If exec.LookPath's
|
||||||
|
// PATH lookup would have returned an executable from the current directory,
|
||||||
|
// LookPath instead returns an error.
|
||||||
|
func LookPath(file string) (string, error) {
|
||||||
|
path, err := exec.LookPath(file)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if filepath.Base(file) == file && !filepath.IsAbs(path) {
|
||||||
|
return "", relError(file, path)
|
||||||
|
}
|
||||||
|
return path, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func fixCmd(name string, cmd *exec.Cmd) {
|
||||||
|
if filepath.Base(name) == name && !filepath.IsAbs(cmd.Path) {
|
||||||
|
// exec.Command was called with a bare binary name and
|
||||||
|
// exec.LookPath returned a path which is not absolute.
|
||||||
|
// Set cmd.lookPathErr and clear cmd.Path so that it
|
||||||
|
// cannot be run.
|
||||||
|
lookPathErr := (*error)(unsafe.Pointer(reflect.ValueOf(cmd).Elem().FieldByName("lookPathErr").Addr().Pointer()))
|
||||||
|
if *lookPathErr == nil {
|
||||||
|
*lookPathErr = relError(name, cmd.Path)
|
||||||
|
}
|
||||||
|
cmd.Path = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CommandContext is like Command but includes a context.
|
||||||
|
//
|
||||||
|
// The provided context is used to kill the process (by calling os.Process.Kill)
|
||||||
|
// if the context becomes done before the command completes on its own.
|
||||||
|
func CommandContext(ctx context.Context, name string, arg ...string) *exec.Cmd {
|
||||||
|
cmd := exec.CommandContext(ctx, name, arg...)
|
||||||
|
fixCmd(name, cmd)
|
||||||
|
return cmd
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Command returns the Cmd struct to execute the named program with the given arguments.
|
||||||
|
// See exec.Command for most details.
|
||||||
|
//
|
||||||
|
// Command differs from exec.Command in its handling of PATH lookups,
|
||||||
|
// which are used when the program name contains no slashes.
|
||||||
|
// If exec.Command would have returned an exec.Cmd configured to run an
|
||||||
|
// executable from the current directory, Command instead
|
||||||
|
// returns an exec.Cmd that will return an error from Start or Run.
|
||||||
|
func Command(name string, arg ...string) *exec.Cmd {
|
||||||
|
cmd := exec.Command(name, arg...)
|
||||||
|
fixCmd(name, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
Vendored
+2
@@ -1,2 +1,4 @@
|
|||||||
# github.com/danieljoos/wincred v1.1.0
|
# github.com/danieljoos/wincred v1.1.0
|
||||||
github.com/danieljoos/wincred
|
github.com/danieljoos/wincred
|
||||||
|
# golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4
|
||||||
|
golang.org/x/sys/execabs
|
||||||
|
|||||||
Reference in New Issue
Block a user