mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-01 12:19:28 +00:00
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().
This commit is contained in:
parent
5095053036
commit
14c69f2136
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=200161
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -42,18 +42,20 @@ static char sccsid[] = "@(#)reboot.c 8.1 (Berkeley) 6/5/93";
|
||||
__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
|
||||
|
Loading…
Reference in New Issue
Block a user