+2008-01-22 Nicolas François <nicolas.francois@centraliens.net>
+
+ * NEWS, src/newgrp.c: Fix segfault when an user returns to an
+ unknown GID (either the user was deleted during the user's newgrp
+ session or the user's passwd entry referenced an invalid group).
+ Add a syslog warning in that case.
+ * src/newgrp.c: Add an end of line when reporting an invalid
+ password.
+
2008-01-12 Nicolas François <nicolas.francois@centraliens.net>
* NEWS, src/useradd.c: Fix the handling of the --defaults option
- lastlog
* Accept users specified as a numerical UID, or ranges of users (-user,
user-, user1-user2).
+- newgrp
+ * Fix segfault when an user returns to an unknown GID (either the user
+ was deleted during the user's newgrp session or the user's passwd
+ entry referenced an invalid group). Add a syslog warning in that case.
- newusers
* The new users are no more added to the list of members of their groups
because the membership is already set by their primary group.
"Invalid password for group `%s' from `%s'",
groupname, pwd->pw_name));
sleep (1);
- fputs (_("Invalid password."), stderr);
+ fputs (_("Invalid password.\n"), stderr);
goto failure;
}
}
} else if (child) {
/* parent - wait for child to finish, then log session close */
int cst = 0;
+ gid_t gid = getgid();
+ struct group *grp = getgrgid (gid);
do {
errno = 0;
} while ((pid == child && WIFSTOPPED (cst)) ||
(pid != child && errno == EINTR));
/* local, no need for xgetgrgid */
- SYSLOG ((LOG_INFO,
- "user `%s' (login `%s' on %s) returned to group `%s'",
- name, loginname, tty,
- getgrgid (gid)->gr_name));
+ if (NULL != grp) {
+ SYSLOG ((LOG_INFO,
+ "user `%s' (login `%s' on %s) returned to group `%s'",
+ name, loginname, tty, grp->gr_name));
+ } else {
+ SYSLOG ((LOG_INFO,
+ "user `%s' (login `%s' on %s) returned to group `%d'",
+ name, loginname, tty, gid));
+ /* Either the user's passwd entry has a
+ * GID that does not match with any group,
+ * or the group was deleted while the user
+ * was in a newgrp session.*/
+ SYSLOG ((LOG_WARN,
+ "unknown GID `%u' used by user `%s'",
+ gid, name));
+ }
closelog ();
exit (0);
}