]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journald-audit: make enable_audit() take Manager object
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Jul 2025 16:20:36 +0000 (01:20 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 18 Jul 2025 06:27:37 +0000 (15:27 +0900)
And rename it to manager_set_kernel_audit(), and make it log failures.

src/journal/journald-audit.c

index 479a4d27919940e15bdd9446a61679d4173a9146..05374f3329e5f6eca71b30c962d84a5ac41a4726 100644 (file)
@@ -460,7 +460,15 @@ void manager_process_audit_message(
         process_audit_string(m, nl->nlmsg_type, NLMSG_DATA(nl), nl->nlmsg_len - ALIGN(sizeof(struct nlmsghdr)));
 }
 
-static int enable_audit(int fd, bool b) {
+static int manager_set_kernel_audit(Manager *m) {
+        int r;
+
+        assert(m);
+        assert(m->audit_fd >= 0);
+
+        if (m->config.set_audit < 0)
+                return 0;
+
         struct {
                 union {
                         struct nlmsghdr header;
@@ -474,7 +482,7 @@ static int enable_audit(int fd, bool b) {
                 .header.nlmsg_seq = 1,
                 .header.nlmsg_pid = 0,
                 .body.mask = AUDIT_STATUS_ENABLED,
-                .body.enabled = b,
+                .body.enabled = m->config.set_audit,
         };
         union sockaddr_union sa = {
                 .nl.nl_family = AF_NETLINK,
@@ -491,17 +499,18 @@ static int enable_audit(int fd, bool b) {
                 .msg_namelen = sizeof(sa.nl),
         };
 
-        ssize_t n;
-
-        n = sendmsg(fd, &mh, MSG_NOSIGNAL);
+        r = 0;
+        ssize_t n = sendmsg(m->audit_fd, &mh, MSG_NOSIGNAL);
         if (n < 0)
-                return -errno;
+                r = -errno;
         if (n != NLMSG_LENGTH(sizeof(struct audit_status)))
-                return -EIO;
+                r = SYNTHETIC_ERRNO(EIO);
+        if (r < 0)
+                return log_warning_errno(r, "Failed to %s kernel auditing: %m", enable_disable(m->config.set_audit));
 
-        /* We don't wait for the result here, we can't do anything
-         * about it anyway */
+        /* We don't wait for the result here, we can't do anything about it anyway. */
 
+        log_debug("Auditing in kernel is %s.", enabled_disabled(m->config.set_audit));
         return 0;
 }
 
@@ -544,16 +553,6 @@ int manager_open_audit(Manager *m) {
         if (r < 0)
                 return log_error_errno(r, "Failed to add audit fd to event loop: %m");
 
-        if (m->config.set_audit >= 0) {
-                /* We are listening now, try to enable audit if configured so */
-                r = enable_audit(m->audit_fd, m->config.set_audit);
-                if (r < 0)
-                        log_warning_errno(r, "Failed to issue audit enable call: %m");
-                else if (m->config.set_audit > 0)
-                        log_debug("Auditing in kernel turned on.");
-                else
-                        log_debug("Auditing in kernel turned off.");
-        }
-
+        (void) manager_set_kernel_audit(m);
         return 0;
 }