From 749c1780621163ca5108f164861324bafa9e0ae8 Mon Sep 17 00:00:00 2001 From: Balint Reczey Date: Sun, 7 Nov 2021 15:18:49 +0100 Subject: New upstream version 4.9 --- lib/groupmem.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'lib/groupmem.c') diff --git a/lib/groupmem.c b/lib/groupmem.c index 1fd1c135..2060d03b 100644 --- a/lib/groupmem.c +++ b/lib/groupmem.c @@ -87,20 +87,55 @@ return gr; } -void gr_free (/*@out@*/ /*@only@*/struct group *grent) +void gr_free_members (struct group *grent) { - free (grent->gr_name); - if (NULL != grent->gr_passwd) { - memzero (grent->gr_passwd, strlen (grent->gr_passwd)); - free (grent->gr_passwd); - } if (NULL != grent->gr_mem) { size_t i; for (i = 0; NULL != grent->gr_mem[i]; i++) { free (grent->gr_mem[i]); } free (grent->gr_mem); + grent->gr_mem = NULL; } +} + +void gr_free (/*@out@*/ /*@only@*/struct group *grent) +{ + free (grent->gr_name); + if (NULL != grent->gr_passwd) { + memzero (grent->gr_passwd, strlen (grent->gr_passwd)); + free (grent->gr_passwd); + } + gr_free_members(grent); free (grent); } +bool gr_append_member(struct group *grp, char *member) +{ + int i; + + if (NULL == grp->gr_mem || grp->gr_mem[0] == NULL) { + grp->gr_mem = (char **)malloc(2 * sizeof(char *)); + if (!grp->gr_mem) { + return false; + } + grp->gr_mem[0] = strdup(member); + if (!grp->gr_mem[0]) { + return false; + } + grp->gr_mem[1] = NULL; + return true; + } + + for (i = 0; grp->gr_mem[i]; i++) ; + grp->gr_mem = realloc(grp->gr_mem, (i + 2) * sizeof(char *)); + if (NULL == grp->gr_mem) { + return false; + } + grp->gr_mem[i] = strdup(member); + if (NULL == grp->gr_mem[i]) { + return false; + } + grp->gr_mem[i + 1] = NULL; + return true; +} -- cgit v1.2.1