Files
server-deploy/internal/aptrepo/artifacts_linux_test.go

45 lines
1.0 KiB
Go

package aptrepo
import (
"os"
"path"
"path/filepath"
"syscall"
"testing"
)
func TestArtifactRejectsSymlinksAndFIFO(t *testing.T) {
for _, kind := range []string{"root-link", "file-link", "fifo"} {
t.Run(kind, func(t *testing.T) {
dir, lock := artifactFixture(t)
filename := filepath.Join(dir, path.Base(lock.Packages[0].Filename))
switch kind {
case "root-link":
link := filepath.Join(t.TempDir(), "link")
if err := os.Symlink(dir, link); err != nil {
t.Fatal(err)
}
dir = link + "/"
case "file-link":
target := filepath.Join(t.TempDir(), "target")
if err := os.Rename(filename, target); err != nil {
t.Fatal(err)
}
if err := os.Symlink(target, filename); err != nil {
t.Fatal(err)
}
case "fifo":
if err := os.Remove(filename); err != nil {
t.Fatal(err)
}
if err := syscall.Mkfifo(filename, 0600); err != nil {
t.Fatal(err)
}
}
if err := verifyArtifacts(dir, lock); err == nil {
t.Fatal("unsafe file accepted")
}
})
}
}