Date: Sat, 5 Dec 2009 20:26:55 +0000 (UTC) From: Ed Schouten <ed@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r200161 - in head/sbin: init reboot Message-ID: <200912052026.nB5KQtH6099116@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ed Date: Sat Dec 5 20:26:55 2009 New Revision: 200161 URL: http://svn.freebsd.org/changeset/base/200161 Log: Let init(8) and reboot(8) use utmpx to log wtmp entries. logwtmp() gets called with the raw strings that are written to disk. For regular user entries, this isn't too bad, but when booting/shutting down, the contents get rather cryptic. Just call the standardized pututxline(). Modified: head/sbin/init/Makefile head/sbin/init/init.c head/sbin/reboot/Makefile head/sbin/reboot/reboot.c Modified: head/sbin/init/Makefile ============================================================================== --- head/sbin/init/Makefile Sat Dec 5 20:22:26 2009 (r200160) +++ head/sbin/init/Makefile Sat Dec 5 20:26:55 2009 (r200161) @@ -6,8 +6,8 @@ MAN= init.8 PRECIOUSPROG= INSTALLFLAGS=-b -B.bak CFLAGS+=-DDEBUGSHELL -DSECURE -DLOGIN_CAP -DCOMPAT_SYSV_INIT -DPADD= ${LIBUTIL} ${LIBCRYPT} -LDADD= -lutil -lcrypt +DPADD= ${LIBUTIL} ${LIBULOG} ${LIBCRYPT} +LDADD= -lutil -lulog -lcrypt NO_SHARED?= YES Modified: head/sbin/init/init.c ============================================================================== --- head/sbin/init/init.c Sat Dec 5 20:22:26 2009 (r200160) +++ head/sbin/init/init.c Sat Dec 5 20:26:55 2009 (r200161) @@ -65,6 +65,8 @@ static const char rcsid[] = #include <syslog.h> #include <time.h> #include <ttyent.h> +#define _ULOG_POSIX_NAMES +#include <ulog.h> #include <unistd.h> #include <sys/reboot.h> #include <err.h> @@ -569,10 +571,8 @@ transition(state_t s) static void clear_session_logs(session_t *sp) { - char *line = sp->se_device + sizeof(_PATH_DEV) - 1; - if (logout(line)) - logwtmp(line, "", ""); + ulog_logout(sp->se_device); } /* @@ -775,6 +775,7 @@ single_user(void) static state_func_t runcom(void) { + struct utmpx utx; state_func_t next_transition; if ((next_transition = run_script(_PATH_RUNCOM)) != 0) @@ -782,7 +783,9 @@ runcom(void) runcom_mode = AUTOBOOT; /* the default */ /* NB: should send a message to the session logger to avoid blocking. */ - logwtmp("~", "reboot", ""); + utx.ut_type = BOOT_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); return (state_func_t) read_ttys; } @@ -1487,13 +1490,16 @@ alrm_handler(int sig) static state_func_t death(void) { + struct utmpx utx; session_t *sp; int i; pid_t pid; static const int death_sigs[2] = { SIGTERM, SIGKILL }; /* NB: should send a message to the session logger to avoid blocking. */ - logwtmp("~", "shutdown", ""); + utx.ut_type = SHUTDOWN_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); /* * Also revoke the TTY here. Because runshutdown() may reopen Modified: head/sbin/reboot/Makefile ============================================================================== --- head/sbin/reboot/Makefile Sat Dec 5 20:22:26 2009 (r200160) +++ head/sbin/reboot/Makefile Sat Dec 5 20:26:55 2009 (r200161) @@ -2,8 +2,8 @@ # $FreeBSD$ PROG= reboot -DPADD= ${LIBUTIL} -LDADD= -lutil +DPADD= ${LIBULOG} +LDADD= -lulog MAN= reboot.8 nextboot.8 MLINKS= reboot.8 halt.8 reboot.8 fastboot.8 reboot.8 fasthalt.8 Modified: head/sbin/reboot/reboot.c ============================================================================== --- head/sbin/reboot/reboot.c Sat Dec 5 20:22:26 2009 (r200160) +++ head/sbin/reboot/reboot.c Sat Dec 5 20:26:55 2009 (r200161) @@ -42,18 +42,20 @@ static char sccsid[] = "@(#)reboot.c 8.1 __FBSDID("$FreeBSD$"); #include <sys/reboot.h> +#include <sys/time.h> #include <sys/types.h> #include <sys/sysctl.h> #include <signal.h> #include <err.h> #include <errno.h> #include <fcntl.h> -#include <libutil.h> #include <pwd.h> #include <syslog.h> #include <stdio.h> #include <stdlib.h> #include <string.h> +#define _ULOG_POSIX_NAMES +#include <ulog.h> #include <unistd.h> static void usage(void); @@ -64,6 +66,7 @@ int dohalt; int main(int argc, char *argv[]) { + struct utmpx utx; const struct passwd *pw; int ch, howto, i, fd, lflag, nflag, qflag, sverrno; u_int pageins; @@ -140,7 +143,9 @@ main(int argc, char *argv[]) syslog(LOG_CRIT, "rebooted by %s", user); } } - logwtmp("~", "shutdown", ""); + utx.ut_type = SHUTDOWN_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); /* * Do a sync early on, so disks start transfers while we're off
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912052026.nB5KQtH6099116>