2008-07-26 Nicolas François <nicolas.francois@centraliens.net>

* src/groupmems.c: Added Prog global variable to indicate the name
	of the program in error messages.

2008-07-22  Lukáš Kuklínek  <lkukline@redhat.com>

	* NEWS, src/groupmems.c: Check if the user added to group actually
	exist. RedHat bug #455603
	* NEWS, src/groupmems.c: Check if the group exists in the group
	local database (/etc/group). RedHat bug #456088
This commit is contained in:
nekral-guest 2008-07-26 16:11:49 +00:00
parent d4eced9b84
commit b684ea837d
3 changed files with 35 additions and 0 deletions

View File

@ -1,3 +1,15 @@
2008-07-26 Nicolas François <nicolas.francois@centraliens.net>
* src/groupmems.c: Added Prog global variable to indicate the name
of the program in error messages.
2008-07-22 Lukáš Kuklínek <lkukline@redhat.com>
* NEWS, src/groupmems.c: Check if the user added to group actually
exist. RedHat bug #455603
* NEWS, src/groupmems.c: Check if the group exists in the group
local database (/etc/group). RedHat bug #456088
2008-07-22 Nicolas François <nicolas.francois@centraliens.net> 2008-07-22 Nicolas François <nicolas.francois@centraliens.net>
* lib/prototypes.h: Fix getrange prototype. * lib/prototypes.h: Fix getrange prototype.

3
NEWS
View File

@ -10,6 +10,9 @@ shadow-4.1.2.1 -> shadow-4.1.3 UNRELEASED
- usermod - usermod
* Allow adding LDAP users (or any user not present in the local passwd * Allow adding LDAP users (or any user not present in the local passwd
file) to local groups file) to local groups
- groupmems
* Check if user exist before they are added to groups.
* Avoid segfault in case the specified group does not exist in /etc/group.
shadow-4.1.2 -> shadow-4.1.2.1 26-06-2008 shadow-4.1.2 -> shadow-4.1.2.1 26-06-2008

View File

@ -54,6 +54,8 @@
#define EXIT_NOT_PRIMARY 5 /* not primary owner of group */ #define EXIT_NOT_PRIMARY 5 /* not primary owner of group */
#define EXIT_NOT_MEMBER 6 /* member of group does not exist */ #define EXIT_NOT_MEMBER 6 /* member of group does not exist */
#define EXIT_MEMBER_EXISTS 7 /* member of group already exists */ #define EXIT_MEMBER_EXISTS 7 /* member of group already exists */
#define EXIT_INVALID_USER 8 /* specified user does not exist */
#define EXIT_INVALID_GROUP 9 /* specified group does not exist */
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
@ -67,6 +69,7 @@ static char *thisgroup = NULL;
static int purge = FALSE; static int purge = FALSE;
static int list = FALSE; static int list = FALSE;
static int exclusive = 0; static int exclusive = 0;
static char *Prog;
static int isroot (void) static int isroot (void)
{ {
@ -187,6 +190,11 @@ int main (int argc, char **argv)
{NULL, 0, NULL, '\0'} {NULL, 0, NULL, '\0'}
}; };
/*
* Get my name so that I can use it to report errors.
*/
Prog = Basename (argv[0]);
(void) setlocale (LC_ALL, ""); (void) setlocale (LC_ALL, "");
(void) bindtextdomain (PACKAGE, LOCALEDIR); (void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE); (void) textdomain (PACKAGE);
@ -223,6 +231,12 @@ int main (int argc, char **argv)
usage (); usage ();
} }
if (getpwnam(adduser) == NULL) {
fprintf (stderr, _("%s: user `%s' does not exist\n")
Prog, adduser);
exit (EXIT_INVALID_USERNAME);
}
if (!isroot () && NULL != thisgroup) { if (!isroot () && NULL != thisgroup) {
fputs (_("Only root can add members to different groups\n"), fputs (_("Only root can add members to different groups\n"),
stderr); stderr);
@ -284,6 +298,12 @@ int main (int argc, char **argv)
grp = (struct group *) gr_locate (name); grp = (struct group *) gr_locate (name);
if (grp == NULL) {
fprintf (stderr, _("%s: `%s' not found in /etc/group\n"),
Prog, name);
exit (EXIT_READ_GROUP);
}
if (NULL != adduser) { if (NULL != adduser) {
addtogroup (adduser, grp->gr_mem); addtogroup (adduser, grp->gr_mem);
gr_update (grp); gr_update (grp);