bfb810445c
`VolumeOptions` now has a `Subpath` field which allows to specify a path relative to the volume that should be mounted as a destination. Symlinks are supported, but they cannot escape the base volume directory. Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
42 lines
975 B
Go
42 lines
975 B
Go
package safepath
|
|
|
|
// ErrNotAccessible is returned by Join when the resulting path doesn't exist,
|
|
// is not accessible, or any of the path components was replaced with a symlink
|
|
// during the path traversal.
|
|
type ErrNotAccessible struct {
|
|
Path string
|
|
Cause error
|
|
}
|
|
|
|
func (*ErrNotAccessible) NotFound() {}
|
|
|
|
func (e *ErrNotAccessible) Unwrap() error {
|
|
return e.Cause
|
|
}
|
|
|
|
func (e *ErrNotAccessible) Error() string {
|
|
msg := "cannot access path " + e.Path
|
|
if e.Cause != nil {
|
|
msg += ": " + e.Cause.Error()
|
|
}
|
|
return msg
|
|
}
|
|
|
|
// ErrEscapesBase is returned by Join when the resulting concatenation would
|
|
// point outside of the specified base directory.
|
|
type ErrEscapesBase struct {
|
|
Base, Subpath string
|
|
}
|
|
|
|
func (*ErrEscapesBase) InvalidParameter() {}
|
|
|
|
func (e *ErrEscapesBase) Error() string {
|
|
msg := "path concatenation escapes the base directory"
|
|
if e.Base != "" {
|
|
msg += ", base: " + e.Base
|
|
}
|
|
if e.Subpath != "" {
|
|
msg += ", subpath: " + e.Subpath
|
|
}
|
|
return msg
|
|
}
|