diff options
author | William Hubbs <w.d.hubbs@gmail.com> | 2017-06-02 14:07:40 -0500 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2017-06-04 20:56:03 -0500 |
commit | 7689106aa10f7852b707b4c21ec080ccb2767280 (patch) | |
tree | aa096eed9381d48b8f9e51d54483043a46488845 /src/rc/rc-wtmp.c | |
parent | 1564e155b726308200ecd5df315c002bd8b16952 (diff) |
add support for writing reboot and shutdown records to wtmp
Diffstat (limited to 'src/rc/rc-wtmp.c')
-rw-r--r-- | src/rc/rc-wtmp.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/rc/rc-wtmp.c b/src/rc/rc-wtmp.c new file mode 100644 index 00000000..913fa06b --- /dev/null +++ b/src/rc/rc-wtmp.c @@ -0,0 +1,50 @@ +/* + * rc-wtmp.c + * This file contains routines to deal with the wtmp file. + */ + +/* + * Copyright 2017 The OpenRC Authors. + * See the Authors file at the top-level directory of this distribution and + * https://github.com/OpenRC/openrc/blob/master/AUTHORS + * + * This file is part of OpenRC. It is subject to the license terms in + * the LICENSE file found in the top-level directory of this + * distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE + * This file may not be copied, modified, propagated, or distributed + * except according to the terms contained in the LICENSE file. + */ + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/utsname.h> + +#include "rc-wtmp.h" + +void log_wtmp(const char *user, const char *id, pid_t pid, int type, + const char *line) +{ + struct timeval tv; + struct utmp utmp; + struct utsname uname_buf; + + memset(&utmp, 0, sizeof(utmp)); + gettimeofday(&tv, NULL); + utmp.ut_tv.tv_sec = tv.tv_sec; + utmp.ut_tv.tv_usec = tv.tv_usec; + utmp.ut_pid = pid; + utmp.ut_type = type; + strncpy(utmp.ut_name, user, sizeof(utmp.ut_name)); + strncpy(utmp.ut_id , id , sizeof(utmp.ut_id )); + strncpy(utmp.ut_line, line, sizeof(utmp.ut_line)); + + /* Put the OS version in place of the hostname */ + if (uname(&uname_buf) == 0) + strncpy(utmp.ut_host, uname_buf.release, sizeof(utmp.ut_host)); + + updwtmp(WTMP_FILE, &utmp); +} |