diff options
-rw-r--r-- | Makefile.am | 46 | ||||
-rw-r--r-- | configure.ac | 11 | ||||
-rw-r--r-- | src/shared/build.h | 7 | ||||
-rw-r--r-- | src/shared/utmp-wtmp.h | 63 | ||||
l--------- | src/update-utmp/Makefile | 1 | ||||
-rw-r--r-- | src/update-utmp/update-utmp.c | 292 |
6 files changed, 0 insertions, 420 deletions
diff --git a/Makefile.am b/Makefile.am index 852844117b..11a8d3c33e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -404,11 +404,6 @@ rootlibexec_PROGRAMS = \ systemd-socket-proxyd \ systemd-update-done -if HAVE_UTMP -rootlibexec_PROGRAMS += \ - systemd-update-utmp -endif - systemgenerator_PROGRAMS = \ systemd-getty-generator \ systemd-fstab-generator \ @@ -565,12 +560,6 @@ nodist_systemunit_DATA = \ units/systemd-nspawn@.service \ units/systemd-update-done.service -if HAVE_UTMP -nodist_systemunit_DATA += \ - units/systemd-update-utmp.service \ - units/systemd-update-utmp-runlevel.service -endif - dist_userunit_DATA = \ units/user/basic.target \ units/user/default.target \ @@ -592,8 +581,6 @@ EXTRA_DIST += \ units/systemd-initctl.service.in \ units/systemd-shutdownd.service.in \ units/systemd-remount-fs.service.in \ - units/systemd-update-utmp.service.in \ - units/systemd-update-utmp-runlevel.service.in \ units/systemd-ask-password-wall.service.in \ units/systemd-ask-password-console.service.in \ units/systemd-sysctl.service.in \ @@ -833,7 +820,6 @@ libsystemd_shared_la_SOURCES = \ src/shared/cgroup-show.h \ src/shared/unit-name.c \ src/shared/unit-name.h \ - src/shared/utmp-wtmp.h \ src/shared/watchdog.c \ src/shared/watchdog.h \ src/shared/spawn-ask-password-agent.c \ @@ -911,11 +897,6 @@ libsystemd_shared_la_SOURCES = \ src/shared/sysctl-util.c \ src/shared/sysctl-util.h -if HAVE_UTMP -libsystemd_shared_la_SOURCES += \ - src/shared/utmp-wtmp.c -endif - nodist_libsystemd_shared_la_SOURCES = \ src/shared/errno-from-name.h \ src/shared/errno-to-name.h \ @@ -2098,19 +2079,6 @@ systemd_initctl_LDADD = \ libsystemd-shared.la # ------------------------------------------------------------------------------ -systemd_update_utmp_SOURCES = \ - src/update-utmp/update-utmp.c - -systemd_update_utmp_CFLAGS = \ - $(AM_CFLAGS) \ - $(AUDIT_CFLAGS) - -systemd_update_utmp_LDADD = \ - libsystemd-internal.la \ - libsystemd-shared.la \ - $(AUDIT_LIBS) - -# ------------------------------------------------------------------------------ systemd_update_done_SOURCES = \ src/update-done/update-done.c @@ -6585,20 +6553,6 @@ SOCKETS_TARGET_WANTS += \ systemd-initctl.socket \ systemd-shutdownd.socket -if HAVE_UTMP -if HAVE_SYSV_COMPAT -MULTI_USER_TARGET_WANTS += \ - systemd-update-utmp-runlevel.service -GRAPHICAL_TARGET_WANTS += \ - systemd-update-utmp-runlevel.service -RESCUE_TARGET_WANTS += \ - systemd-update-utmp-runlevel.service -endif - -SYSINIT_TARGET_WANTS += \ - systemd-update-utmp.service -endif - SYSINIT_TARGET_WANTS += \ systemd-update-done.service diff --git a/configure.ac b/configure.ac index 19bca32e46..204b3e00cf 100644 --- a/configure.ac +++ b/configure.ac @@ -364,16 +364,6 @@ AS_IF([test "x$enable_dbus" != "xno"], [ AM_CONDITIONAL(HAVE_DBUS, [test "$have_dbus" = "yes"]) # ------------------------------------------------------------------------------ -have_utmp=yes -AC_ARG_ENABLE([utmp], AS_HELP_STRING([--disable-utmp], [disable utmp/wtmp log handling]), - AS_CASE("x${enableval}", - [xyes], [have_utmp=yes], - [xno], [have_utmp=no], - AC_MSG_ERROR(bad value ${enableval} for --enable-utmp))) -AS_IF([test "x$have_utmp" = "xyes"], [AC_DEFINE(HAVE_UTMP, 1, [Define if utmp/wtmp support is enabled])]) -AM_CONDITIONAL([HAVE_UTMP], [test "x$have_utmp" = "xyes"]) - -# ------------------------------------------------------------------------------ have_compat_libs=no AC_ARG_ENABLE([compat_libs], AS_HELP_STRING([--enable-compat-libs],[Enable creation of compatibility libraries]), [case "${enableval}" in @@ -1586,7 +1576,6 @@ AC_MSG_RESULT([ Split /usr: ${enable_split_usr} SysV compatibility: ${SYSTEM_SYSV_COMPAT} compatibility libraries: ${have_compat_libs} - utmp/wtmp support: ${have_utmp} ldconfig support: ${enable_ldconfig} hibernate support: ${enable_hibernate} extra debugging: ${enable_debug} diff --git a/src/shared/build.h b/src/shared/build.h index 24873ab9d7..8b82ede290 100644 --- a/src/shared/build.h +++ b/src/shared/build.h @@ -63,12 +63,6 @@ #define _SYSVINIT_FEATURE_ "-SYSVINIT" #endif -#ifdef HAVE_UTMP -#define _UTMP_FEATURE_ "+UTMP" -#else -#define _UTMP_FEATURE_ "-UTMP" -#endif - #ifdef HAVE_LIBCRYPTSETUP #define _LIBCRYPTSETUP_FEATURE_ "+LIBCRYPTSETUP" #else @@ -143,7 +137,6 @@ _APPARMOR_FEATURE_ " " \ _SMACK_FEATURE_ " " \ _SYSVINIT_FEATURE_ " " \ - _UTMP_FEATURE_ " " \ _LIBCRYPTSETUP_FEATURE_ " " \ _GCRYPT_FEATURE_ " " \ _GNUTLS_FEATURE_ " " \ diff --git a/src/shared/utmp-wtmp.h b/src/shared/utmp-wtmp.h deleted file mode 100644 index 87d004e615..0000000000 --- a/src/shared/utmp-wtmp.h +++ /dev/null @@ -1,63 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -#pragma once - -/*** - This file is part of systemd. - - Copyright 2010 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include "util.h" - -#ifdef HAVE_UTMP -int utmp_get_runlevel(int *runlevel, int *previous); - -int utmp_put_shutdown(void); -int utmp_put_reboot(usec_t timestamp); -int utmp_put_runlevel(int runlevel, int previous); - -int utmp_put_dead_process(const char *id, pid_t pid, int code, int status); -int utmp_put_init_process(const char *id, pid_t pid, pid_t sid, const char *line); - -int utmp_wall(const char *message, const char *username, bool (*match_tty)(const char *tty)); - -#else /* HAVE_UTMP */ - -static inline int utmp_get_runlevel(int *runlevel, int *previous) { - return -ESRCH; -} -static inline int utmp_put_shutdown(void) { - return 0; -} -static inline int utmp_put_reboot(usec_t timestamp) { - return 0; -} -static inline int utmp_put_runlevel(int runlevel, int previous) { - return 0; -} -static inline int utmp_put_dead_process(const char *id, pid_t pid, int code, int status) { - return 0; -} -static inline int utmp_put_init_process(const char *id, pid_t pid, pid_t sid, const char *line) { - return 0; -} -static inline int utmp_wall(const char *message, const char *username, - bool (*match_tty)(const char *tty)) { - return 0; -} - -#endif /* HAVE_UTMP */ diff --git a/src/update-utmp/Makefile b/src/update-utmp/Makefile deleted file mode 120000 index d0b0e8e008..0000000000 --- a/src/update-utmp/Makefile +++ /dev/null @@ -1 +0,0 @@ -../Makefile
\ No newline at end of file diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c deleted file mode 100644 index 33535ebd7f..0000000000 --- a/src/update-utmp/update-utmp.c +++ /dev/null @@ -1,292 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -/*** - This file is part of systemd. - - Copyright 2010 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see <http://www.gnu.org/licenses/>. -***/ - -#include <errno.h> -#include <string.h> -#include <unistd.h> - -#ifdef HAVE_AUDIT -#include <libaudit.h> -#endif - -#include "sd-bus.h" - -#include "log.h" -#include "macro.h" -#include "util.h" -#include "special.h" -#include "utmp-wtmp.h" -#include "bus-util.h" -#include "bus-error.h" -#include "unit-name.h" - -typedef struct Context { - sd_bus *bus; -#ifdef HAVE_AUDIT - int audit_fd; -#endif -} Context; - -static usec_t get_startup_time(Context *c) { - _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - usec_t t = 0; - int r; - - assert(c); - - r = sd_bus_get_property_trivial( - c->bus, - "org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.systemd1.Manager", - "UserspaceTimestamp", - &error, - 't', &t); - if (r < 0) { - log_error("Failed to get timestamp: %s", bus_error_message(&error, -r)); - return 0; - } - - return t; -} - -static int get_current_runlevel(Context *c) { - static const struct { - const int runlevel; - const char *special; - } table[] = { - /* The first target of this list that is active or has - * a job scheduled wins. We prefer runlevels 5 and 3 - * here over the others, since these are the main - * runlevels used on Fedora. It might make sense to - * change the order on some distributions. */ - { '5', SPECIAL_GRAPHICAL_TARGET }, - { '3', SPECIAL_MULTI_USER_TARGET }, - { '1', SPECIAL_RESCUE_TARGET }, - }; - - _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - int r; - unsigned i; - - assert(c); - - for (i = 0; i < ELEMENTSOF(table); i++) { - _cleanup_free_ char *state = NULL, *path = NULL; - - path = unit_dbus_path_from_name(table[i].special); - if (!path) - return log_oom(); - - r = sd_bus_get_property_string( - c->bus, - "org.freedesktop.systemd1", - path, - "org.freedesktop.systemd1.Unit", - "ActiveState", - &error, - &state); - if (r < 0) { - log_warning("Failed to get state: %s", bus_error_message(&error, -r)); - return r; - } - - if (streq(state, "active") || streq(state, "reloading")) - return table[i].runlevel; - } - - return 0; -} - -static int on_reboot(Context *c) { - int r = 0, q; - usec_t t; - - assert(c); - - /* We finished start-up, so let's write the utmp - * record and send the audit msg */ - -#ifdef HAVE_AUDIT - if (c->audit_fd >= 0) - if (audit_log_user_comm_message(c->audit_fd, AUDIT_SYSTEM_BOOT, "", "systemd-update-utmp", NULL, NULL, NULL, 1) < 0 && - errno != EPERM) { - log_error_errno(errno, "Failed to send audit message: %m"); - r = -errno; - } -#endif - - /* If this call fails it will return 0, which - * utmp_put_reboot() will then fix to the current time */ - t = get_startup_time(c); - - q = utmp_put_reboot(t); - if (q < 0) { - log_error_errno(q, "Failed to write utmp record: %m"); - r = q; - } - - return r; -} - -static int on_shutdown(Context *c) { - int r = 0, q; - - assert(c); - - /* We started shut-down, so let's write the utmp - * record and send the audit msg */ - -#ifdef HAVE_AUDIT - if (c->audit_fd >= 0) - if (audit_log_user_comm_message(c->audit_fd, AUDIT_SYSTEM_SHUTDOWN, "", "systemd-update-utmp", NULL, NULL, NULL, 1) < 0 && - errno != EPERM) { - log_error_errno(errno, "Failed to send audit message: %m"); - r = -errno; - } -#endif - - q = utmp_put_shutdown(); - if (q < 0) { - log_error_errno(q, "Failed to write utmp record: %m"); - r = q; - } - - return r; -} - -static int on_runlevel(Context *c) { - int r = 0, q, previous, runlevel; - - assert(c); - - /* We finished changing runlevel, so let's write the - * utmp record and send the audit msg */ - - /* First, get last runlevel */ - q = utmp_get_runlevel(&previous, NULL); - - if (q < 0) { - if (q != -ESRCH && q != -ENOENT) - return log_error_errno(q, "Failed to get current runlevel: %m"); - - previous = 0; - } - - /* Secondly, get new runlevel */ - runlevel = get_current_runlevel(c); - - if (runlevel < 0) - return runlevel; - - if (previous == runlevel) - return 0; - -#ifdef HAVE_AUDIT - if (c->audit_fd >= 0) { - _cleanup_free_ char *s = NULL; - - if (asprintf(&s, "old-level=%c new-level=%c", - previous > 0 ? previous : 'N', - runlevel > 0 ? runlevel : 'N') < 0) - return log_oom(); - - if (audit_log_user_comm_message(c->audit_fd, AUDIT_SYSTEM_RUNLEVEL, s, "systemd-update-utmp", NULL, NULL, NULL, 1) < 0 && - errno != EPERM) { - log_error_errno(errno, "Failed to send audit message: %m"); - r = -errno; - } - } -#endif - - q = utmp_put_runlevel(runlevel, previous); - if (q < 0 && q != -ESRCH && q != -ENOENT) { - log_error_errno(q, "Failed to write utmp record: %m"); - r = q; - } - - return r; -} - -int main(int argc, char *argv[]) { - Context c = { -#ifdef HAVE_AUDIT - .audit_fd = -1 -#endif - }; - int r; - - if (getppid() != 1) { - log_error("This program should be invoked by init only."); - return EXIT_FAILURE; - } - - if (argc != 2) { - log_error("This program requires one argument."); - return EXIT_FAILURE; - } - - log_set_target(LOG_TARGET_AUTO); - log_parse_environment(); - log_open(); - - umask(0022); - -#ifdef HAVE_AUDIT - /* If the kernel lacks netlink or audit support, - * don't worry about it. */ - c.audit_fd = audit_open(); - if (c.audit_fd < 0 && errno != EAFNOSUPPORT && errno != EPROTONOSUPPORT) - log_error_errno(errno, "Failed to connect to audit log: %m"); -#endif - r = bus_open_system_systemd(&c.bus); - if (r < 0) { - log_error_errno(r, "Failed to get D-Bus connection: %m"); - r = -EIO; - goto finish; - } - - log_debug("systemd-update-utmp running as pid "PID_FMT, getpid()); - - if (streq(argv[1], "reboot")) - r = on_reboot(&c); - else if (streq(argv[1], "shutdown")) - r = on_shutdown(&c); - else if (streq(argv[1], "runlevel")) - r = on_runlevel(&c); - else { - log_error("Unknown command %s", argv[1]); - r = -EINVAL; - } - - log_debug("systemd-update-utmp stopped as pid "PID_FMT, getpid()); - -finish: -#ifdef HAVE_AUDIT - if (c.audit_fd >= 0) - audit_close(c.audit_fd); -#endif - - if (c.bus) - sd_bus_unref(c.bus); - - return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; -} |