Merge pull request #5428 from walkafwalka/fix/plugin-tar-extract-perms

Preserve file permissions from tarball during plugin install
pull/5374/head
Matthew Fisher 6 years ago committed by GitHub
commit 59ea688813
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -195,7 +195,7 @@ func (g *TarGzExtractor) Extract(buffer *bytes.Buffer, targetDir string) error {
return err return err
} }
case tar.TypeReg: case tar.TypeReg:
outFile, err := os.Create(path) outFile, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode))
if err != nil { if err != nil {
return err return err
} }

@ -25,6 +25,7 @@ import (
"k8s.io/helm/pkg/helm/helmpath" "k8s.io/helm/pkg/helm/helmpath"
"os" "os"
"path/filepath" "path/filepath"
"syscall"
"testing" "testing"
) )
@ -213,19 +214,22 @@ func TestExtract(t *testing.T) {
//{"README.md", "so you know what's upp"}, //{"README.md", "so you know what's upp"},
//{"script.sh", "echo script"}, //{"script.sh", "echo script"},
syscall.Umask(0000)
var tarbuf bytes.Buffer var tarbuf bytes.Buffer
tw := tar.NewWriter(&tarbuf) tw := tar.NewWriter(&tarbuf)
var files = []struct { var files = []struct {
Name, Body string Name, Body string
Mode int64
}{ }{
{"../../plugin.yaml", "sneaky plugin metadata"}, {"../../plugin.yaml", "sneaky plugin metadata", 0600},
{"README.md", "some text"}, {"README.md", "some text", 0777},
} }
for _, file := range files { for _, file := range files {
hdr := &tar.Header{ hdr := &tar.Header{
Name: file.Name, Name: file.Name,
Typeflag: tar.TypeReg, Typeflag: tar.TypeReg,
Mode: 0600, Mode: file.Mode,
Size: int64(len(file.Body)), Size: int64(len(file.Body)),
} }
if err := tw.WriteHeader(hdr); err != nil { if err := tw.WriteHeader(hdr); err != nil {
@ -257,21 +261,25 @@ func TestExtract(t *testing.T) {
} }
pluginYAMLFullPath := filepath.Join(cacheDir, "plugin.yaml") pluginYAMLFullPath := filepath.Join(cacheDir, "plugin.yaml")
if _, err := os.Stat(pluginYAMLFullPath); err != nil { if info, err := os.Stat(pluginYAMLFullPath); err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
t.Errorf("Expected %s to exist but doesn't", pluginYAMLFullPath) t.Errorf("Expected %s to exist but doesn't", pluginYAMLFullPath)
} else { } else {
t.Error(err) t.Error(err)
} }
} else if info.Mode().Perm() != 0600 {
t.Errorf("Expected %s to have 0600 mode it but has %o", pluginYAMLFullPath, info.Mode().Perm())
} }
readmeFullPath := filepath.Join(cacheDir, "README.md") readmeFullPath := filepath.Join(cacheDir, "README.md")
if _, err := os.Stat(readmeFullPath); err != nil { if info, err := os.Stat(readmeFullPath); err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
t.Errorf("Expected %s to exist but doesn't", readmeFullPath) t.Errorf("Expected %s to exist but doesn't", readmeFullPath)
} else { } else {
t.Error(err) t.Error(err)
} }
} else if info.Mode().Perm() != 0777 {
t.Errorf("Expected %s to have 0777 mode it but has %o", readmeFullPath, info.Mode().Perm())
} }
} }

Loading…
Cancel
Save