mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
New gr_add function to provide a clean and safe method to append a new member
into an existing group. Submitted by: db
This commit is contained in:
parent
98e79fb122
commit
be49c83011
2 changed files with 42 additions and 0 deletions
|
|
@ -478,6 +478,46 @@ gr_dup(const struct group *gr)
|
|||
return (&gs->gr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a new member name to a struct group.
|
||||
*/
|
||||
struct group *
|
||||
gr_add(struct group *gr, const char *newmember)
|
||||
{
|
||||
size_t mlen;
|
||||
int num_mem=0;
|
||||
char **members;
|
||||
struct group *newgr;
|
||||
|
||||
if (newmember == NULL)
|
||||
return(gr_dup(gr));
|
||||
|
||||
if (gr->gr_mem != NULL) {
|
||||
for (num_mem = 0; gr->gr_mem[num_mem] != NULL; num_mem++) {
|
||||
if (strcmp(gr->gr_mem[num_mem], newmember) == 0) {
|
||||
errno = EEXIST;
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Allocate enough for current pointers + 1 more and NULL marker */
|
||||
mlen = (num_mem + 2) * sizeof(*gr->gr_mem);
|
||||
if ((members = calloc(1, mlen )) == NULL) {
|
||||
errno = ENOMEM;
|
||||
return (NULL);
|
||||
}
|
||||
memcpy(members, gr->gr_mem, num_mem * sizeof(*gr->gr_mem));
|
||||
members[num_mem++] = (char *)newmember;
|
||||
members[num_mem] = NULL;
|
||||
gr->gr_mem = members;
|
||||
newgr = gr_dup(gr);
|
||||
if (newgr == NULL)
|
||||
errno = ENOMEM;
|
||||
|
||||
free(members);
|
||||
return (newgr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan a line and place it into a group structure.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -166,6 +166,8 @@ int gr_copy(int __ffd, int _tfd, const struct group *_gr,
|
|||
struct group *_old_gr);
|
||||
struct group *
|
||||
gr_dup(const struct group *_gr);
|
||||
struct group *
|
||||
gr_add(struct group *_gr, const char *_newmember);
|
||||
int gr_equal(const struct group *_gr1, const struct group *_gr2);
|
||||
void gr_fini(void);
|
||||
int gr_init(const char *_dir, const char *_master);
|
||||
|
|
|
|||
Loading…
Reference in a new issue