blob: c825c06df900be292cc3617c3d449b51a13c51c7 [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
Brad Bishop19323692019-04-05 15:28:33 -04007# This bbclass is used for image level user/group configuration.
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008# Inherit this class if you want to make EXTRA_USERS_PARAMS effective.
9
10# Below is an example showing how to use this functionality.
Brad Bishop19323692019-04-05 15:28:33 -040011# IMAGE_CLASSES += "extrausers"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050012# EXTRA_USERS_PARAMS = "\
Brad Bishop19323692019-04-05 15:28:33 -040013# useradd -p '' tester; \
14# groupadd developers; \
15# userdel nobody; \
16# groupdel -g video; \
17# groupmod -g 1020 developers; \
18# usermod -s /bin/sh tester; \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050019# "
20
Patrick Williamsc124f4f2015-09-15 14:41:29 -050021inherit useradd_base
22
Patrick Williams213cb262021-08-07 19:21:33 -050023PACKAGE_INSTALL:append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS'))]}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050024
25# Image level user / group settings
Andrew Geissler5082cc72023-09-11 08:41:39 -040026ROOTFS_POSTPROCESS_COMMAND:append = " set_user_group"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050027
28# Image level user / group settings
29set_user_group () {
30 user_group_settings="${EXTRA_USERS_PARAMS}"
31 export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo"
32 setting=`echo $user_group_settings | cut -d ';' -f1`
33 remaining=`echo $user_group_settings | cut -d ';' -f2-`
34 while test "x$setting" != "x"; do
35 cmd=`echo $setting | cut -d ' ' -f1`
36 opts=`echo $setting | cut -d ' ' -f2-`
37 # Different from useradd.bbclass, there's no file locking issue here, as
38 # this setting is actually a serial process. So we only retry once.
39 case $cmd in
40 useradd)
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050041 perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050042 ;;
43 groupadd)
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050044 perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050045 ;;
46 userdel)
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050047 perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050048 ;;
49 groupdel)
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050050 perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050051 ;;
52 usermod)
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050053 perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050054 ;;
Andrew Geissler6ce62a22020-11-30 19:58:47 -060055 passwd-expire)
56 perform_passwd_expire "${IMAGE_ROOTFS}" "$opts"
57 ;;
Patrick Williamsc124f4f2015-09-15 14:41:29 -050058 groupmod)
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050059 perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050060 ;;
61 *)
62 bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd"
63 ;;
64 esac
65 # Avoid infinite loop if the last parameter doesn't end with ';'
66 if [ "$setting" = "$remaining" ]; then
67 break
68 fi
69 # iterate to the next setting
70 setting=`echo $remaining | cut -d ';' -f1`
71 remaining=`echo $remaining | cut -d ';' -f2-`
72 done
73}
Brad Bishop6e60e8b2018-02-01 10:27:11 -050074
75USERADDEXTENSION ?= ""
76
77inherit ${USERADDEXTENSION}