sysuser-tools/sysusers2shadow.sh
Thorsten Kukuk c81af58db0 Accepting request 871208 from home:kukuk:etc
- Use systemd-sysusers only if /proc is mounted, don't require it
- Set --replace option for systemd-sysusers

OBS-URL: https://build.opensuse.org/request/show/871208
OBS-URL: https://build.opensuse.org/package/show/Base:System/sysuser-tools?expand=0&rev=40
2021-02-11 12:54:07 +00:00

106 lines
2.5 KiB
Bash

#!/bin/sh
set -eu
# Print the command and run it
run() {
echo "$@"
"$@"
}
if [ -x /usr/bin/systemd-sysusers ] && [ -e /proc/version ]; then
test -n "$1" && REPLACE_ARG="--replace=/usr/lib/sysusers.d/$1" ||:
# Use systemd-sysusers and let it read the input directly from stdin
/usr/bin/systemd-sysusers $REPLACE_ARG -
# We need to clear the nscd cache, as systemd-sysusers could have
# triggered a negative cache entry
if [ -x /usr/sbin/nscd ]; then
/usr/sbin/nscd -i passwd ||:
/usr/sbin/nscd -i group ||:
fi
else
# Absolute path to busybox, if found
busybox=
for i in /bin/busybox /usr/bin/busybox; do [ -x "$i" ] && busybox=$i; done
while read LINE
do
# "eval set" to do proper splitting while respecting quotes
eval set -- $LINE
case "${1-}" in
\#*|"")
;;
g)
shift
ARGUMENTS="$1"
if [ -n "${2-}" ] && [ "$2" != "-" ]; then
ARGUMENTS="-g $2 $ARGUMENTS"
fi
if ! /usr/bin/getent group "$1" >> /dev/null; then
if [ -x "/usr/sbin/groupadd" ]; then
run /usr/sbin/groupadd -r $ARGUMENTS
elif [ -x "$busybox" ]; then
run $busybox addgroup -S $ARGUMENTS
else
echo "ERROR: neither groupadd nor busybox found!"
exit 1
fi
fi
;;
u)
shift
ARGUMENTS="$1"
if [ -n "${2-}" ] && [ "$2" != "-" ]; then
ARGUMENTS="-u $2 $ARGUMENTS"
fi
homedir="/" # If null, empty or '-'
if [ "${4:--}" != "-" ]; then
homedir="$4"
fi
if [ -x /usr/sbin/useradd ]; then
if ! /usr/bin/getent passwd "$1" >> /dev/null; then
# this is useradd/shadow specific
if /usr/bin/getent group "$1" >> /dev/null; then
ARGUMENTS="-g $1 $ARGUMENTS"
else
ARGUMENTS="-U $ARGUMENTS"
fi
run /usr/sbin/useradd -r -s /sbin/nologin -c "$3" -d "${homedir}" $ARGUMENTS
fi
elif [ -x "$busybox" ]; then
/usr/bin/getent group "$1" >> /dev/null || $busybox addgroup -S "$1"
if ! /usr/bin/getent passwd "$1" >> /dev/null; then
run $busybox adduser -S -H -s /sbin/nologin -g "$3" -G "$1" -h "${homedir}" $ARGUMENTS
fi
else
echo "ERROR: neither useradd nor busybox found!"
exit 1
fi
;;
m)
shift
if [ -x /usr/sbin/usermod ] ; then
run /usr/sbin/usermod -a -G $2 $1
elif [ -x "$busybox" ]; then
run $busybox addgroup $1 $2
else
echo "ERROR: neither usermod nor busybox found!"
exit 1
fi
;;
r)
echo "range option ignored: \"$LINE\""
;;
*)
echo "Syntax Error: \"$LINE\""
exit 1
;;
esac
done
fi