generic-poky/meta/classes/useradd_base.bbclass
Robert Yang f292979302 useradd_base.bbclass: do not warn when the user exists
Use bbnote rather than bbwarn when the user exists, otherwise we would
always get the warnings when rebuild the recipe or build with mulitlib,
everything is OK if the user exists, so it should not be a warning.

(From OE-Core rev: c0da4270c76375a7a8cbcc09319fe4570ebbc5bd)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2015-08-01 22:24:16 +01:00

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
bbwarn "${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
bbwarn "${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
bbwarn "${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
}