workaround about getent not being available
Costa Tsaousis (ktsaou) committed
Apr 2, 2017 at 19:46 UTC
a7ec7a43a51eed9c3e137a89b36f206331c21e69
1 file changed
+47
-5
installer/functions.sh
+47
-5
@@ -178,10 +178,53 @@ run() {
178
return ${ret}
179
}
180
181
+getent_cmd="$(which_cmd getent)"
182
+portable_check_user_exists() {
183
+ local username="${1}" found=
184
+
185
+ if [ ! -z "${getent_cmd}" ]
186
+ then
187
+ "${getent_cmd}" passwd "${username}" >/dev/null 2>&1
188
+ return $?
189
+ fi
190
+
191
+ found="$(cut -d ':' -f 1 </etc/passwd | grep "^${username}$")"
192
+ [ "${found}" = "${username}" ] && return 0
193
+ return 1
194
+}
195
+
196
+portable_check_group_exists() {
197
+ local groupname="${1}" found=
198
+
199
+ if [ ! -z "${getent_cmd}" ]
200
+ then
201
+ "${getent_cmd}" group "${groupname}" >/dev/null 2>&1
202
+ return $?
203
+ fi
204
+
205
+ found="$(cut -d ':' -f 1 </etc/group | grep "^${groupname}$")"
206
+ [ "${found}" = "${groupname}" ] && return 0
207
+ return 1
208
+}
209
+
210
+portable_check_user_in_group() {
211
+ local username="${1}" groupname="${2}" users=
212
+
213
+ if [ ! -z "${getent_cmd}" ]
214
+ then
215
+ users="$(getent group "${groupname}" | cut -d ':' -f 4)"
216
+ else
217
+ users="$(grep "^${groupname}:" </etc/group | cut -d ':' -f 4)"
218
+ fi
219
+
220
+ [[ ",${users}," =~ ,${username}, ]] && return 0
221
+ return 1
222
+}
223
+
224
portable_add_user() {
225
local username="${1}"
226
184
- getent passwd "${username}" > /dev/null 2>&1
227
+ portable_check_user_exists "${username}"
228
[ $? -eq 0 ] && echo >&2 "User '${username}' already exists." && return 0
229
230
echo >&2 "Adding ${username} user account ..."
@@ -214,7 +257,7 @@ portable_add_user() {
257
portable_add_group() {
258
local groupname="${1}"
259
217
- getent group "${groupname}" > /dev/null 2>&1
260
+ portable_check_group_exists "${groupname}"
261
[ $? -eq 0 ] && echo >&2 "Group '${groupname}' already exists." && return 0
262
263
echo >&2 "Adding ${groupname} user group ..."
@@ -244,12 +287,11 @@ portable_add_group() {
287
portable_add_user_to_group() {
288
local groupname="${1}" username="${2}"
289
247
- getent group "${groupname}" > /dev/null 2>&1
290
+ portable_check_group_exists "${groupname}"
291
[ $? -ne 0 ] && echo >&2 "Group '${groupname}' does not exist." && return 1
292
293
# find the user is already in the group
251
- local users=$(getent group "${groupname}" | cut -d ':' -f 4)
252
- if [[ ",${users}," =~ ,${username}, ]]
294
+ if portable_check_user_in_group "${username}" "${groupname}"
295
then
296
# username is already there
297
echo >&2 "User '${username}' is already in group '${groupname}'."