mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00

When creating users at the image level using extrausers class, the current behavior is to ignore the status of USERADDEXTENSION. This could lead to undefined behavior when static ids are expected but the system falls back to dynamic ones. (From OE-Core rev: 331140e892f84b70bced44a0b5d14f32ec95042e) Signed-off-by: David Vincent <freesilicon@gmail.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
70 lines
2.0 KiB
Plaintext
70 lines
2.0 KiB
Plaintext
# This bbclass is mainly used for image level user/group configuration.
|
|
# Inherit this class if you want to make EXTRA_USERS_PARAMS effective.
|
|
|
|
# Below is an example showing how to use this functionality.
|
|
# INHERIT += "extrausers"
|
|
# EXTRA_USERS_PARAMS = "\
|
|
# useradd -p '' tester; \
|
|
# groupadd developers; \
|
|
# userdel nobody; \
|
|
# groupdel -g video; \
|
|
# groupmod -g 1020 developers; \
|
|
# usermod -s /bin/sh tester; \
|
|
# "
|
|
|
|
|
|
inherit useradd_base
|
|
|
|
PACKAGE_INSTALL_append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS'))]}"
|
|
|
|
# Image level user / group settings
|
|
ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;"
|
|
|
|
# Image level user / group settings
|
|
set_user_group () {
|
|
user_group_settings="${EXTRA_USERS_PARAMS}"
|
|
export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo"
|
|
setting=`echo $user_group_settings | cut -d ';' -f1`
|
|
remaining=`echo $user_group_settings | cut -d ';' -f2-`
|
|
while test "x$setting" != "x"; do
|
|
cmd=`echo $setting | cut -d ' ' -f1`
|
|
opts=`echo $setting | cut -d ' ' -f2-`
|
|
# Different from useradd.bbclass, there's no file locking issue here, as
|
|
# this setting is actually a serial process. So we only retry once.
|
|
case $cmd in
|
|
useradd)
|
|
perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
|
|
;;
|
|
groupadd)
|
|
perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
|
|
;;
|
|
userdel)
|
|
perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
|
|
;;
|
|
groupdel)
|
|
perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
|
|
;;
|
|
usermod)
|
|
perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
|
|
;;
|
|
groupmod)
|
|
perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
|
|
;;
|
|
*)
|
|
bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd"
|
|
;;
|
|
esac
|
|
# Avoid infinite loop if the last parameter doesn't end with ';'
|
|
if [ "$setting" = "$remaining" ]; then
|
|
break
|
|
fi
|
|
# iterate to the next setting
|
|
setting=`echo $remaining | cut -d ';' -f1`
|
|
remaining=`echo $remaining | cut -d ';' -f2-`
|
|
done
|
|
}
|
|
|
|
USERADDEXTENSION ?= ""
|
|
|
|
inherit ${USERADDEXTENSION}
|