osbuild-jobsite-builder: unpack source tarball in populate
This commit is contained in:
parent
07598ea65c
commit
b4e361e093
2 changed files with 45 additions and 0 deletions
2
Makefile
2
Makefile
|
|
@ -125,6 +125,8 @@ build: $(BUILDDIR)/bin/
|
||||||
go build -o $<osbuild-upload-generic-s3 ./cmd/osbuild-upload-generic-s3/
|
go build -o $<osbuild-upload-generic-s3 ./cmd/osbuild-upload-generic-s3/
|
||||||
go build -o $<osbuild-mock-openid-provider ./cmd/osbuild-mock-openid-provider
|
go build -o $<osbuild-mock-openid-provider ./cmd/osbuild-mock-openid-provider
|
||||||
go build -o $<osbuild-service-maintenance ./cmd/osbuild-service-maintenance
|
go build -o $<osbuild-service-maintenance ./cmd/osbuild-service-maintenance
|
||||||
|
go build -o $<osbuild-jobsite-manager ./cmd/osbuild-jobsite-manager
|
||||||
|
go build -o $<osbuild-jobsite-builder ./cmd/osbuild-jobsite-builder
|
||||||
go test -c -tags=integration -o $<osbuild-composer-cli-tests ./cmd/osbuild-composer-cli-tests/main_test.go
|
go test -c -tags=integration -o $<osbuild-composer-cli-tests ./cmd/osbuild-composer-cli-tests/main_test.go
|
||||||
go test -c -tags=integration -o $<osbuild-weldr-tests ./internal/client/
|
go test -c -tags=integration -o $<osbuild-weldr-tests ./internal/client/
|
||||||
go test -c -tags=integration -o $<osbuild-dnf-json-tests ./cmd/osbuild-dnf-json-tests/main_test.go
|
go test -c -tags=integration -o $<osbuild-dnf-json-tests ./cmd/osbuild-dnf-json-tests/main_test.go
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"archive/tar"
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
|
@ -12,6 +13,8 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -206,6 +209,46 @@ func (builder *Builder) HandlePopulate(w http.ResponseWriter, r *http.Request) e
|
||||||
if r.Method != "POST" {
|
if r.Method != "POST" {
|
||||||
return fmt.Errorf("Builder.HandlePopulate: unexpected request method")
|
return fmt.Errorf("Builder.HandlePopulate: unexpected request method")
|
||||||
}
|
}
|
||||||
|
storePath := path.Join(argBuildPath, "store")
|
||||||
|
err := os.Mkdir(storePath, 0755)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Builder.HandlePopulate: failed to make store directory: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tarReader := tar.NewReader(r.Body)
|
||||||
|
for header, err := tarReader.Next(); err != io.EOF; header, err = tarReader.Next() {
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Builder.HandlerPopulate: failed to unpack sources: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// gosec seems overly zealous here, as the destination gets verified
|
||||||
|
dest := filepath.Join(storePath, header.Name) // #nosec G305
|
||||||
|
if !strings.HasPrefix(dest, filepath.Clean(storePath)) {
|
||||||
|
return fmt.Errorf("Builder.HandlerPopulate: name not clean: %v doesn't have %v prefix", dest, filepath.Clean(storePath))
|
||||||
|
}
|
||||||
|
|
||||||
|
switch header.Typeflag {
|
||||||
|
case tar.TypeDir:
|
||||||
|
if err := os.Mkdir(dest, header.FileInfo().Mode()); err != nil {
|
||||||
|
return fmt.Errorf("Builder.HandlerPopulate: unable to make dir in sources: %v", err)
|
||||||
|
}
|
||||||
|
case tar.TypeReg:
|
||||||
|
file, err := os.Create(dest)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Builder.HandlerPopulate: unable to open file in sources: %v", err)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
// the inputs are trusted so ignore G110
|
||||||
|
_, err = io.Copy(file, tarReader) // #nosec G110
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Builder.HandlerPopulate: unable to write file in sources: %v", err)
|
||||||
|
}
|
||||||
|
file.Close()
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Builder.HandlerPopulate: unexpected tar header type: %v", header.Typeflag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue