jfc@ATHENA.MIT.EDU (John Carr) (01/06/90)
This is cc-ed to xpert as I have seen this problem reported there.
Program:
xterm in R4 release
Problem:
When the "utmpInhibit" resource is turned on, xterm exits with
no error message.
Details:
The initgroups() call in clients/xterm/main.c derefecences
the variable "pw" (a struct passwd *) without checking that
it is non-NULL. This causes the child of xterm to die, and
the xterm process itself to exit when utmpInhibit is true or
the user's id can not be converted to a username.
Environment:
IBM RT running 4.3. Should happen on any system with
utmp and HAS_BSD_GROUPS defined.
Fix:
*** /tmp/,RCSt1000336 Fri Jan 5 17:48:17 1990
--- main.c Thu Jan 4 18:07:33 1990
***************
*** 1781,1788 ****
tslot = ttyslot();
added_utmp_entry = False;
{
! if (!resource.utmpInhibit &&
! (pw = getpwuid(screen->uid)) &&
(i = open(etc_utmp, O_WRONLY)) >= 0) {
bzero((char *)&utmp, sizeof(struct utmp));
(void) strncpy(utmp.ut_line,
--- 1781,1788 ----
tslot = ttyslot();
added_utmp_entry = False;
{
! if ((pw = getpwuid(screen->uid)) &&
! !resource.utmpInhibit &&
(i = open(etc_utmp, O_WRONLY)) >= 0) {
bzero((char *)&utmp, sizeof(struct utmp));
(void) strncpy(utmp.ut_line,
***************
*** 1852,1858 ****
(void) setgid (screen->gid);
#ifdef HAS_BSD_GROUPS
! if (geteuid() == 0)
initgroups (pw->pw_name, pw->pw_gid);
#endif
(void) setuid (screen->uid);
--- 1852,1858 ----
(void) setgid (screen->gid);
#ifdef HAS_BSD_GROUPS
! if(pw && geteuid() == 0)
initgroups (pw->pw_name, pw->pw_gid);
#endif
(void) setuid (screen->uid);
--John Carr (jfc@athena.mit.edu)
Project Athena Systems Development