Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : 3 : : #include <errno.h> 4 : : 5 : : #include "audit-fd.h" 6 : : 7 : : #if HAVE_AUDIT 8 : : 9 : : #include <libaudit.h> 10 : : #include <stdbool.h> 11 : : 12 : : #include "capability-util.h" 13 : : #include "fd-util.h" 14 : : #include "log.h" 15 : : #include "util.h" 16 : : 17 : : static bool initialized = false; 18 : : static int audit_fd; 19 : : 20 : 0 : int get_audit_fd(void) { 21 : : 22 [ # # ]: 0 : if (!initialized) { 23 [ # # ]: 0 : if (have_effective_cap(CAP_AUDIT_WRITE) == 0) { 24 : 0 : audit_fd = -EPERM; 25 : 0 : initialized = true; 26 : : 27 : 0 : return audit_fd; 28 : : } 29 : : 30 : 0 : audit_fd = audit_open(); 31 : : 32 [ # # ]: 0 : if (audit_fd < 0) { 33 [ # # # # ]: 0 : if (!IN_SET(errno, EAFNOSUPPORT, EPROTONOSUPPORT)) 34 [ # # ]: 0 : log_error_errno(errno, "Failed to connect to audit log: %m"); 35 : : 36 [ # # ]: 0 : audit_fd = errno ? -errno : -EINVAL; 37 : : } 38 : : 39 : 0 : initialized = true; 40 : : } 41 : : 42 : 0 : return audit_fd; 43 : : } 44 : : 45 : 0 : void close_audit_fd(void) { 46 : : 47 [ # # # # ]: 0 : if (initialized && audit_fd >= 0) 48 : 0 : safe_close(audit_fd); 49 : : 50 : 0 : initialized = true; 51 : 0 : audit_fd = -ECONNRESET; 52 : 0 : } 53 : : 54 : : #else 55 : : 56 : : int get_audit_fd(void) { 57 : : return -EAFNOSUPPORT; 58 : : } 59 : : 60 : : void close_audit_fd(void) { 61 : : } 62 : : 63 : : #endif