policycoreutils/fixfiles: Fix [-B] [-F] onboot

Commit 6e289bb7bf ("policycoreutils: fixfiles: remove bad modes of "relabel"
command") added "$RESTORE_MODE" != DEFAULT test when onboot is used. It makes
`fixfiles -B onboot` to show usage instead of updating /.autorelabel

The code is restructured to handle -B for different modes correctly.

Fixes:
    # fixfiles -B onboot
    Usage: /usr/sbin/fixfiles [-v] [-F] [-f] relabel
    ...

Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
This commit is contained in:
Petr Lautrbach 2019-09-24 21:08:53 +02:00 committed by Stephen Smalley
parent 152aeb152f
commit d3a8fc4c03
1 changed files with 15 additions and 14 deletions

View File

@ -111,7 +111,7 @@ VERBOSE="-p"
FORCEFLAG=""
RPMFILES=""
PREFC=""
RESTORE_MODE="DEFAULT"
RESTORE_MODE=""
SETFILES=/sbin/setfiles
RESTORECON=/sbin/restorecon
FILESYSTEMSRW=`get_rw_labeled_mounts`
@ -213,16 +213,17 @@ restore () {
OPTION=$1
shift
case "$RESTORE_MODE" in
PREFC)
diff_filecontext $*
return
;;
BOOTTIME)
# [-B | -N time ]
if [ -n "$BOOTTIME" ]; then
newer $BOOTTIME $*
return
;;
esac
fi
# -C PREVIOUS_FILECONTEXT
if [ "$RESTORE_MODE" == PREFC ]; then
diff_filecontext $*
return
fi
[ -x /usr/sbin/genhomedircon ] && /usr/sbin/genhomedircon
@ -238,7 +239,7 @@ case "$RESTORE_MODE" in
FILEPATH)
${RESTORECON} ${VERBOSE} ${EXCLUDEDIRS} ${FORCEFLAG} $* -R -- "$FILEPATH"
;;
DEFAULT)
*)
if [ -n "${FILESYSTEMSRW}" ]; then
LogReadOnly
echo "${OPTION}ing `echo ${FILESYSTEMSRW}`"
@ -271,7 +272,7 @@ fullrelabel() {
relabel() {
if [ "$RESTORE_MODE" != DEFAULT ]; then
if [ -n "$RESTORE_MODE" -a "$RESTORE_MODE" != DEFAULT ]; then
usage
exit 1
fi
@ -305,7 +306,7 @@ case "$1" in
verify) VERBOSE="-v"; restore Verify -n;;
relabel) relabel;;
onboot)
if [ "$RESTORE_MODE" != DEFAULT ]; then
if [ -n "$RESTORE_MODE" -a "$RESTORE_MODE" != DEFAULT ]; then
usage
exit 1
fi
@ -343,7 +344,7 @@ if [ $# -eq 0 ]; then
fi
set_restore_mode() {
if [ "$RESTORE_MODE" != DEFAULT ]; then
if [ -n "$RESTORE_MODE" ]; then
# can't specify two different modes
usage
exit 1
@ -356,7 +357,7 @@ while getopts "N:BC:FfR:l:v" i; do
case "$i" in
B)
BOOTTIME=`/bin/who -b | awk '{print $3}'`
set_restore_mode BOOTTIME
set_restore_mode DEFAULT
;;
N)
BOOTTIME=$OPTARG