diff options
Diffstat (limited to 'meta/classes/useradd_base.bbclass')
| -rw-r--r-- | meta/classes/useradd_base.bbclass | 195 |
1 files changed, 56 insertions, 139 deletions
diff --git a/meta/classes/useradd_base.bbclass b/meta/classes/useradd_base.bbclass index 7aafe29a4a..551c82c322 100644 --- a/meta/classes/useradd_base.bbclass +++ b/meta/classes/useradd_base.bbclass @@ -4,7 +4,7 @@ # The following functions basically have similar logic. # *) Perform necessary checks before invoking the actual command -# *) Invoke the actual command, make retries if necessary +# *) Invoke the actual command with flock # *) Error out if an error occurs. # Note that before invoking these functions, make sure the global variable @@ -13,158 +13,97 @@ perform_groupadd () { local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing groupadd with [$opts] and $retries times of retry" + 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 - local count=0 - while true; do - eval $PSEUDO groupadd $opts || true - group_exists="`grep "^$groupname:" $rootdir/etc/group || true`" - if test "x$group_exists" = "x"; then - bbwarn "groupadd command did not succeed. Retrying..." - sleep 1 - else - break - fi - count=`expr $count + 1` - if test $count = $retries; then - bbfatal "Tried running groupadd command $retries times without scucess, giving up" - fi - done + 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 - bbwarn "group $groupname already exists, not re-creating it" + bbnote "${PN}: group $groupname already exists, not re-creating it" fi } perform_useradd () { local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing useradd with [$opts] and $retries times of retry" + 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 - local count=0 - while true; do - eval $PSEUDO useradd $opts || true - user_exists="`grep "^$username:" $rootdir/etc/passwd || true`" - if test "x$user_exists" = "x"; then - bbwarn "useradd command did not succeed. Retrying..." - sleep 1 - else - break - fi - count=`expr $count + 1` - if test $count = $retries; then - bbfatal "Tried running useradd command $retries times without scucess, giving up" - fi - done + 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 - bbwarn "user $username already exists, not re-creating it" + bbnote "${PN}: user $username already exists, not re-creating it" fi } perform_groupmems () { local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing groupmems with [$opts] and $retries times of retry" + 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 "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 + bbnote "${PN}: Running groupmems command with group $groupname and user $username" local mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`" if test "x$mem_exists" = "x"; then - local count=0 - while true; do - eval $PSEUDO groupmems $opts || true - mem_exists="`grep "^$groupname:[^:]*:[^:]*:\([^,]*,\)*$username\(,[^,]*\)*" $rootdir/etc/group || true`" - if test "x$mem_exists" = "x"; then - bbwarn "groupmems command did not succeed. Retrying..." - sleep 1 - else - break - fi - count=`expr $count + 1` - if test $count = $retries; then - if test "x$gshadow" = "xno"; then - rm -f $rootdir${sysconfdir}/gshadow - rm -f $rootdir${sysconfdir}/gshadow- - fi - bbfatal "Tried running groupmems command $retries times without scucess, giving up" - fi - done + 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 - bbwarn "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- + bbnote "${PN}: group $groupname already contains $username, not re-adding it" fi } perform_groupdel () { local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing groupdel with [$opts] and $retries times of retry" + 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 - local count=0 - while true; do - eval $PSEUDO groupdel $opts || true + local awk_input='BEGIN {FS=":"}; $1=="'$groupname'" { print $3 }' + local groupid=`echo "$awk_input" | awk -f- $rootdir/etc/group` + local awk_check_users='BEGIN {FS=":"}; $4=="'$groupid'" {print $1}' + local other_users=`echo "$awk_check_users" | awk -f- $rootdir/etc/passwd` + + if test "x$other_users" = "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 - bbwarn "groupdel command did not succeed. Retrying..." - sleep 1 - else - break + bbfatal "${PN}: groupdel command did not succeed." fi - count=`expr $count + 1` - if test $count = $retries; then - bbfatal "Tried running groupdel command $retries times without scucess, giving up" - fi - done + else + bbnote "${PN}: '$groupname' is primary group for users '$other_users', not removing it" + fi else - bbwarn "group $groupname doesn't exist, not removing it" + bbnote "${PN}: group $groupname doesn't exist, not removing it" fi } perform_userdel () { local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing userdel with [$opts] and $retries times of retry" + 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 - local count=0 - while true; do - eval $PSEUDO userdel $opts || true - user_exists="`grep "^$username:" $rootdir/etc/passwd || true`" - if test "x$user_exists" != "x"; then - bbwarn "userdel command did not succeed. Retrying..." - sleep 1 - else - break - fi - count=`expr $count + 1` - if test $count = $retries; then - bbfatal "Tried running userdel command $retries times without scucess, giving up" - fi - done + 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 - bbwarn "user $username doesn't exist, not removing it" + bbnote "${PN}: user $username doesn't exist, not removing it" fi } @@ -174,27 +113,16 @@ perform_groupmod () { set +e local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing groupmod with [$opts] and $retries times of retry" + 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 - local count=0 - while true; do - eval $PSEUDO groupmod $opts - if test $? != 0; then - bbwarn "groupmod command did not succeed. Retrying..." - sleep 1 - else - break - fi - count=`expr $count + 1` - if test $count = $retries; then - bbfatal "Tried running groupmod command $retries times without scucess, giving up" - fi - done + eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO groupmod \$opts\" + if test $? != 0; then + bbwarn "${PN}: groupmod command did not succeed." + fi else - bbwarn "group $groupname doesn't exist, unable to modify it" + bbwarn "${PN}: group $groupname doesn't exist, unable to modify it" fi set -e } @@ -204,27 +132,16 @@ perform_usermod () { set +e local rootdir="$1" local opts="$2" - local retries="$3" - bbnote "Performing usermod with [$opts] and $retries times of retry" + 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 - local count=0 - while true; do - eval $PSEUDO usermod $opts - if test $? != 0; then - bbwarn "usermod command did not succeed. Retrying..." - sleep 1 - else - break - fi - count=`expr $count + 1` - if test $count = $retries; then - bbfatal "Tried running usermod command $retries times without scucess, giving up" - fi - done + eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO usermod \$opts\" + if test $? != 0; then + bbfatal "${PN}: usermod command did not succeed." + fi else - bbwarn "user $username doesn't exist, unable to modify it" + bbwarn "${PN}: user $username doesn't exist, unable to modify it" fi set -e } |
