systemd-presets-branding-op.../branding-preset-states
Marcus Meissner 38ce564eef Accepting request 445123 from home:fbui:branches:Base:System
- Import preset macros from systemd-rpm-macro and convert them into
  scripts.
  Presets are not supposed to be shipped by other packages as the
  default policy needs to be reviewed by the secteam. Therefore don't
  encourage packagers to do that and make those macros private to this
  package.
  Also convert them into real scripts so they're much easier to
  maintain and debug. Also working in %posttrans is unneeded as this
  package is assumed to be the only one to update the preset.

- There's no need to reload the daemon configuration as presets are
  not part of the dameon config.

OBS-URL: https://build.opensuse.org/request/show/445123
OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd-presets-branding-openSUSE?expand=0&rev=83
2016-12-12 12:42:29 +00:00

121 lines
2.6 KiB
Bash

#! /bin/bash
#
# Written by sbrabec@suse.com
#
declare -a PRESET_FILES
declare -A PRESETS
declare -A PRESETS_OLD
declare -A PRESETS_OLD_WILDCARD
declare -A PRESETS_WILDCARD
save_preset_states () {
PRESET_FILES=(*.preset)
for ((i=${#PRESET_FILES[@]}-1 ; i>= 0 ; i-- )) ; do
FILE=${PRESET_FILES[i]}
exec 3<"$FILE"
while read -u3 ENABLE SERVICE PAD ; do
if test -z "$SERVICE" ; then
continue;
fi
case "$ENABLE" in
enable|disable)
PRESETS[$SERVICE]=$ENABLE;;
esac
done
exec 3<&-
done
exec 3>systemd_preset-old.rpm-tmp
for PRESET in "${!PRESETS[@]}" ; do
echo >&3 "${PRESETS[$PRESET]} $PRESET"
done
exec 3>&-
}
apply_preset_state_changes () {
if ! test -f systemd_preset-old.rpm-tmp ; then
return
fi
exec 3<systemd_preset-old.rpm-tmp
while read -u3 ENABLE SERVICE PAD ; do
if test -z "$SERVICE" ; then
continue
fi
case "$ENABLE" in
enable|disable)
case $SERVICE in
*"*"*|*"?"*) PRESETS_OLD_WILDCARD[$SERVICE]=$ENABLE;;
*) PRESETS_OLD[$SERVICE]=$ENABLE;;
esac
esac
done
exec 3<&-
PRESET_FILES=(*.preset)
for ((i=${#PRESET_FILES[@]}-1 ; i>= 0 ; i-- )) ; do
FILE=${PRESET_FILES[i]}
exec 3<"$FILE"
while read -u3 ENABLE SERVICE PAD ; do
if test -z "$SERVICE" ; then
continue
fi
case "$ENABLE" in
enable|disable)
case $SERVICE in
*"*"*|*"?"*) PRESETS_WILDCARD[$SERVICE]=$ENABLE;;
*) PRESETS[$SERVICE]=$ENABLE;;
esac
esac
done
exec 3<&-
done
if test -x /usr/bin/systemctl ; then
/usr/bin/systemctl --type=service,socket list-unit-files
fi >systemd_preset-states.rpm-tmp
exec 3<systemd_preset-states.rpm-tmp
read -u3 PAD
while read -u3 SERVICE ENABLE PAD ; do
if test -z "$SERVICE" ; then
break
fi
# FIXME: This is not strictly correct as associative
# arrays are not ordered.
ENABLE_OLD=enable
for PRESET in "${!PRESETS_OLD_WILDCARD[@]}" ; do
case "$SERVICE" in
$PRESET) ENABLE_OLD=${PRESETS_OLD_WILDCARD[$PRESET]};;
esac
done
if test -n "${PRESETS_OLD[$SERVICE]}" ; then
ENABLE_OLD="${PRESETS_OLD[$SERVICE]}"
fi
ENABLE_NEW=enable
for PRESET in "${!PRESETS_WILDCARD[@]}" ; do
case "$SERVICE" in
$PRESET) ENABLE_NEW=${PRESETS_WILDCARD[$PRESET]};;
esac
done
if test -n "${PRESETS[$SERVICE]}" ; then
ENABLE_NEW="${PRESETS[$SERVICE]}"
fi
if test "$ENABLE_OLD" != "$ENABLE_NEW" ; then
echo "Resetting $SERVICE to the new default: $ENABLE_NEW"
/usr/bin/systemctl preset "$SERVICE" || :
fi
done
exec 3<&-
rm -f systemd_preset-{old,states}.rpm-tmp
}
cd /usr/lib/systemd/system-preset
case $1 in
apply-changes)
apply_preset_state_changes ;;
save)
save_preset_states ;;
*)
echo >&2 "Unkown command '$1'"
exit 1
esac