12345678910111213141516171819202122232425262728293031323334 |
- //go:build linux && go1.16
- // +build linux,go1.16
- package selinux
- import (
- "errors"
- "io/fs"
- "os"
- "github.com/opencontainers/selinux/pkg/pwalkdir"
- )
- func rchcon(fpath, label string) error {
- fastMode := false
- // If the current label matches the new label, assume
- // other labels are correct.
- if cLabel, err := lFileLabel(fpath); err == nil && cLabel == label {
- fastMode = true
- }
- return pwalkdir.Walk(fpath, func(p string, _ fs.DirEntry, _ error) error {
- if fastMode {
- if cLabel, err := lFileLabel(fpath); err == nil && cLabel == label {
- return nil
- }
- }
- e := lSetFileLabel(p, label)
- // Walk a file tree can race with removal, so ignore ENOENT.
- if errors.Is(e, os.ErrNotExist) {
- return nil
- }
- return e
- })
- }
|