|
Zbigniew Jędrzejewski-Szmek |
d0973d |
From 398049208b4aae5f2a9f0d4914dee6ab6e101118 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
Date: Fri, 10 Jan 2025 15:35:13 +0100
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
Subject: [PATCH 2/2] sysusers: emit audit events for user and group creation
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
Background: Fedora/RHEL are switching to sysusers.d metadata for creation of
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
users and groups for system users defined by packages
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
(https://fedoraproject.org/wiki/Changes/RPMSuportForSystemdSysusers).
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
Packages carry sysusers files. During package installation, rpm calls an
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
program to execute on this config. This program may either be
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
/usr/lib/rpm/sysusers.sh which calls useradd/groupadd, or
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
/usr/bin/systemd-sysusers. To match the functionality provided by
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
useradd/groupadd from the shadow-utils project, systemd-sysusers must emit
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
audit events so that it provides a drop-in replacement.
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
systemd-sysuers will emit audit events AUDIT_ADD_USER/AUDIT_ADD_GROUP when
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
adding users and groups. The operation "names" are copied from shadow-utils in
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
Fedora (which has a patch to change them from the upstream version), so the
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
format of the events that is generated on success should be identical.
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
The helper code is shared between sysusers and utmp-wtmp. I changed the
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
audit_fd variable to be unconditional. This way we can avoid ugly iffdefery
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
every time the variable would be used. The cost is that 4 bytes of unused
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
storage might be present. This is negligible, and the compiler might even be
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
able to optimize that away if it inlines things.
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
---
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
src/basic/audit-util.h | 33 +++++++++++++++++++++
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
src/sysusers/meson.build | 2 ++
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
src/sysusers/sysusers.c | 56 +++++++++++++++++++++++++++++++++++
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
src/update-utmp/update-utmp.c | 23 ++------------
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
4 files changed, 94 insertions(+), 20 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
diff --git a/src/basic/audit-util.h b/src/basic/audit-util.h
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
index 9a74e4f102..d8ecf14f69 100644
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
--- a/src/basic/audit-util.h
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+++ b/src/basic/audit-util.h
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -1,10 +1,16 @@
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#pragma once
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+# include <libaudit.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include <stdbool.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include <stdint.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include <sys/types.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#include "errno-util.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#include "log.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "pidref.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#define AUDIT_SESSION_INVALID UINT32_MAX
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -17,3 +23,30 @@ bool use_audit(void);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
static inline bool audit_session_is_valid(uint32_t id) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
return id > 0 && id != AUDIT_SESSION_INVALID;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+/* The wrappers for audit_open() and audit_close() are inline functions so that we don't get a spurious
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * linkage to libaudit in libbasic, but we also don't need to create a separate source file for two very
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * short functions. */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+static inline int close_audit_fd(int fd) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ if (fd >= 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ audit_close(fd);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#else
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ assert(fd < 0);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ return -EBADF;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+static inline int open_audit_fd_or_warn(void) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ int fd = -EBADF;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* If the kernel lacks netlink or audit support, don't worry about it. */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ fd = audit_open();
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ if (fd < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ return log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ errno, "Failed to connect to audit log, ignoring: %m");
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ return fd;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
diff --git a/src/sysusers/meson.build b/src/sysusers/meson.build
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
index 123ff41d3f..c968f55110 100644
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
--- a/src/sysusers/meson.build
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+++ b/src/sysusers/meson.build
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -9,6 +9,7 @@ executables += [
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
'name' : 'systemd-sysusers',
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
'public' : true,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
'sources' : files('sysusers.c'),
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ 'dependencies' : libaudit,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
},
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
executable_template + {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
'name' : 'systemd-sysusers.standalone',
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -20,6 +21,7 @@ executables += [
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
libshared_static,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
libsystemd_static,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
],
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ 'dependencies' : libaudit,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
'build_by_default' : have_standalone_binaries,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
'install' : have_standalone_binaries,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
},
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
index 44253483db..84eb9fc0c3 100644
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
--- a/src/sysusers/sysusers.c
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+++ b/src/sysusers/sysusers.c
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -3,6 +3,7 @@
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include <getopt.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "alloc-util.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#include "audit-util.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "build.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "chase.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "conf-files.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -106,6 +107,8 @@ STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
STATIC_DESTRUCTOR_REGISTER(arg_image_policy, image_policy_freep);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
typedef struct Context {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ int audit_fd;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
OrderedHashmap *users, *groups;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
OrderedHashmap *todo_uids, *todo_gids;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
OrderedHashmap *members;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -126,6 +129,8 @@ typedef struct Context {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
static void context_done(Context *c) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
assert(c);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ c->audit_fd = close_audit_fd(c->audit_fd);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
ordered_hashmap_free(c->groups);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
ordered_hashmap_free(c->users);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
ordered_hashmap_free(c->members);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -163,6 +168,48 @@ static void maybe_emit_login_defs_warning(Context *c) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
c->login_defs_need_warning = false;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+static void log_audit_accounts(Context *c, ItemType what) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ assert(c);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ assert(IN_SET(what, ADD_USER, ADD_GROUP));
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ if (arg_dry_run || c->audit_fd < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ return;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ Item *i;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ int type = what == ADD_USER ? AUDIT_ADD_USER : AUDIT_ADD_GROUP;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ const char *op = what == ADD_USER ? "adding-user" : "adding-group";
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* Notes:
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ *
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * The op must not contain whitespace. The format with a dash matches what Fedora shadow-utils uses.
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ *
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * We send id == -1, even though we know the number, in particular on success. This is because if we
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * send the id, the generated audit message will not contain the name. The name seems more useful
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * than the number, hence send just the name:
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ *
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * type=ADD_USER msg=audit(01/10/2025 16:02:00.639:3854) :
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * pid=3846380 uid=root auid=zbyszek ses=2 msg='op=adding-user id=unknown(952) exe=systemd-sysusers ... res=success'
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * vs.
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * type=ADD_USER msg=audit(01/10/2025 16:03:15.457:3908) :
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ * pid=3846607 uid=root auid=zbyszek ses=2 msg='op=adding-user acct=foo5 exe=systemd-sysusers ... res=success'
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ ORDERED_HASHMAP_FOREACH(i, what == ADD_USER ? c->todo_uids : c->todo_gids)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ audit_log_acct_message(
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ c->audit_fd,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ type,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ program_invocation_short_name,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ op,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ i->name,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* id= */ (unsigned) -1,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* host= */ NULL,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* addr= */ NULL,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* tty= */ NULL,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* success= */ 1);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
static int load_user_database(Context *c) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
_cleanup_fclose_ FILE *f = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
const char *passwd_path;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -971,6 +1018,8 @@ static int write_files(Context *c) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
group_tmp, group_path);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
group_tmp = mfree(group_tmp);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* OK, we have written the group entries successfully */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ log_audit_accounts(c, ADD_GROUP);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
if (gshadow) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
r = rename_and_apply_smack_floor_label(gshadow_tmp, gshadow_path);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -988,6 +1037,8 @@ static int write_files(Context *c) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
passwd_tmp = mfree(passwd_tmp);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* OK, we have written the user entries successfully */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ log_audit_accounts(c, ADD_USER);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
if (shadow) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
r = rename_and_apply_smack_floor_label(shadow_tmp, shadow_path);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -2232,6 +2283,7 @@ static int run(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
_cleanup_close_ int lock = -EBADF;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
_cleanup_(context_done) Context c = {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ .audit_fd = -EBADF,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
.search_uid = UID_INVALID,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
};
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -2281,6 +2333,10 @@ static int run(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
assert(!arg_image);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ /* Prepare to emit audit events, but only if we're operating on the host system. */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ if (!arg_root)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ c.audit_fd = open_audit_fd_or_warn();
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
/* If command line arguments are specified along with --replace, read all configuration files and
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
* insert the positional arguments at the specified place. Otherwise, if command line arguments are
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
* specified, execute just them, and finally, without --replace= or any positional arguments, just
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
index a10e6d478a..6df9414063 100644
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
--- a/src/update-utmp/update-utmp.c
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+++ b/src/update-utmp/update-utmp.c
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -5,12 +5,9 @@
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include <sys/types.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include <unistd.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#include <libaudit.h>
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "sd-bus.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+#include "audit-util.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "alloc-util.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "bus-error.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
#include "bus-locator.h"
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -30,20 +27,14 @@
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
typedef struct Context {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
sd_bus *bus;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
int audit_fd;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
} Context;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
static void context_clear(Context *c) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
assert(c);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
c->bus = sd_bus_flush_close_unref(c->bus);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- if (c->audit_fd >= 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- audit_close(c->audit_fd);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- c->audit_fd = -EBADF;
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ c->audit_fd = close_audit_fd(c->audit_fd);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
static int get_startup_monotonic_time(Context *c, usec_t *ret) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
@@ -256,22 +247,14 @@ static int run(int argc, char *argv[]) {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
};
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
_cleanup_(context_clear) Context c = {
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
.audit_fd = -EBADF,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
};
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
log_setup();
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
umask(0022);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#if HAVE_AUDIT
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- /* If the kernel lacks netlink or audit support, don't worry about it. */
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- c.audit_fd = audit_open();
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- if (c.audit_fd < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- log_full_errno(IN_SET(errno, EAFNOSUPPORT, EPROTONOSUPPORT) ? LOG_DEBUG : LOG_WARNING,
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
- errno, "Failed to connect to audit log, ignoring: %m");
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
-#endif
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
+ c.audit_fd = open_audit_fd_or_warn();
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
return dispatch_verb(argc, argv, verbs, &c);
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
}
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
--
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
2.47.1
|
|
Zbigniew Jędrzejewski-Szmek |
d0973d |
|