--- xterm-202/main.c.orig 2005-05-03 04:38:24 +0400 +++ xterm-202/main.c 2005-06-08 15:35:24 +0400 @@ -1635,6 +1635,8 @@ posix_signal(int signo, sigfunc func) #endif #endif /* HAVE_POSIX_SAVED_IDS */ +extern int setresgid(gid_t rgid, gid_t egid, gid_t sgid); + int main(int argc, char *argv[]ENVP_ARG) { @@ -1668,6 +1670,9 @@ main(int argc, char *argv[]ENVP_ARG) TRACE_IDS; #endif + /* Drop effective group ID (but save it for utempter) */ + setresgid(-1, getgid(), getegid()); + /* extra length in case longer tty name like /dev/ttyq255 */ ttydev = TypeMallocN(char, sizeof(TTYDEV) + 80); #ifdef USE_PTY_DEVICE @@ -3365,8 +3370,7 @@ spawn(void) /* Note: utempter may trim it anyway */ SetUtmpHost(dummy.ut_host, screen); - addToUtmp(ttydev, dummy.ut_host, screen->respond); - added_utmp_entry = True; + added_utmp_entry = utempter_add_record(screen->respond, dummy.ut_host); } #endif @@ -4596,7 +4600,7 @@ Exit(int n) #ifdef USE_UTEMPTER if (!resource.utmpInhibit && added_utmp_entry) - removeFromUtmp(); + utempter_remove_added_record(); #elif defined(HAVE_UTMP) #ifdef USE_SYSV_UTMP struct UTMP_STR utmp;