1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#!/bin/sh
# Copyright 2022 Simon McVittie
# SPDX-License-Identifier: GPL-2.0-or-later
# create-normal-user [USERNAME]
# Create an ordinary, unprivileged user.
set -eu
usage () {
echo "Usage: create-normal-user [USERNAME]" >&2
exit 2
}
create () {
# shellcheck disable=SC3043
local user="$1"
shift
if command -v adduser >/dev/null; then
adduser \
--disabled-login \
--gecos 'Temporary autopkgtest user,,,' \
"$user" 2>&1
elif command -v useradd >/dev/null; then
useradd \
--comment 'Temporary autopkgtest user' \
--create-home \
--expiredate '' \
--user-group \
"$user" 2>&1
else
echo "Neither adduser nor useradd is installed" >&2
return 1
fi
echo "$user" > /run/autopkgtest-normal-user
}
case "${1-}" in
(--)
shift
;;
(-*)
usage
;;
esac
if [ "$#" -gt 1 ]; then
usage
fi
if [ "$#" -eq 1 ]; then
create "$1"
exit 0
fi
tries=20
for i in $(seq 0 "$tries"); do
if [ "$i" = 0 ]; then
user="test"
else
random=$(mktemp /tmp/test-XXXXXX)
user="$(basename "$random")"
rm -f "$random"
fi
if getent passwd "$user" >/dev/null; then
echo "create-normal-user: '$user' already exists"
else
create "$user"
exit 0
fi
done
echo "create-normal-user: Unable to generate a new username (tried $tries times)" >&2
exit 1
|