In c0da4270c76375a7a8cbcc09319fe4570ebbc5bd two bbwarn were changed to bbnote for the case where an added user or group already exists. The same should have been done for groupmems, groupdel and userdel as well since the warnings that are currently generated are superflouous. The two remaining similar bbwarn for groupmod and usermod are left as is since there they actually make sense. (From OE-Core rev: f775e4cffe45edb673a414a2038c4f2b09b9b827) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
231 lines
7.4 KiB
Text
231 lines
7.4 KiB
Text
# This bbclass provides basic functionality for user/group settings.
|
|
# This bbclass is intended to be inherited by useradd.bbclass and
|
|
# extrausers.bbclass.
|
|
|
|
# The following functions basically have similar logic.
|
|
# *) Perform necessary checks before invoking the actual command
|
|
# *) Invoke the actual command, make retries if necessary
|
|
# *) Error out if an error occurs.
|
|
|
|
# Note that before invoking these functions, make sure the global variable
|
|
# PSEUDO is set up correctly.
|
|
|
|
perform_groupadd () {
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing groupadd with [$opts] and $retries times of retry"
|
|
local groupname=`echo "$opts" | awk '{ print $NF }'`
|
|
local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
|
|
if test "x$group_exists" = "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO groupadd $opts || true
|
|
group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
|
|
if test "x$group_exists" = "x"; then
|
|
bbwarn "${PN}: groupadd command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
bbfatal "${PN}: Tried running groupadd command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbnote "${PN}: group $groupname already exists, not re-creating it"
|
|
fi
|
|
}
|
|
|
|
perform_useradd () {
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing useradd with [$opts] and $retries times of retry"
|
|
local username=`echo "$opts" | awk '{ print $NF }'`
|
|
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
|
|
if test "x$user_exists" = "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO useradd $opts || true
|
|
user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
|
|
if test "x$user_exists" = "x"; then
|
|
bbwarn "${PN}: useradd command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
bbfatal "${PN}: Tried running useradd command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbnote "${PN}: user $username already exists, not re-creating it"
|
|
fi
|
|
}
|
|
|
|
perform_groupmems () {
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing groupmems with [$opts] and $retries times of retry"
|
|
local groupname=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-g" || $i == "--group") print $(i+1) }'`
|
|
local username=`echo "$opts" | awk '{ for (i = 1; i < NF; i++) if ($i == "-a" || $i == "--add") print $(i+1) }'`
|
|
bbnote "${PN}: Running groupmems command with group $groupname and user $username"
|
|
# groupmems fails if /etc/gshadow does not exist
|
|
local gshadow=""
|
|
if [ -f $rootdir${sysconfdir}/gshadow ]; then
|
|
gshadow="yes"
|
|
else
|
|
gshadow="no"
|
|
touch $rootdir${sysconfdir}/gshadow
|
|
fi
|
|
local mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`"
|
|
if test "x$mem_exists" = "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO groupmems $opts || true
|
|
mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`"
|
|
if test "x$mem_exists" = "x"; then
|
|
bbwarn "${PN}: groupmems command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
if test "x$gshadow" = "xno"; then
|
|
rm -f $rootdir${sysconfdir}/gshadow
|
|
rm -f $rootdir${sysconfdir}/gshadow-
|
|
fi
|
|
bbfatal "${PN}: Tried running groupmems command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbnote "${PN}: group $groupname already contains $username, not re-adding it"
|
|
fi
|
|
if test "x$gshadow" = "xno"; then
|
|
rm -f $rootdir${sysconfdir}/gshadow
|
|
rm -f $rootdir${sysconfdir}/gshadow-
|
|
fi
|
|
}
|
|
|
|
perform_groupdel () {
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing groupdel with [$opts] and $retries times of retry"
|
|
local groupname=`echo "$opts" | awk '{ print $NF }'`
|
|
local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
|
|
if test "x$group_exists" != "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO groupdel $opts || true
|
|
group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
|
|
if test "x$group_exists" != "x"; then
|
|
bbwarn "${PN}: groupdel command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
bbfatal "${PN}: Tried running groupdel command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbnote "${PN}: group $groupname doesn't exist, not removing it"
|
|
fi
|
|
}
|
|
|
|
perform_userdel () {
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing userdel with [$opts] and $retries times of retry"
|
|
local username=`echo "$opts" | awk '{ print $NF }'`
|
|
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
|
|
if test "x$user_exists" != "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO userdel $opts || true
|
|
user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
|
|
if test "x$user_exists" != "x"; then
|
|
bbwarn "${PN}: userdel command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
bbfatal "${PN}: Tried running userdel command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbnote "${PN}: user $username doesn't exist, not removing it"
|
|
fi
|
|
}
|
|
|
|
perform_groupmod () {
|
|
# Other than the return value of groupmod, there's no simple way to judge whether the command
|
|
# succeeds, so we disable -e option temporarily
|
|
set +e
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing groupmod with [$opts] and $retries times of retry"
|
|
local groupname=`echo "$opts" | awk '{ print $NF }'`
|
|
local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
|
|
if test "x$group_exists" != "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO groupmod $opts
|
|
if test $? != 0; then
|
|
bbwarn "${PN}: groupmod command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
bbfatal "${PN}: Tried running groupmod command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbwarn "${PN}: group $groupname doesn't exist, unable to modify it"
|
|
fi
|
|
set -e
|
|
}
|
|
|
|
perform_usermod () {
|
|
# Same reason with groupmod, temporarily disable -e option
|
|
set +e
|
|
local rootdir="$1"
|
|
local opts="$2"
|
|
local retries="$3"
|
|
bbnote "${PN}: Performing usermod with [$opts] and $retries times of retry"
|
|
local username=`echo "$opts" | awk '{ print $NF }'`
|
|
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
|
|
if test "x$user_exists" != "x"; then
|
|
local count=0
|
|
while true; do
|
|
eval $PSEUDO usermod $opts
|
|
if test $? != 0; then
|
|
bbwarn "${PN}: usermod command did not succeed. Retrying..."
|
|
else
|
|
break
|
|
fi
|
|
count=`expr $count + 1`
|
|
if test $count = $retries; then
|
|
bbfatal "${PN}: Tried running usermod command $retries times without success, giving up"
|
|
fi
|
|
sleep $count
|
|
done
|
|
else
|
|
bbwarn "${PN}: user $username doesn't exist, unable to modify it"
|
|
fi
|
|
set -e
|
|
}
|