Skip to content

Commit

Permalink
Added copying of ACLs to binded paths inside sandbox - Fixes issue #13
Browse files Browse the repository at this point in the history
  • Loading branch information
xSmurf committed Feb 2, 2016
1 parent d4db833 commit da3b779
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions fs/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"syscall"

"github.com/op/go-logging"
"github.com/naegelejd/go-acl"

"github.com/subgraph/oz"
)
Expand Down Expand Up @@ -49,7 +50,8 @@ func (fs *Filesystem) CreateEmptyDir(target string) error {
if err := os.MkdirAll(fs.absPath(target), fi.Mode().Perm()); err != nil {
return err
}
return copyFileInfo(fi, target)

return copyFileInfo(fi, nil, target)
}

func (fs *Filesystem) CreateDevice(devpath string, dev int, mode uint32, gid int) error {
Expand Down Expand Up @@ -233,7 +235,13 @@ func readSourceInfo(src string, cancreate bool, u *user.User) (os.FileInfo, erro
return nil, err
}

if err := copyFileInfo(pinfo, src); err != nil {
acls, err := acl.GetFileAccess(path.Dir(src))
if err != nil {
return nil, err
}
defer acls.Free()

if err := copyFileInfo(pinfo, acls, src); err != nil {
return nil, err
}

Expand Down Expand Up @@ -460,12 +468,23 @@ func copyFilePermissions(src, target string) error {
if err != nil {
return err
}
return copyFileInfo(fi, target)
acls, err := acl.GetFileAccess(src)
if err != nil {
return err
}
defer acls.Free()

return copyFileInfo(fi, acls, target)
}

func copyFileInfo(info os.FileInfo, target string) error {
func copyFileInfo(info os.FileInfo, acls *acl.ACL, target string) error {
st := info.Sys().(*syscall.Stat_t)
os.Chown(target, int(st.Uid), int(st.Gid))
os.Chmod(target, info.Mode().Perm())
if acls != nil {
if err := acls.SetFileAccess(target); err != nil {
return err
}
}
return nil
}

0 comments on commit da3b779

Please sign in to comment.