1# This bbclass is used for image level user/group configuration.
2# Inherit this class if you want to make EXTRA_USERS_PARAMS effective.
3
4# Below is an example showing how to use this functionality.
5# IMAGE_CLASSES += "extrausers"
6# EXTRA_USERS_PARAMS = "\
7#     useradd -p '' tester; \
8#     groupadd developers; \
9#     userdel nobody; \
10#     groupdel -g video; \
11#     groupmod -g 1020 developers; \
12#     usermod -s /bin/sh tester; \
13# "
14
15inherit useradd_base
16
17PACKAGE_INSTALL_append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS'))]}"
18
19# Image level user / group settings
20ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;"
21
22# Image level user / group settings
23set_user_group () {
24	user_group_settings="${EXTRA_USERS_PARAMS}"
25	export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo"
26	setting=`echo $user_group_settings | cut -d ';' -f1`
27	remaining=`echo $user_group_settings | cut -d ';' -f2-`
28	while test "x$setting" != "x"; do
29		cmd=`echo $setting | cut -d ' ' -f1`
30		opts=`echo $setting | cut -d ' ' -f2-`
31		# Different from useradd.bbclass, there's no file locking issue here, as
32		# this setting is actually a serial process. So we only retry once.
33		case $cmd in
34			useradd)
35				perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
36				;;
37			groupadd)
38				perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
39				;;
40			userdel)
41				perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
42				;;
43			groupdel)
44				perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
45				;;
46			usermod)
47				perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
48				;;
49			groupmod)
50				perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
51				;;
52			*)
53				bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd"
54				;;
55		esac
56		# Avoid infinite loop if the last parameter doesn't end with ';'
57		if [ "$setting" = "$remaining" ]; then
58			break
59		fi
60		# iterate to the next setting
61		setting=`echo $remaining | cut -d ';' -f1`
62		remaining=`echo $remaining | cut -d ';' -f2-`
63	done
64}
65
66USERADDEXTENSION ?= ""
67
68inherit ${USERADDEXTENSION}
69