blob: 8d3ae9dd4036f8d3e3cea9a092c98c86c119191d [file]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package selinux
import (
"os"
"sync"
)
// Please sync with platform2/sepolicy/sepolicy/file_contexts/coreutils,
// which is obtained by `equery-$BOARD files coreutils`, and then
// manually filtered.
var coreutilsFiles = []string{
"/bin/basename",
"/bin/cat",
"/bin/chgrp",
"/bin/chmod",
"/bin/chown",
"/bin/chroot",
"/bin/cp",
"/bin/cut",
"/bin/date",
"/bin/dd",
"/bin/df",
"/bin/dir",
"/bin/dirname",
"/bin/du",
"/bin/echo",
"/bin/env",
"/bin/expr",
"/bin/false",
"/bin/head",
"/bin/ln",
"/bin/ls",
"/bin/mkdir",
"/bin/mkfifo",
"/bin/mknod",
"/bin/mktemp",
"/bin/mv",
"/bin/pwd",
"/bin/readlink",
"/bin/rm",
"/bin/rmdir",
"/bin/seq",
"/bin/sleep",
"/bin/sort",
"/bin/stty",
"/bin/sync",
"/bin/tail",
"/bin/touch",
"/bin/tr",
"/bin/true",
"/bin/tty",
"/bin/uname",
"/bin/vdir",
"/bin/wc",
"/bin/yes",
"/usr/bin/[",
"/usr/bin/arch",
"/usr/bin/base32",
"/usr/bin/base64",
"/usr/bin/basename",
"/usr/bin/chcon",
"/usr/bin/chroot",
"/usr/bin/cksum",
"/usr/bin/comm",
"/usr/bin/coreutils",
"/usr/bin/csplit",
"/usr/bin/cut",
"/usr/bin/dir",
"/usr/bin/dircolors",
"/usr/bin/dirname",
"/usr/bin/du",
"/usr/bin/env",
"/usr/bin/expand",
"/usr/bin/expr",
"/usr/bin/factor",
"/usr/bin/fmt",
"/usr/bin/fold",
"/usr/bin/head",
"/usr/bin/hostid",
"/usr/bin/id",
"/usr/bin/install",
"/usr/bin/join",
"/usr/bin/link",
"/usr/bin/logname",
"/usr/bin/md5sum",
"/usr/bin/mkfifo",
"/usr/bin/mktemp",
"/usr/bin/nice",
"/usr/bin/nl",
"/usr/bin/nohup",
"/usr/bin/nproc",
"/usr/bin/numfmt",
"/usr/bin/od",
"/usr/bin/paste",
"/usr/bin/pathchk",
"/usr/bin/pinky",
"/usr/bin/pr",
"/usr/bin/printenv",
"/usr/bin/printf",
"/usr/bin/ptx",
"/usr/bin/readlink",
"/usr/bin/realpath",
"/usr/bin/runcon",
"/usr/bin/seq",
"/usr/bin/sha1sum",
"/usr/bin/sha224sum",
"/usr/bin/sha256sum",
"/usr/bin/sha384sum",
"/usr/bin/sha512sum",
"/usr/bin/shred",
"/usr/bin/shuf",
"/usr/bin/sleep",
"/usr/bin/sort",
"/usr/bin/split",
"/usr/bin/stat",
"/usr/bin/stdbuf",
"/usr/bin/sum",
"/usr/bin/tac",
"/usr/bin/tail",
"/usr/bin/tee",
"/usr/bin/test",
"/usr/bin/timeout",
"/usr/bin/touch",
"/usr/bin/tr",
"/usr/bin/truncate",
"/usr/bin/tsort",
"/usr/bin/tty",
"/usr/bin/uname",
"/usr/bin/unexpand",
"/usr/bin/uniq",
"/usr/bin/unlink",
"/usr/bin/users",
"/usr/bin/vdir",
"/usr/bin/wc",
"/usr/bin/who",
"/usr/bin/whoami",
"/usr/bin/yes",
}
var coreutilsOnce sync.Once // initialize coreutilsSet
var coreutilsSet map[string]struct{} // keys are files belonging to coreutils.
// SkipCoreutilsFile is a FileLabelCheckFilter that returns (Skip, Check)
// if the given file belongs to the coreutils package.
func SkipCoreutilsFile(p string, fi os.FileInfo) (skipFile, skipSubdir FilterResult) {
coreutilsOnce.Do(func() {
coreutilsSet = make(map[string]struct{}, len(coreutilsFiles))
for _, f := range coreutilsFiles {
coreutilsSet[f] = struct{}{}
}
})
_, ok := coreutilsSet[p]
if ok {
return Skip, Check
}
return Check, Check
}