* src/groupmems.c: Reuse the functions from libmisc/list.c to deal
with user lists. addtogroup() was broken when realloc() move the memory area. * src/groupmems.c: Report failures with the name of the program.
This commit is contained in:
parent
4c2ed7b52e
commit
44db9db053
@ -1,3 +1,10 @@
|
||||
2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
|
||||
|
||||
* src/groupmems.c: Reuse the functions from libmisc/list.c to deal
|
||||
with user lists. addtogroup() was broken when realloc() move the
|
||||
memory area.
|
||||
* src/groupmems.c: Report failures with the name of the program.
|
||||
|
||||
2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
|
||||
|
||||
* src/groupmems.c: EXIT_READ_GROUP changed to EXIT_INVALID_GROUP.
|
||||
|
@ -42,6 +42,7 @@
|
||||
#endif /* USE_PAM */
|
||||
#include <pwd.h>
|
||||
#include "defines.h"
|
||||
#include "prototypes.h"
|
||||
#include "groupio.h"
|
||||
|
||||
/* Exit Status Values */
|
||||
@ -92,56 +93,6 @@ static char *whoami (void)
|
||||
}
|
||||
}
|
||||
|
||||
static void addtogroup (char *user, char **members)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; NULL != members[i]; i++) {
|
||||
if (0 == strcmp (user, members[i])) {
|
||||
fputs (_("Member already exists\n"), stderr);
|
||||
exit (EXIT_MEMBER_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
members = (char **) realloc (members, sizeof (char *) * (i+2));
|
||||
members[i] = user;
|
||||
members[i + 1] = NULL;
|
||||
}
|
||||
|
||||
static void rmfromgroup (char *user, char **members)
|
||||
{
|
||||
int i;
|
||||
bool found = false;
|
||||
|
||||
i = 0;
|
||||
while (!found && NULL != members[i]) {
|
||||
if (0 == strcmp (user, members[i])) {
|
||||
found = true;
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
while (found && NULL != members[i]) {
|
||||
members[i] = members[i+1];
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
fputs (_("Member to remove could not be found\n"), stderr);
|
||||
exit (EXIT_NOT_MEMBER);
|
||||
}
|
||||
}
|
||||
|
||||
static void nomembers (char **members)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; NULL != members[i]; i++) {
|
||||
members[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void members (char **members)
|
||||
{
|
||||
int i;
|
||||
@ -300,13 +251,25 @@ int main (int argc, char **argv)
|
||||
}
|
||||
|
||||
if (NULL != adduser) {
|
||||
addtogroup (adduser, grp->gr_mem);
|
||||
if (is_on_list (grp->gr_mem, adduser)) {
|
||||
fprintf (stderr,
|
||||
_("%s: user `%s' is already a member of `%s'\n"),
|
||||
Prog, adduser, grp->gr_name);
|
||||
exit (EXIT_MEMBER_EXISTS);
|
||||
}
|
||||
grp->gr_mem = add_list (grp->gr_mem, adduser);
|
||||
gr_update (grp);
|
||||
} else if (NULL != deluser) {
|
||||
rmfromgroup (deluser, grp->gr_mem);
|
||||
if (!is_on_list (grp->gr_mem, adduser)) {
|
||||
fprintf (stderr,
|
||||
_("%s: user `%s' is not a member of `%s'\n"),
|
||||
Prog, deluser, grp->gr_name);
|
||||
exit (EXIT_NOT_MEMBER);
|
||||
}
|
||||
grp->gr_mem = del_list (grp->gr_mem, deluser);
|
||||
gr_update (grp);
|
||||
} else if (purge) {
|
||||
nomembers (grp->gr_mem);
|
||||
grp->gr_mem[0] = NULL;
|
||||
gr_update (grp);
|
||||
} else if (list) {
|
||||
members (grp->gr_mem);
|
||||
|
Loading…
x
Reference in New Issue
Block a user