package gopathrs
import "github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs"
Package gopathrs is a less complete pure Go implementation of some of the APIs provided by libpathrs.
Index ¶
- Variables
- func MkdirAllHandle(root *os.File, unsafePath string, mode os.FileMode) (_ *os.File, Err error)
- func OpenatInRoot(root *os.File, unsafePath string) (*os.File, error)
- func PartialLookupInRoot(root fd.Fd, unsafePath string) (*os.File, string, error)
Variables ¶
ErrInvalidMode is returned from [MkdirAll] when the requested mode is invalid.
Functions ¶
func MkdirAllHandle ¶
MkdirAllHandle is equivalent to [MkdirAll], except that it is safer to use in two respects:
The caller provides the root directory as an *os.File (preferably O_PATH) handle. This means that the caller can be sure which root directory is being used. Note that this can be emulated by using /proc/self/fd/... as the root path with os.MkdirAll.
Once all of the directories have been created, an *os.File O_PATH handle to the directory at unsafePath is returned to the caller. This is done in an effectively-race-free way (an attacker would only be able to swap the final directory component), which is not possible to emulate with [MkdirAll].
In addition, the returned handle is obtained far more efficiently than doing a brand new lookup of unsafePath (such as with SecureJoin or openat2) after doing [MkdirAll]. If you intend to open the directory after creating it, you should use MkdirAllHandle.
func OpenatInRoot ¶
OpenatInRoot is equivalent to [OpenInRoot], except that the root is provided using an *os.File handle, to ensure that the correct root directory is used.
func PartialLookupInRoot ¶
PartialLookupInRoot tries to lookup as much of the request path as possible within the provided root (a-la RESOLVE_IN_ROOT) and opens the final existing component of the requested path, returning a file handle to the final existing component and a string containing the remaining path components.
Source Files ¶
doc.go lookup_linux.go mkdir_linux.go open_linux.go openat2_linux.go
- Version
- v0.6.1 (latest)
- Published
- Nov 19, 2025
- Platform
- linux/amd64
- Imports
- 13 packages
- Last checked
- 47 minutes ago –
Tools for package owners.