blob: faf57b108e52865f2e4ac827526021b27bd6c2ca [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001# This bbclass is mainly 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# INHERIT += "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
15
16inherit useradd_base
17
18IMAGE_INSTALL_append = " ${@['', 'base-passwd shadow'][bool(d.getVar('EXTRA_USERS_PARAMS', True))]}"
19
20# Image level user / group settings
21ROOTFS_POSTPROCESS_COMMAND_append = " set_user_group;"
22
23# Image level user / group settings
24set_user_group () {
25 user_group_settings="${EXTRA_USERS_PARAMS}"
26 export PSEUDO="${FAKEROOTENV} ${STAGING_DIR_NATIVE}${bindir}/pseudo"
27 setting=`echo $user_group_settings | cut -d ';' -f1`
28 remaining=`echo $user_group_settings | cut -d ';' -f2-`
29 while test "x$setting" != "x"; do
30 cmd=`echo $setting | cut -d ' ' -f1`
31 opts=`echo $setting | cut -d ' ' -f2-`
32 # Different from useradd.bbclass, there's no file locking issue here, as
33 # this setting is actually a serial process. So we only retry once.
34 case $cmd in
35 useradd)
36 perform_useradd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1
37 ;;
38 groupadd)
39 perform_groupadd "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1
40 ;;
41 userdel)
42 perform_userdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1
43 ;;
44 groupdel)
45 perform_groupdel "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1
46 ;;
47 usermod)
48 perform_usermod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1
49 ;;
50 groupmod)
51 perform_groupmod "${IMAGE_ROOTFS}" "-R ${IMAGE_ROOTFS} $opts" 1
52 ;;
53 *)
54 bbfatal "Invalid command in EXTRA_USERS_PARAMS: $cmd"
55 ;;
56 esac
57 # Avoid infinite loop if the last parameter doesn't end with ';'
58 if [ "$setting" = "$remaining" ]; then
59 break
60 fi
61 # iterate to the next setting
62 setting=`echo $remaining | cut -d ';' -f1`
63 remaining=`echo $remaining | cut -d ';' -f2-`
64 done
65}