[__group] Fall back to /etc files if getent(1) is not available

Some (embedded) systems (and Mac OS X) don't provide getent(1). The workaround
parses /etc/group under the assumption that the system only uses local users and
groups.
This commit is contained in:
Dennis Camera 2019-10-01 10:04:57 +02:00
parent 97bcfcc23c
commit bad3a4a4cb
2 changed files with 40 additions and 9 deletions

View file

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc) # 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -21,7 +22,21 @@
# Get an existing groups group entry. # Get an existing groups group entry.
# #
not_supported() {
echo "Your operating system ($("$__explorer/os")) is currently not supported." >&2
echo "Cannot extract group information." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
}
name=$__object_id name=$__object_id
if command -v getent >/dev/null
then
getent group "$name" || true getent group "$name" || true
elif [ -f /etc/group ]
then
grep "^${name}:" /etc/group || true
else
not_supported
fi

View file

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc) # 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -22,13 +23,28 @@
# #
name=$__object_id name=$__object_id
os="$("$__explorer/os")" os=$("$__explorer/os")
case "$os" in not_supported() {
echo "Your operating system ($os) is currently not supported." >&2
echo "Cannot extract group information." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
}
case $os in
"freebsd"|"netbsd") "freebsd"|"netbsd")
echo "$os does not have getent gshadow" echo "$os does not have getent gshadow" >&2
exit 0 exit 0
;; ;;
esac esac
if command -v getent >/dev/null
then
getent gshadow "$name" || true getent gshadow "$name" || true
elif [ -f /etc/gshadow ]
then
grep "^${name}:" /etc/gshadow || true
else
not_supported
fi