systemd-presets-common-SUSE/branding-preset-states
Marcus Meissner 1e5f5bfc47 Accepting request 982585 from home:alarrosa:branches:Base:System
- Modify branding-preset-states to fix systemd-presets-common-SUSE
  not enabling new user systemd service preset configuration just
  as it handles system service presets. By passing an (optional)
  second parameter "user", the save/apply-changes commands now
  work with user services instead of system ones (boo#1200485)

OBS-URL: https://build.opensuse.org/request/show/982585
OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd-presets-common-SUSE?expand=0&rev=47
2022-06-22 09:47:59 +00:00

127 lines
2.7 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 list-unit-files "$GLOBAL"
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 "$GLOBAL" "$SERVICE" || :
fi
done
exec 3<&-
rm -f systemd_preset-{old,states}.rpm-tmp
}
if test "$2" == "user" ; then
cd /usr/lib/systemd/user-preset
GLOBAL="--global"
else
cd /usr/lib/systemd/system-preset
GLOBAL=""
fi
case $1 in
apply-changes)
apply_preset_state_changes ;;
save)
save_preset_states ;;
*)
echo >&2 "Unkown command '$1'"
exit 1
esac