* 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>
|
2008-07-27 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
* src/groupmems.c: EXIT_READ_GROUP changed to EXIT_INVALID_GROUP.
|
* src/groupmems.c: EXIT_READ_GROUP changed to EXIT_INVALID_GROUP.
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
#endif /* USE_PAM */
|
#endif /* USE_PAM */
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
#include "prototypes.h"
|
||||||
#include "groupio.h"
|
#include "groupio.h"
|
||||||
|
|
||||||
/* Exit Status Values */
|
/* 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)
|
static void members (char **members)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -300,13 +251,25 @@ int main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != adduser) {
|
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);
|
gr_update (grp);
|
||||||
} else if (NULL != deluser) {
|
} 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);
|
gr_update (grp);
|
||||||
} else if (purge) {
|
} else if (purge) {
|
||||||
nomembers (grp->gr_mem);
|
grp->gr_mem[0] = NULL;
|
||||||
gr_update (grp);
|
gr_update (grp);
|
||||||
} else if (list) {
|
} else if (list) {
|
||||||
members (grp->gr_mem);
|
members (grp->gr_mem);
|
||||||
|
Loading…
Reference in New Issue
Block a user