summaryrefslogtreecommitdiff
path: root/source/lib/util_getent.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/lib/util_getent.c')
-rw-r--r--source/lib/util_getent.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/source/lib/util_getent.c b/source/lib/util_getent.c
index 81b36effcb4..05b6f0c2358 100644
--- a/source/lib/util_getent.c
+++ b/source/lib/util_getent.c
@@ -246,18 +246,16 @@ static struct sys_userlist *add_members_to_userlist(struct sys_userlist *list_he
for (i = 0; i < num_users; i++) {
struct sys_userlist *entry = (struct sys_userlist *)malloc(sizeof(*entry));
- size_t len = strlen(grp->gr_mem[i])+1;
if (entry == NULL) {
free_userlist(list_head);
return NULL;
}
- entry->unix_name = (char *)malloc(len);
+ entry->unix_name = strdup(grp->gr_mem[i]);
if (entry->unix_name == NULL) {
SAFE_FREE(entry);
free_userlist(list_head);
return NULL;
}
- safe_strcpy(entry->unix_name, grp->gr_mem[i],len);
DLIST_ADD(list_head, entry);
}
return list_head;
@@ -286,6 +284,11 @@ struct sys_userlist *get_users_in_group(const char *gname)
return add_members_to_userlist(list_head, gptr);
}
+#if !defined(BROKEN_GETGRNAM)
+ if ((gptr = (struct group *)getgrnam(gname)) == NULL)
+ return NULL;
+ return add_members_to_userlist(list_head, gptr);
+#else
setgrent();
while((gptr = getgrent()) != NULL) {
if (strequal(gname, gptr->gr_name)) {
@@ -296,6 +299,7 @@ struct sys_userlist *get_users_in_group(const char *gname)
}
endgrent();
return list_head;
+#endif
}
/****************************************************************