systemd-presets-common-SUSE/branding-preset-states
Johannes Segitz 10c2843411 Accepting request 1093930 from home:alarrosa:branches:Base:System
- Fix another case of systemctl being called with an empty
  argument. This if a preemptive fix for a similar issue to
  bsc#1212496.

OBS-URL: https://build.opensuse.org/request/show/1093930
OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd-presets-common-SUSE?expand=0&rev=61
2023-06-20 09:38:41 +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