diff --git a/ChangeLog b/ChangeLog index a4e0d739e..9f7f21c13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 20000520 - Xauth fix from Markus Friedl + - Don't touch utmp if USE_UTMPX defined 20000518 - Include Andre Lucas' fixprogs script. Forgot to "cvs add" it yesterday diff --git a/acconfig.h b/acconfig.h index 9a2c1af5d..b3e11fe9c 100644 --- a/acconfig.h +++ b/acconfig.h @@ -50,6 +50,7 @@ #undef HAVE_SYSLEN_IN_UTMPX #undef HAVE_PID_IN_UTMP #undef HAVE_TYPE_IN_UTMP +#undef HAVE_TYPE_IN_UTMPX #undef HAVE_TV_IN_UTMP #undef HAVE_ID_IN_UTMP diff --git a/bsd-login.c b/bsd-login.c index 6a80928e0..de49214c0 100644 --- a/bsd-login.c +++ b/bsd-login.c @@ -73,7 +73,7 @@ struct utmp * utp; int t = 0; struct utmp * u; -#ifdef HAVE_TYPE_IN_UTMP +#if defined(HAVE_TYPE_IN_UTMP) || defined(HAVE_TYPE_IN_UTMPX) setutent(); while((u = getutent()) != NULL) { @@ -123,16 +123,26 @@ login(utp) */ tty = find_tty_slot(utp); +#ifdef USE_UTMPX + fd = open(_PATH_UTMPX, O_RDWR|O_CREAT, 0644); + if (fd == -1) { + log("Couldn't open %s: %s", _PATH_UTMPX, strerror(errno)); +#else /* USE_UTMPX */ fd = open(_PATH_UTMP, O_RDWR|O_CREAT, 0644); if (fd == -1) { log("Couldn't open %s: %s", _PATH_UTMP, strerror(errno)); +#endif /* USE_UTMPX */ } else { /* If no tty was found... */ if (tty == -1) { /* ... append it to utmp on login */ -#ifdef HAVE_TYPE_IN_UTMP +#if defined(HAVE_TYPE_IN_UTMP) || defined(HAVE_TYPE_IN_UTMPX) if (utp->ut_type == USER_PROCESS) { +#ifdef USE_UTMPX + if ((fd = open(_PATH_UTMPX, O_WRONLY|O_APPEND, 0)) >= 0) { +#else /* USE_UTMPX */ if ((fd = open(_PATH_UTMP, O_WRONLY|O_APPEND, 0)) >= 0) { +#endif /* USE_UTMPX */ (void)write(fd, utp, sizeof(struct utmp)); (void)close(fd); } diff --git a/configure.in b/configure.in index ba36417aa..43749046c 100644 --- a/configure.in +++ b/configure.in @@ -494,6 +494,7 @@ OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX) OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX) OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP) OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP) +OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX) OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP) OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP) OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)