Make sure dirs are created before injecting file

Upstream-commit: 20f690f1762e369e9ad761e166f22ff57a17275a
Component: engine
This commit is contained in:
Michael Crosby
2013-11-08 12:06:15 -08:00
parent 4c9c43a611
commit c94da34819
+11 -2
View File
@@ -396,7 +396,8 @@ func (container *Container) Inject(file io.Reader, pth string) error {
}
// Return error if path exists
if _, err := os.Stat(path.Join(container.RootfsPath(), pth)); err == nil {
destPath := path.Join(container.RootfsPath(), pth)
if _, err := os.Stat(destPath); err == nil {
// Since err is nil, the path could be stat'd and it exists
return fmt.Errorf("%s exists", pth)
} else if !os.IsNotExist(err) {
@@ -405,10 +406,18 @@ func (container *Container) Inject(file io.Reader, pth string) error {
return err
}
dest, err := os.Create(path.Join(container.RootfsPath(), pth))
// Make sure the directory exists
if err := os.MkdirAll(path.Join(container.RootfsPath(), path.Dir(pth)), 0755); err != nil {
return err
}
dest, err := os.Create(destPath)
if err != nil {
return err
}
defer dest.Close()
if _, err := io.Copy(dest, file); err != nil {
return err
}