diff options
| author | Aaron LI <aly@aaronly.me> | 2020-12-27 21:41:57 +0800 | 
|---|---|---|
| committer | Aaron LI <aly@aaronly.me> | 2020-12-27 21:41:57 +0800 | 
| commit | 4f2318ef5c45287feb5ec4248954107f599c8109 (patch) | |
| tree | 79acf9a9e9048fb685013d1bb97d085c26e662b4 /dfly-update | |
| parent | 3142ec6809343dc63488add4e1c92d0e73cccd2b (diff) | |
| download | dfly-update-4f2318ef5c45287feb5ec4248954107f599c8109.tar.bz2 | |
Fix add_users() issue about '_gids' variable
A pipe creates a subshell, so updates to the '_gids' variable would just
get lost after the while loop.  Use IO redirection instead of pipe to
fix this issue.
Diffstat (limited to 'dfly-update')
| -rwxr-xr-x | dfly-update | 26 | 
1 files changed, 15 insertions, 11 deletions
| diff --git a/dfly-update b/dfly-update index e8d6db7..f4ab6ed 100755 --- a/dfly-update +++ b/dfly-update @@ -1,6 +1,6 @@  #!/bin/sh  # -# Copyright (c) 2017-2019 Aaron LI <aly@aaronly.me> +# Copyright (c) 2017-2020 Aaron LI <aly@aaronly.me>  # MIT License  #  # Tool to update a DragonFly BSD system using binary releases or @@ -265,36 +265,40 @@ add_users() {      echo "  => Adding new users ..."      _gids="" -    grep -Ev '^(#.*|\s*)$' ${fpasswd} | -            while IFS=':' read -r _name _pw _uid _gid _class \ -                                  _change _expire _gecos _home _shell; do +    while IFS=':' read -r _name _pw _uid _gid _class \ +                          _change _expire _gecos _home _shell; do +        case ${_name} in +        '' | \#*) continue ;; +        esac          pw usershow ${_name} -q >/dev/null && continue          # NOTE: There is circular dependence: 'groupadd' requires the members          #       already exist, while 'useradd' requires the group exists.          #       So first assign new users to the 'nogroup' group, and make          #       adjustments after group creation. -        echo "   * ${_name}, ${_uid}, ${_gid}, ${_gecos}, ${_home}, ${_shell}" +        echo "   * ${_name}: ${_uid}, ${_gid}, ${_gecos}, ${_home}, ${_shell}"          pw useradd ${_name} \              -u ${_uid} -g nogroup -d ${_home} -s ${_shell} \              -L "${_class}" -c "${_gecos}" || exit ${EC_PW}          _gids="${_gids} ${_name}:${_gid}" -    done +    done < ${fpasswd}      echo "  => Adding new groups ..." -    grep -Ev '^(#.*|\s*)$' ${fgroup} | -            while IFS=':' read -r _name _pw _gid _members; do +    while IFS=':' read -r _name _pw _gid _members; do +        case ${_name} in +        '' | \#*) continue ;; +        esac          pw groupshow ${_name} -q >/dev/null && continue -        echo "   * ${_name}, ${_gid}, ${_members}" +        echo "   * ${_name}: ${_gid}, ${_members}"          pw groupadd ${_name} -g ${_gid} -M "${_members}" || exit ${EC_PW} -    done +    done < ${fgroup}      echo "  => Adjusting the group of new users ..."      for item in ${_gids}; do          _name=${item%:*}          _gid=${item#*:} -        echo "   * ${_name}, ${_gid}" +        echo "   * ${_name}: ${_gid}"          pw usermod ${_name} -g ${_gid} || exit ${EC_PW}      done  } | 
