os.Symlink("/etc/passwd", realTemp+"/p1")
// Relative outside output dir
- os.Symlink("..", realTemp+"/p2")
+ os.Symlink("../zip", realTemp+"/p2")
// Circular references
os.Symlink("p4", realTemp+"/p3")
for _, v := range []string{"p1", "p2", "p3", "p4", "p5"} {
info, err := os.Lstat(realTemp + "/" + v)
- _, err = cr.UploadOutputFile(realTemp+"/"+v, info, err, []string{}, nil, "", "")
+ _, _, _, err = cr.derefOutputSymlink(realTemp+"/"+v, info)
c.Assert(err, NotNil)
}
}
+
+func (s *TestSuite) TestEvalSymlinkDir(c *C) {
+ cr := NewContainerRunner(&ArvTestClient{callraw: true}, &KeepTestClient{}, nil, "zzzzz-zzzzz-zzzzzzzzzzzzzzz")
+
+ realTemp, err := ioutil.TempDir("", "crunchrun_test-")
+ c.Assert(err, IsNil)
+ defer os.RemoveAll(realTemp)
+
+ cr.HostOutputDir = realTemp
+
+ // Absolute path outside output dir
+ os.Symlink(".", realTemp+"/loop")
+
+ v := "loop"
+ info, err := os.Lstat(realTemp + "/" + v)
+ _, err = cr.UploadOutputFile(realTemp+"/"+v, info, err, []string{}, nil, "", "", 0)
+ c.Assert(err, NotNil)
+}