#include "audit-fd.h"
#if HAVE_AUDIT
+# include <stdbool.h>
-#include <libaudit.h>
-#include <stdbool.h>
-
-#include "capability-util.h"
-#include "fd-util.h"
-#include "log.h"
+# include "audit-util.h"
+# include "capability-util.h"
static bool initialized = false;
-static int audit_fd;
-
-int get_audit_fd(void) {
+static int audit_fd = -EBADF;
+#endif
+int get_core_audit_fd(void) {
+#if HAVE_AUDIT
if (!initialized) {
- if (have_effective_cap(CAP_AUDIT_WRITE) <= 0) {
+ if (have_effective_cap(CAP_AUDIT_WRITE) <= 0)
audit_fd = -EPERM;
- initialized = true;
-
- return audit_fd;
- }
-
- audit_fd = audit_open();
-
- if (audit_fd < 0) {
- if (!IN_SET(errno, EAFNOSUPPORT, EPROTONOSUPPORT))
- log_error_errno(errno, "Failed to connect to audit log: %m");
-
- audit_fd = errno ? -errno : -EINVAL;
- }
+ else
+ audit_fd = open_audit_fd_or_warn();
initialized = true;
}
return audit_fd;
-}
-
-void close_audit_fd(void) {
-
- if (initialized && audit_fd >= 0)
- safe_close(audit_fd);
-
- initialized = true;
- audit_fd = -ECONNRESET;
-}
-
#else
-
-int get_audit_fd(void) {
return -EAFNOSUPPORT;
+#endif
}
-void close_audit_fd(void) {
-}
-
+void close_core_audit_fd(void) {
+#if HAVE_AUDIT
+ close_audit_fd(audit_fd);
+ initialized = true;
+ audit_fd = -ECONNRESET;
#endif
+}
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
-int get_audit_fd(void);
-void close_audit_fd(void);
+int get_core_audit_fd(void);
+void close_core_audit_fd(void);
if (MANAGER_IS_RELOADING(m))
return;
- audit_fd = get_audit_fd();
+ audit_fd = get_core_audit_fd();
if (audit_fd < 0)
return;
if (ERRNO_IS_PRIVILEGE(errno)) {
/* We aren't allowed to send audit messages? Then let's not retry again. */
log_debug_errno(errno, "Failed to send audit message, closing audit socket: %m");
- close_audit_fd();
+ close_core_audit_fd();
} else
log_warning_errno(errno, "Failed to send audit message, ignoring: %m");
}
const char *fmt2;
#if HAVE_AUDIT
- int fd;
-
- fd = get_audit_fd();
+ int fd = get_core_audit_fd();
if (fd >= 0) {
_cleanup_free_ char *buf = NULL;
if (r >= 0) {
if (type == SELINUX_AVC)
- audit_log_user_avc_message(get_audit_fd(), AUDIT_USER_AVC, buf, NULL, NULL, NULL, getuid());
+ audit_log_user_avc_message(fd, AUDIT_USER_AVC, buf, NULL, NULL, NULL, getuid());
else if (type == SELINUX_ERROR)
- audit_log_user_avc_message(get_audit_fd(), AUDIT_USER_SELINUX_ERR, buf, NULL, NULL, NULL, getuid());
+ audit_log_user_avc_message(fd, AUDIT_USER_SELINUX_ERR, buf, NULL, NULL, NULL, getuid());
return 0;
}