summaryrefslogtreecommitdiff
path: root/grp/initgroups.c
diff options
context:
space:
mode:
Diffstat (limited to 'grp/initgroups.c')
-rw-r--r--grp/initgroups.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/grp/initgroups.c b/grp/initgroups.c
index f42c92db9a..454882e0af 100644
--- a/grp/initgroups.c
+++ b/grp/initgroups.c
@@ -59,12 +59,18 @@ compat_call (service_user *nip, const char *user, gid_t group, long int *start,
get_function getgrent_fct;
end_function endgrent_fct;
+ getgrent_fct = __nss_lookup_function (nip, "getgrent_r");
+ if (getgrent_fct == NULL)
+ return NSS_STATUS_UNAVAIL;
+
setgrent_fct = __nss_lookup_function (nip, "setgrent");
- status = _CALL_DL_FCT (setgrent_fct, ());
- if (status != NSS_STATUS_SUCCESS)
- return status;
+ if (setgrent_fct)
+ {
+ status = _CALL_DL_FCT (setgrent_fct, ());
+ if (status != NSS_STATUS_SUCCESS)
+ return status;
+ }
- getgrent_fct = __nss_lookup_function (nip, "getgrent_r");
endgrent_fct = __nss_lookup_function (nip, "endgrent");
tmpbuf = __alloca (buflen);
@@ -115,7 +121,8 @@ compat_call (service_user *nip, const char *user, gid_t group, long int *start,
while (status == NSS_STATUS_SUCCESS);
done:
- _CALL_DL_FCT (endgrent_fct, ());
+ if (endgrent_fct)
+ _CALL_DL_FCT (endgrent_fct, ());
return NSS_STATUS_SUCCESS;
}