Merge pull request #482 from andres-erbsen/user-groups-freebsd

__user_groups: refactor, support FreeBSD
This commit is contained in:
Darko Poljak 2017-01-14 10:53:01 +01:00 committed by GitHub
commit 8e5e8c040d
2 changed files with 19 additions and 25 deletions

View File

@ -18,11 +18,4 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
os="$($__explorer/os)"
if [ "$os" = "netbsd" ]; then
echo netbsd
exit
fi
usermod --help | grep -q -- '-A group' && echo true || echo false

View File

@ -23,19 +23,6 @@ state_should="$(cat "$__object/parameter/state")"
oldusermod="$(cat "$__object/explorer/oldusermod")"
os=$(cat "$__global/explorer/os")
if [ "$os" = "netbsd" ]; then
# NetBSD does not have a command to remove a user from a group
oldusermod="true"
addparam="-G"
delparam=";;#"
elif [ "$oldusermod" = "true" ]; then
addparam="-A"
delparam="-R"
else
addparam="-a"
delparam="-d"
fi
mkdir "$__object/files"
# file has to be sorted for comparison with `comm`
sort "$__object/parameter/group" > "$__object/files/group.sorted"
@ -43,11 +30,9 @@ sort "$__object/parameter/group" > "$__object/files/group.sorted"
case "$state_should" in
present)
changed_groups="$(comm -13 "$__object/explorer/group" "$__object/files/group.sorted")"
action="$addparam"
;;
absent)
changed_groups="$(comm -12 "$__object/explorer/group" "$__object/files/group.sorted")"
action="$delparam"
;;
esac
@ -57,9 +42,25 @@ if [ -z "$changed_groups" ]; then
fi
for group in $changed_groups; do
if [ "$oldusermod" = "true" ]; then
echo "usermod $action \"$group\" \"$user\""
if [ "$os" = "netbsd" ]; then
case "$state_should" in
present) echo "usermod -G \"$group\" \"$user\"" ;;
absent) echo 'NetBSD does not have a command to remove a user from a group' >&2 ; exit 1 ;;
esac
elif [ "$os" = "freebsd" ]; then
case "$state_should" in
present) echo "pw groupmod \"$group\" -m \"$user\"" ;;
absent) echo "pw groupmod \"$group\" -d \"$user\"" ;;
esac
elif [ "$oldusermod" = "true" ]; then
case "$state_should" in
present) echo "usermod -A \"$group\" \"$user\"" ;;
absent) echo "usermod -R \"$group\" \"$user\"" ;;
esac
else
echo "gpasswd $action \"$user\" \"$group\""
case "$state_should" in
present) echo "gpasswd -a \"$group\" \"$user\"" ;;
absent) echo "gpasswd -d \"$group\" \"$user\"" ;;
esac
fi
done