From dce818b390a857a11f7dd634684500675cf79833 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Thu, 12 Apr 2012 17:15:18 +0200 Subject: move all tools to subdirs --- src/update-utmp/update-utmp.c | 423 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 423 insertions(+) create mode 100644 src/update-utmp/update-utmp.c (limited to 'src/update-utmp') diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c new file mode 100644 index 0000000000..ec07b92125 --- /dev/null +++ b/src/update-utmp/update-utmp.c @@ -0,0 +1,423 @@ +/*-*- 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 . +***/ + +#include +#include +#include +#include +#include + +#include + +#ifdef HAVE_AUDIT +#include +#endif + +#include "log.h" +#include "macro.h" +#include "util.h" +#include "special.h" +#include "utmp-wtmp.h" +#include "dbus-common.h" + +typedef struct Context { + DBusConnection *bus; +#ifdef HAVE_AUDIT + int audit_fd; +#endif +} Context; + +static usec_t get_startup_time(Context *c) { + const char + *interface = "org.freedesktop.systemd1.Manager", + *property = "StartupTimestamp"; + + DBusError error; + usec_t t = 0; + DBusMessage *m = NULL, *reply = NULL; + DBusMessageIter iter, sub; + + dbus_error_init(&error); + + assert(c); + + if (!(m = dbus_message_new_method_call( + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.DBus.Properties", + "Get"))) { + log_error("Could not allocate message."); + goto finish; + } + + if (!dbus_message_append_args(m, + DBUS_TYPE_STRING, &interface, + DBUS_TYPE_STRING, &property, + DBUS_TYPE_INVALID)) { + log_error("Could not append arguments to message."); + goto finish; + } + + if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) { + log_error("Failed to send command: %s", bus_error_message(&error)); + goto finish; + } + + if (!dbus_message_iter_init(reply, &iter) || + dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { + log_error("Failed to parse reply."); + goto finish; + } + + dbus_message_iter_recurse(&iter, &sub); + + if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_UINT64) { + log_error("Failed to parse reply."); + goto finish; + } + + dbus_message_iter_get_basic(&sub, &t); + +finish: + if (m) + dbus_message_unref(m); + + if (reply) + dbus_message_unref(reply); + + dbus_error_free(&error); + + 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_RUNLEVEL5_TARGET }, + { '3', SPECIAL_RUNLEVEL3_TARGET }, + { '4', SPECIAL_RUNLEVEL4_TARGET }, + { '2', SPECIAL_RUNLEVEL2_TARGET }, + { 'S', SPECIAL_RESCUE_TARGET }, + }; + const char + *interface = "org.freedesktop.systemd1.Unit", + *property = "ActiveState"; + + DBusMessage *m = NULL, *reply = NULL; + int r = 0; + unsigned i; + DBusError error; + + assert(c); + + dbus_error_init(&error); + + for (i = 0; i < ELEMENTSOF(table); i++) { + const char *path = NULL, *state; + DBusMessageIter iter, sub; + + if (!(m = dbus_message_new_method_call( + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "GetUnit"))) { + log_error("Could not allocate message."); + r = -ENOMEM; + goto finish; + } + + if (!dbus_message_append_args(m, + DBUS_TYPE_STRING, &table[i].special, + DBUS_TYPE_INVALID)) { + log_error("Could not append arguments to message."); + r = -ENOMEM; + goto finish; + } + + if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) { + dbus_error_free(&error); + continue; + } + + if (!dbus_message_get_args(reply, &error, + DBUS_TYPE_OBJECT_PATH, &path, + DBUS_TYPE_INVALID)) { + log_error("Failed to parse reply: %s", bus_error_message(&error)); + r = -EIO; + goto finish; + } + + dbus_message_unref(m); + if (!(m = dbus_message_new_method_call( + "org.freedesktop.systemd1", + path, + "org.freedesktop.DBus.Properties", + "Get"))) { + log_error("Could not allocate message."); + r = -ENOMEM; + goto finish; + } + + if (!dbus_message_append_args(m, + DBUS_TYPE_STRING, &interface, + DBUS_TYPE_STRING, &property, + DBUS_TYPE_INVALID)) { + log_error("Could not append arguments to message."); + r = -ENOMEM; + goto finish; + } + + dbus_message_unref(reply); + if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) { + log_error("Failed to send command: %s", bus_error_message(&error)); + r = -EIO; + goto finish; + } + + if (!dbus_message_iter_init(reply, &iter) || + dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { + log_error("Failed to parse reply."); + r = -EIO; + goto finish; + } + + dbus_message_iter_recurse(&iter, &sub); + + if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) { + log_error("Failed to parse reply."); + r = -EIO; + goto finish; + } + + dbus_message_iter_get_basic(&sub, &state); + + if (streq(state, "active") || streq(state, "reloading")) + r = table[i].runlevel; + + dbus_message_unref(m); + dbus_message_unref(reply); + m = reply = NULL; + + if (r) + break; + } + +finish: + if (m) + dbus_message_unref(m); + + if (reply) + dbus_message_unref(reply); + + dbus_error_free(&error); + + return r; +} + +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_message(c->audit_fd, AUDIT_SYSTEM_BOOT, "init", NULL, NULL, NULL, 1) < 0) { + log_error("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); + + if ((q = utmp_put_reboot(t)) < 0) { + log_error("Failed to write utmp record: %s", strerror(-q)); + 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_message(c->audit_fd, AUDIT_SYSTEM_SHUTDOWN, "init", NULL, NULL, NULL, 1) < 0) { + log_error("Failed to send audit message: %m"); + r = -errno; + } +#endif + + if ((q = utmp_put_shutdown()) < 0) { + log_error("Failed to write utmp record: %s", strerror(-q)); + 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 */ + if ((q = utmp_get_runlevel(&previous, NULL)) < 0) { + + if (q != -ESRCH && q != -ENOENT) { + log_error("Failed to get current runlevel: %s", strerror(-q)); + return q; + } + + /* Hmm, we didn't find any runlevel, that means we + * have been rebooted */ + r = on_reboot(c); + previous = 0; + } + + /* Secondly, get new runlevel */ + if ((runlevel = get_current_runlevel(c)) < 0) + return runlevel; + + if (previous == runlevel) + return 0; + +#ifdef HAVE_AUDIT + if (c->audit_fd >= 0) { + char *s = NULL; + + if (asprintf(&s, "old-level=%c new-level=%c", + previous > 0 ? previous : 'N', + runlevel > 0 ? runlevel : 'N') < 0) + return -ENOMEM; + + if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_RUNLEVEL, s, NULL, NULL, NULL, 1) < 0) { + log_error("Failed to send audit message: %m"); + r = -errno; + } + + free(s); + } +#endif + + if ((q = utmp_put_runlevel(runlevel, previous)) < 0) { + log_error("Failed to write utmp record: %s", strerror(-q)); + r = q; + } + + return r; +} + +int main(int argc, char *argv[]) { + int r; + DBusError error; + Context c; + + dbus_error_init(&error); + + zero(c); +#ifdef HAVE_AUDIT + c.audit_fd = -1; +#endif + + 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 ((c.audit_fd = audit_open()) < 0 && + /* If the kernel lacks netlink or audit support, + * don't worry about it. */ + errno != EAFNOSUPPORT && errno != EPROTONOSUPPORT) + log_error("Failed to connect to audit log: %m"); +#endif + + if (bus_connect(DBUS_BUS_SYSTEM, &c.bus, NULL, &error) < 0) { + log_error("Failed to get D-Bus connection: %s", bus_error_message(&error)); + r = -EIO; + goto finish; + } + + log_debug("systemd-update-utmp running as pid %lu", (unsigned long) 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 %lu", (unsigned long) getpid()); + +finish: +#ifdef HAVE_AUDIT + if (c.audit_fd >= 0) + audit_close(c.audit_fd); +#endif + + if (c.bus) { + dbus_connection_flush(c.bus); + dbus_connection_close(c.bus); + dbus_connection_unref(c.bus); + } + + dbus_error_free(&error); + dbus_shutdown(); + + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; +} -- cgit v1.2.3-54-g00ecf From 44785992c3c32e6abbf9d9345e0d68d579ef165b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 13 Apr 2012 17:17:56 +0200 Subject: audit: ignore if we get EPERM if auditing access is not available, then don't complain about it, in order to play nice with systems lacking CAP_SYS_AUDIT --- src/core/manager.c | 10 +++------- src/update-utmp/update-utmp.c | 9 ++++++--- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src/update-utmp') diff --git a/src/core/manager.c b/src/core/manager.c index 869c99f5c5..1d32adff6d 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2611,17 +2611,13 @@ void manager_send_unit_audit(Manager *m, Unit *u, int type, bool success) { } if (audit_log_user_comm_message(m->audit_fd, type, "", p, NULL, NULL, NULL, success) < 0) { - log_warning("Failed to send audit message: %m"); - if (errno == EPERM) { /* We aren't allowed to send audit messages? - * Then let's not retry again, to avoid - * spamming the user with the same and same - * messages over and over. */ - + * Then let's not retry again. */ audit_close(m->audit_fd); m->audit_fd = -1; - } + } else + log_warning("Failed to send audit message: %m"); } free(p); diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index ec07b92125..ee9105bf47 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -250,7 +250,8 @@ static int on_reboot(Context *c) { #ifdef HAVE_AUDIT if (c->audit_fd >= 0) - if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_BOOT, "init", NULL, NULL, NULL, 1) < 0) { + if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_BOOT, "init", NULL, NULL, NULL, 1) < 0 && + errno != EPERM) { log_error("Failed to send audit message: %m"); r = -errno; } @@ -278,7 +279,8 @@ static int on_shutdown(Context *c) { #ifdef HAVE_AUDIT if (c->audit_fd >= 0) - if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_SHUTDOWN, "init", NULL, NULL, NULL, 1) < 0) { + if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_SHUTDOWN, "init", NULL, NULL, NULL, 1) < 0 && + errno != EPERM) { log_error("Failed to send audit message: %m"); r = -errno; } @@ -330,7 +332,8 @@ static int on_runlevel(Context *c) { runlevel > 0 ? runlevel : 'N') < 0) return -ENOMEM; - if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_RUNLEVEL, s, NULL, NULL, NULL, 1) < 0) { + if (audit_log_user_message(c->audit_fd, AUDIT_SYSTEM_RUNLEVEL, s, NULL, NULL, NULL, 1) < 0 && + errno != EPERM) { log_error("Failed to send audit message: %m"); r = -errno; } -- cgit v1.2.3-54-g00ecf From b562f5a57d11d356aab26b08481f3befffff0822 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 13 Apr 2012 21:36:37 +0200 Subject: build-sys: add stub makefiles to all subdirs to ease development with emacs --- .gitignore | 138 ++++++++++++++++++------------------ src/ac-power/Makefile | 1 + src/analyze/Makefile | 1 + src/ask-password/Makefile | 1 + src/cgls/Makefile | 1 + src/cgroups-agent/Makefile | 1 + src/cgtop/Makefile | 1 + src/detect-virt/Makefile | 1 + src/fsck/Makefile | 1 + src/getty-generator/Makefile | 1 + src/gudev/Makefile | 1 + src/initctl/Makefile | 1 + src/libsystemd-daemon/Makefile | 1 + src/libsystemd-id128/Makefile | 1 + src/libudev/Makefile | 1 + src/modules-load/Makefile | 1 + src/notify/Makefile | 1 + src/nspawn/Makefile | 1 + src/quotacheck/Makefile | 1 + src/random-seed/Makefile | 1 + src/rc-local-generator/Makefile | 1 + src/remount-api-vfs/Makefile | 1 + src/reply-password/Makefile | 1 + src/shutdownd/Makefile | 1 + src/stdio-bridge/Makefile | 1 + src/sysctl/Makefile | 1 + src/systemctl/Makefile | 1 + src/timestamp/Makefile | 1 + src/tmpfiles/Makefile | 1 + src/tty-ask-password-agent/Makefile | 1 + src/udev/Makefile | 1 + src/update-utmp/Makefile | 1 + 32 files changed, 99 insertions(+), 70 deletions(-) create mode 120000 src/ac-power/Makefile create mode 120000 src/analyze/Makefile create mode 120000 src/ask-password/Makefile create mode 120000 src/cgls/Makefile create mode 120000 src/cgroups-agent/Makefile create mode 120000 src/cgtop/Makefile create mode 120000 src/detect-virt/Makefile create mode 120000 src/fsck/Makefile create mode 120000 src/getty-generator/Makefile create mode 120000 src/gudev/Makefile create mode 120000 src/initctl/Makefile create mode 120000 src/libsystemd-daemon/Makefile create mode 120000 src/libsystemd-id128/Makefile create mode 120000 src/libudev/Makefile create mode 120000 src/modules-load/Makefile create mode 120000 src/notify/Makefile create mode 120000 src/nspawn/Makefile create mode 120000 src/quotacheck/Makefile create mode 120000 src/random-seed/Makefile create mode 120000 src/rc-local-generator/Makefile create mode 120000 src/remount-api-vfs/Makefile create mode 120000 src/reply-password/Makefile create mode 120000 src/shutdownd/Makefile create mode 120000 src/stdio-bridge/Makefile create mode 120000 src/sysctl/Makefile create mode 120000 src/systemctl/Makefile create mode 120000 src/timestamp/Makefile create mode 120000 src/tmpfiles/Makefile create mode 120000 src/tty-ask-password-agent/Makefile create mode 120000 src/udev/Makefile create mode 120000 src/update-utmp/Makefile (limited to 'src/update-utmp') diff --git a/.gitignore b/.gitignore index ba34a3a076..2bfc77c7f8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,73 +6,71 @@ /systemd-cat /systemd-rc-local-generator /libsystemd-id128.pc -journalctl -systemd-journald -test-id128 -test-journal -test-install -org.freedesktop.hostname1.xml -org.freedesktop.locale1.xml -libsystemd-daemon.pc -libsystemd-login.pc -test-login -loginctl -systemd-localed -systemd-timedated -org.freedesktop.timedate1.xml -systemd-logind -systemd-uaccess -systemd-hostnamed -systemd-binfmt -systemd-getty-generator -systemd-nspawn -systemd-stdio-bridge -systemd-machine-id-setup -systemd-detect-virt -systemd-sysctl -test-strv -systemd-ac-power -systemd-timestamp -systemd-cryptsetup -systemd-cryptsetup-generator -systemd-tty-ask-password-agent -systemd-fsck -systemd-quotacheck -systemd-user-sessions -systemd-shutdown -systemd-tmpfiles -systemd-readahead-collect -systemd-readahead-replay -systemd-reply-password -systemd-gnome-ask-password-agent -systemd-ask-password -systemd-kmsg-syslogd -systemd-remount-api-vfs -test-hostname -systemd-modules-load -systemd-vconsole-setup -systemd-shutdownd -systemd-random-seed -systemd-update-utmp -test-env-replace -systemd-cgls -systemd.pc -test-cgroup +/journalctl +/systemd-journald +/test-id128 +/test-journal +/test-install +/org.freedesktop.hostname1.xml +/org.freedesktop.locale1.xml +/libsystemd-daemon.pc +/libsystemd-login.pc +/test-login +/loginctl +/systemd-localed +/systemd-timedated +/org.freedesktop.timedate1.xml +/systemd-logind +/systemd-uaccess +/systemd-hostnamed +/systemd-binfmt +/systemd-getty-generator +/systemd-nspawn +/systemd-stdio-bridge +/systemd-machine-id-setup +/systemd-detect-virt +/systemd-sysctl +/test-strv +/systemd-ac-power +/systemd-timestamp +/systemd-cryptsetup +/systemd-cryptsetup-generator +/systemd-tty-ask-password-agent +/systemd-fsck +/systemd-quotacheck +/systemd-user-sessions +/systemd-shutdown +/systemd-tmpfiles +/systemd-readahead-collect +/systemd-readahead-replay +/systemd-reply-password +/systemd-gnome-ask-password-agent +/systemd-ask-password +/systemd-kmsg-syslogd +/systemd-remount-api-vfs +/test-hostname +/systemd-modules-load +/systemd-vconsole-setup +/systemd-shutdownd +/systemd-random-seed +/systemd-update-utmp +/test-env-replace +/systemd-cgls +/systemd.pc +/test-cgroup .libs/ -systemd-notify -test-daemon -systemd-install -org.freedesktop.systemd1.*.xml -test-ns -test-loopback -systemd-cgroups-agent -systemd-initctl +/systemd-notify +/test-daemon +/org.freedesktop.systemd1.*.xml +/test-ns +/test-loopback +/systemd-cgroups-agent +/systemd-initctl /systemd -test-engine -test-job-type -systemd-stdout-syslog-bridge -systemctl -systemadm +/test-engine +/test-job-type +/systemctl +/systemadm .dirstamp *.1 *.3 @@ -103,11 +101,11 @@ missing stamp-* *.stamp /Makefile -ltmain.sh -*.tar.xz -*.tar.gz -*.tar.bz2 -libtool +/ltmain.sh +/*.tar.xz +/*.tar.gz +/*.tar.bz2 +/libtool /accelerometer /ata_id /cdrom_id diff --git a/src/ac-power/Makefile b/src/ac-power/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/ac-power/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/analyze/Makefile b/src/analyze/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/analyze/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/ask-password/Makefile b/src/ask-password/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/ask-password/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/cgls/Makefile b/src/cgls/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/cgls/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/cgroups-agent/Makefile b/src/cgroups-agent/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/cgroups-agent/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/cgtop/Makefile b/src/cgtop/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/cgtop/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/detect-virt/Makefile b/src/detect-virt/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/detect-virt/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/fsck/Makefile b/src/fsck/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/fsck/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/getty-generator/Makefile b/src/getty-generator/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/getty-generator/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/gudev/Makefile b/src/gudev/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/gudev/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/initctl/Makefile b/src/initctl/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/initctl/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/libsystemd-daemon/Makefile b/src/libsystemd-daemon/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/libsystemd-daemon/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/libsystemd-id128/Makefile b/src/libsystemd-id128/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/libsystemd-id128/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/libudev/Makefile b/src/libudev/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/libudev/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/modules-load/Makefile b/src/modules-load/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/modules-load/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/notify/Makefile b/src/notify/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/notify/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/nspawn/Makefile b/src/nspawn/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/nspawn/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/quotacheck/Makefile b/src/quotacheck/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/quotacheck/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/random-seed/Makefile b/src/random-seed/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/random-seed/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/rc-local-generator/Makefile b/src/rc-local-generator/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/rc-local-generator/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/remount-api-vfs/Makefile b/src/remount-api-vfs/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/remount-api-vfs/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/reply-password/Makefile b/src/reply-password/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/reply-password/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/shutdownd/Makefile b/src/shutdownd/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/shutdownd/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/stdio-bridge/Makefile b/src/stdio-bridge/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/stdio-bridge/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/sysctl/Makefile b/src/sysctl/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/sysctl/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/systemctl/Makefile b/src/systemctl/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/systemctl/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/timestamp/Makefile b/src/timestamp/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/timestamp/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/tmpfiles/Makefile b/src/tmpfiles/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/tmpfiles/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/tty-ask-password-agent/Makefile b/src/tty-ask-password-agent/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/tty-ask-password-agent/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/udev/Makefile b/src/udev/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/udev/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/src/update-utmp/Makefile b/src/update-utmp/Makefile new file mode 120000 index 0000000000..d0b0e8e008 --- /dev/null +++ b/src/update-utmp/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file -- cgit v1.2.3-54-g00ecf From 436dddeda6d212ffe2cc2ced4d84ce475137eddf Mon Sep 17 00:00:00 2001 From: Simon Peeters Date: Wed, 8 Aug 2012 17:19:30 +0200 Subject: update-utmp: use bus_method_call_with_reply() where posible --- src/update-utmp/update-utmp.c | 118 ++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 80 deletions(-) (limited to 'src/update-utmp') diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index ee9105bf47..fceeed8b44 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -50,36 +50,24 @@ static usec_t get_startup_time(Context *c) { *interface = "org.freedesktop.systemd1.Manager", *property = "StartupTimestamp"; - DBusError error; usec_t t = 0; - DBusMessage *m = NULL, *reply = NULL; + DBusMessage *reply = NULL; DBusMessageIter iter, sub; - dbus_error_init(&error); - assert(c); - if (!(m = dbus_message_new_method_call( - "org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.DBus.Properties", - "Get"))) { - log_error("Could not allocate message."); - goto finish; - } - - if (!dbus_message_append_args(m, - DBUS_TYPE_STRING, &interface, - DBUS_TYPE_STRING, &property, - DBUS_TYPE_INVALID)) { - log_error("Could not append arguments to message."); - goto finish; - } - - if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) { - log_error("Failed to send command: %s", bus_error_message(&error)); + if (bus_method_call_with_reply ( + c->bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.DBus.Properties", + "Get", + &reply, + NULL, + DBUS_TYPE_STRING, &interface, + DBUS_TYPE_STRING, &property, + DBUS_TYPE_INVALID)) goto finish; - } if (!dbus_message_iter_init(reply, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { @@ -97,14 +85,8 @@ static usec_t get_startup_time(Context *c) { dbus_message_iter_get_basic(&sub, &t); finish: - if (m) - dbus_message_unref(m); - if (reply) dbus_message_unref(reply); - - dbus_error_free(&error); - return t; } @@ -128,7 +110,7 @@ static int get_current_runlevel(Context *c) { *interface = "org.freedesktop.systemd1.Unit", *property = "ActiveState"; - DBusMessage *m = NULL, *reply = NULL; + DBusMessage *reply = NULL; int r = 0; unsigned i; DBusError error; @@ -141,28 +123,20 @@ static int get_current_runlevel(Context *c) { const char *path = NULL, *state; DBusMessageIter iter, sub; - if (!(m = dbus_message_new_method_call( - "org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.systemd1.Manager", - "GetUnit"))) { - log_error("Could not allocate message."); - r = -ENOMEM; + r = bus_method_call_with_reply ( + c->bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "GetUnit", + &reply, + NULL, + DBUS_TYPE_STRING, &table[i].special, + DBUS_TYPE_INVALID); + if (r == -ENOMEM) goto finish; - } - - if (!dbus_message_append_args(m, - DBUS_TYPE_STRING, &table[i].special, - DBUS_TYPE_INVALID)) { - log_error("Could not append arguments to message."); - r = -ENOMEM; - goto finish; - } - - if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) { - dbus_error_free(&error); + if (r) continue; - } if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &path, @@ -172,32 +146,20 @@ static int get_current_runlevel(Context *c) { goto finish; } - dbus_message_unref(m); - if (!(m = dbus_message_new_method_call( - "org.freedesktop.systemd1", - path, - "org.freedesktop.DBus.Properties", - "Get"))) { - log_error("Could not allocate message."); - r = -ENOMEM; - goto finish; - } - - if (!dbus_message_append_args(m, - DBUS_TYPE_STRING, &interface, - DBUS_TYPE_STRING, &property, - DBUS_TYPE_INVALID)) { - log_error("Could not append arguments to message."); - r = -ENOMEM; - goto finish; - } - dbus_message_unref(reply); - if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) { - log_error("Failed to send command: %s", bus_error_message(&error)); - r = -EIO; + r = bus_method_call_with_reply ( + c->bus, + "org.freedesktop.systemd1", + path, + "org.freedesktop.DBus.Properties", + "Get", + &reply, + NULL, + DBUS_TYPE_STRING, &interface, + DBUS_TYPE_STRING, &property, + DBUS_TYPE_INVALID); + if (r) goto finish; - } if (!dbus_message_iter_init(reply, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { @@ -219,18 +181,14 @@ static int get_current_runlevel(Context *c) { if (streq(state, "active") || streq(state, "reloading")) r = table[i].runlevel; - dbus_message_unref(m); dbus_message_unref(reply); - m = reply = NULL; + reply = NULL; if (r) break; } finish: - if (m) - dbus_message_unref(m); - if (reply) dbus_message_unref(reply); -- cgit v1.2.3-54-g00ecf From 55f2dca329afd0dcdc4793ce3e945cb8af653937 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 13 Sep 2012 10:51:30 -0400 Subject: update-utmp: Don't error out on runlevel updates if utmp doesn't exist Other parts of the code handle utmp not existing, so let's be consistent. At the moment my GNOME-OSTree builds don't have utmp. --- src/update-utmp/update-utmp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/update-utmp') diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index fceeed8b44..67c5788fe7 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -301,8 +301,10 @@ static int on_runlevel(Context *c) { #endif if ((q = utmp_put_runlevel(runlevel, previous)) < 0) { - log_error("Failed to write utmp record: %s", strerror(-q)); - r = q; + if (q != -ESRCH && q != -ENOENT) { + log_error("Failed to write utmp record: %s", strerror(-q)); + r = q; + } } return r; -- cgit v1.2.3-54-g00ecf From 19876c9b3de85f3b82dc3b8bbcaf3297b0d51edf Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 17 Sep 2012 17:45:18 +0200 Subject: utmp: read the right timestamp --- src/update-utmp/update-utmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/update-utmp') diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c index 67c5788fe7..a311280c27 100644 --- a/src/update-utmp/update-utmp.c +++ b/src/update-utmp/update-utmp.c @@ -48,7 +48,7 @@ typedef struct Context { static usec_t get_startup_time(Context *c) { const char *interface = "org.freedesktop.systemd1.Manager", - *property = "StartupTimestamp"; + *property = "UserspaceTimestamp"; usec_t t = 0; DBusMessage *reply = NULL; -- cgit v1.2.3-54-g00ecf