utmp: enable systemd-update-utmp by default

This commit is contained in:
Lennart Poettering
2010-08-11 04:38:55 +02:00
parent 41b02ec77e
commit cd6d0a456b
12 changed files with 109 additions and 30 deletions
+5 -4
View File
@@ -350,8 +350,6 @@ int main(int argc, char *argv[]) {
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_parse_environment();
log_info("systemd-initctl running as pid %lu", (unsigned long) getpid());
if ((n = sd_listen_fds(true)) < 0) {
log_error("Failed to read listening file descriptors from environment: %s", strerror(-r));
return 1;
@@ -365,6 +363,8 @@ int main(int argc, char *argv[]) {
if (server_init(&server, (unsigned) n) < 0)
return 2;
log_debug("systemd-initctl running as pid %lu", (unsigned long) getpid());
sd_notify(false,
"READY=1\n"
"STATUS=Processing requests...");
@@ -390,16 +390,17 @@ int main(int argc, char *argv[]) {
if ((k = process_event(&server, &event)) < 0)
goto fail;
}
r = 0;
log_debug("systemd-initctl stopped as pid %lu", (unsigned long) getpid());
fail:
sd_notify(false,
"STATUS=Shutting down...");
server_done(&server);
log_info("systemd-initctl stopped as pid %lu", (unsigned long) getpid());
dbus_shutdown();
return r;
+5 -4
View File
@@ -548,8 +548,6 @@ int main(int argc, char *argv[]) {
log_set_target(LOG_TARGET_SYSLOG_OR_KMSG);
log_parse_environment();
log_info("systemd-logger running as pid %lu", (unsigned long) getpid());
if ((n = sd_listen_fds(true)) < 0) {
log_error("Failed to read listening file descriptors from environment: %s", strerror(-r));
return 1;
@@ -563,6 +561,8 @@ int main(int argc, char *argv[]) {
if (server_init(&server, (unsigned) n) < 0)
return 3;
log_debug("systemd-logger running as pid %lu", (unsigned long) getpid());
sd_notify(false,
"READY=1\n"
"STATUS=Processing requests...");
@@ -588,15 +588,16 @@ int main(int argc, char *argv[]) {
if ((k = process_event(&server, &event)) < 0)
goto fail;
}
r = 0;
log_info("systemd-logger stopped as pid %lu", (unsigned long) getpid());
fail:
sd_notify(false,
"STATUS=Shutting down...");
server_done(&server);
log_info("systemd-logger stopped as pid %lu", (unsigned long) getpid());
return r;
}
-2
View File
@@ -27,7 +27,6 @@
#include <sys/signalfd.h>
#include <sys/wait.h>
#include <unistd.h>
#include <utmpx.h>
#include <sys/poll.h>
#include <sys/reboot.h>
#include <sys/ioctl.h>
@@ -48,7 +47,6 @@
#include "ratelimit.h"
#include "cgroup.h"
#include "mount-setup.h"
#include "utmp-wtmp.h"
#include "unit-name.h"
#include "dbus-unit.h"
#include "dbus-job.h"
+1 -1
View File
@@ -4612,7 +4612,7 @@ static int runlevel_main(void) {
int r, runlevel, previous;
if ((r = utmp_get_runlevel(&runlevel, &previous)) < 0) {
printf("unknown");
printf("unknown\n");
return r;
}
+19 -6
View File
@@ -990,8 +990,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
* even if they might map to the same high-level
* UnitActiveState! That means that ns == os is OK an expected
* behaviour here. For example: if a mount point is remounted
* this function will be called too and the utmp code below
* relies on that! */
* this function will be called too! */
dual_timestamp_get(&ts);
@@ -1115,9 +1114,11 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
log_open();
if (u->meta.type == UNIT_SERVICE &&
!UNIT_IS_ACTIVE_OR_RELOADING(os))
!UNIT_IS_ACTIVE_OR_RELOADING(os)) {
/* Write audit record if we have just finished starting up */
manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_START, 1);
u->meta.in_audit = true;
}
} else {
@@ -1132,10 +1133,22 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns) {
if (u->meta.type == UNIT_SERVICE &&
UNIT_IS_INACTIVE_OR_MAINTENANCE(ns) &&
!UNIT_IS_INACTIVE_OR_MAINTENANCE(os))
!UNIT_IS_INACTIVE_OR_MAINTENANCE(os)) {
/* Write audit record if we have just finished shutting down */
manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, ns == UNIT_INACTIVE);
/* Hmm, if there was no start record written
* write it now, so that we always have a nice
* pair */
if (!u->meta.in_audit) {
manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_START, ns == UNIT_INACTIVE);
if (ns == UNIT_INACTIVE)
manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, true);
} else
/* Write audit record if we have just finished shutting down */
manager_send_unit_audit(u->meta.manager, u, AUDIT_SERVICE_STOP, ns == UNIT_INACTIVE);
u->meta.in_audit = false;
}
}
/* Maybe we finished startup and are now ready for being
+2
View File
@@ -210,6 +210,8 @@ struct Meta {
bool sent_dbus_new_signal:1;
bool no_gc:1;
bool in_audit:1;
};
#include "service.h"
+10 -10
View File
@@ -112,8 +112,6 @@ static int get_current_runlevel(Context *c) {
} table[] = {
/* The first target of this list that is active or has
* a job scheduled wins */
{ '0', SPECIAL_POWEROFF_TARGET },
{ '6', SPECIAL_REBOOT_TARGET },
{ '5', SPECIAL_RUNLEVEL5_TARGET },
{ '4', SPECIAL_RUNLEVEL4_TARGET },
{ '3', SPECIAL_RUNLEVEL3_TARGET },
@@ -321,7 +319,9 @@ static int on_runlevel(Context *c) {
if (c->audit_fd >= 0) {
char *s = NULL;
if (asprintf(&s, "old-level=%c new-level=%c", previous, runlevel) < 0)
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) {
@@ -353,10 +353,10 @@ int main(int argc, char *argv[]) {
c.audit_fd = -1;
#endif
/* if (getppid() != 1) { */
/* log_error("This program should be invoked by init only."); */
/* return 1; */
/* } */
if (getppid() != 1) {
log_error("This program should be invoked by init only.");
return 1;
}
if (argc != 2) {
log_error("This program requires one argument.");
@@ -377,7 +377,7 @@ int main(int argc, char *argv[]) {
goto finish;
}
log_info("systemd-update-utmp running as pid %lu", (unsigned long) getpid());
log_debug("systemd-update-utmp running as pid %lu", (unsigned long) getpid());
if (streq(argv[1], "reboot"))
r = on_reboot(&c);
@@ -390,9 +390,9 @@ int main(int argc, char *argv[]) {
r = -EINVAL;
}
log_info("systemd-update-utmp stopped as pid %lu", (unsigned long) getpid());
finish:
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);