Files
poky/meta/classes/useradd_base.bbclass
Maxin B. John 17e4586d6e useradd_base: avoid unintended expansion for useradd parameters
Now, useradd dollar sign requires three prepending backslash characters to
avoid unintended expansion. It used to be just one prepending backslash
character before Krogoth. Restore that behaviour.

[YOCTO #10062]

(From OE-Core rev: 9e43a73c7ad576666d53c8c9e0283bc6bb9087a8)

(From OE-Core rev: 42a0d59d5923fb43882d8e60f6973b45b263e262)

Signed-off-by: Niko Mauno <niko.mauno@vaisala.com>
Signed-off-by: Maxin B. John <maxin.john@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2016-09-23 15:27:04 +01:00

150 lines
5.2 KiB
Plaintext

# 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 with flock
# *) 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"
bbnote "${PN}: Performing groupadd with [$opts]"
local groupname=`echo "$opts" | awk '{ print $NF }'`
local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
if test "x$group_exists" = "x"; then
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO groupadd \$opts\" || true
group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
if test "x$group_exists" = "x"; then
bbfatal "${PN}: groupadd command did not succeed."
fi
else
bbnote "${PN}: group $groupname already exists, not re-creating it"
fi
}
perform_useradd () {
local rootdir="$1"
local opts="$2"
bbnote "${PN}: Performing useradd with [$opts]"
local username=`echo "$opts" | awk '{ print $NF }'`
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
if test "x$user_exists" = "x"; then
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO useradd \$opts\" || true
user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
if test "x$user_exists" = "x"; then
bbfatal "${PN}: useradd command did not succeed."
fi
else
bbnote "${PN}: user $username already exists, not re-creating it"
fi
}
perform_groupmems () {
local rootdir="$1"
local opts="$2"
bbnote "${PN}: Performing groupmems with [$opts]"
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
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO groupmems \$opts\" || true
mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`"
if test "x$mem_exists" = "x"; then
bbfatal "${PN}: groupmems command did not succeed."
fi
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"
bbnote "${PN}: Performing groupdel with [$opts]"
local groupname=`echo "$opts" | awk '{ print $NF }'`
local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
if test "x$group_exists" != "x"; then
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO groupdel \$opts\" || true
group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
if test "x$group_exists" != "x"; then
bbfatal "${PN}: groupdel command did not succeed."
fi
else
bbnote "${PN}: group $groupname doesn't exist, not removing it"
fi
}
perform_userdel () {
local rootdir="$1"
local opts="$2"
bbnote "${PN}: Performing userdel with [$opts]"
local username=`echo "$opts" | awk '{ print $NF }'`
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
if test "x$user_exists" != "x"; then
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO userdel \$opts\" || true
user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
if test "x$user_exists" != "x"; then
bbfatal "${PN}: userdel command did not succeed."
fi
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"
bbnote "${PN}: Performing groupmod with [$opts]"
local groupname=`echo "$opts" | awk '{ print $NF }'`
local group_exists="`grep "^$groupname:" $rootdir/etc/group || true`"
if test "x$group_exists" != "x"; then
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO groupmod \$opts\"
if test $? != 0; then
bbwarn "${PN}: groupmod command did not succeed."
fi
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"
bbnote "${PN}: Performing usermod with [$opts]"
local username=`echo "$opts" | awk '{ print $NF }'`
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
if test "x$user_exists" != "x"; then
eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO usermod \$opts\"
if test $? != 0; then
bbfatal "${PN}: usermod command did not succeed."
fi
else
bbwarn "${PN}: user $username doesn't exist, unable to modify it"
fi
set -e
}