GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/authz/helper_log.cc
Date: 2026-10-04 02:40:33
Exec Total Coverage
Lines: 0 85 0.0%
Branches: 0 41 0.0%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5 #include "helper_log.h"
6
7 #include <errno.h>
8 #include <fcntl.h>
9 #include <syslog.h>
10 #include <unistd.h>
11
12 #include <cassert>
13 #include <cstdarg>
14 #include <cstdio>
15 #include <cstdlib>
16 #include <cstring>
17 #include <ctime>
18
19 using namespace std; // NOLINT
20
21 namespace {
22 int fd_debug = -1;
23 FILE *file_debug = NULL;
24 int syslog_facility = LOG_USER;
25 int syslog_level = LOG_NOTICE;
26 char *syslog_prefix = NULL;
27 } // namespace
28
29
30 ✗ void SetLogAuthzDebug(const string &path) {
31 ✗ assert(!path.empty());
32 ✗ if (fd_debug >= 0)
33 ✗ close(fd_debug);
34 ✗ const int fd_debug = open(path.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0600);
35 ✗ if (fd_debug < 0) {
36 ✗ syslog(LOG_USER | LOG_ERR, "could not open debug log %s (%d), abort",
37 ✗ path.c_str(), errno);
38 ✗ abort();
39 }
40 ✗ file_debug = fdopen(fd_debug, "a");
41 ✗ assert(file_debug != NULL);
42 }
43
44
45 ✗ void SetLogAuthzSyslogLevel(const int level) {
46 ✗ switch (level) {
47 ✗ case 1:
48 ✗ syslog_level = LOG_DEBUG;
49 ✗ break;
50 ✗ case 2:
51 ✗ syslog_level = LOG_INFO;
52 ✗ break;
53 ✗ case 3:
54 ✗ syslog_level = LOG_NOTICE;
55 ✗ break;
56 ✗ default:
57 ✗ syslog_level = LOG_NOTICE;
58 ✗ break;
59 }
60 }
61
62
63 ✗ void SetLogAuthzSyslogFacility(const int local_facility) {
64 ✗ switch (local_facility) {
65 ✗ case 0:
66 ✗ syslog_facility = LOG_LOCAL0;
67 ✗ break;
68 ✗ case 1:
69 ✗ syslog_facility = LOG_LOCAL1;
70 ✗ break;
71 ✗ case 2:
72 ✗ syslog_facility = LOG_LOCAL2;
73 ✗ break;
74 ✗ case 3:
75 ✗ syslog_facility = LOG_LOCAL3;
76 ✗ break;
77 ✗ case 4:
78 ✗ syslog_facility = LOG_LOCAL4;
79 ✗ break;
80 ✗ case 5:
81 ✗ syslog_facility = LOG_LOCAL5;
82 ✗ break;
83 ✗ case 6:
84 ✗ syslog_facility = LOG_LOCAL6;
85 ✗ break;
86 ✗ case 7:
87 ✗ syslog_facility = LOG_LOCAL7;
88 ✗ break;
89 ✗ default:
90 ✗ syslog_facility = LOG_USER;
91 }
92 }
93
94
95 ✗ void SetLogAuthzSyslogPrefix(const string &prefix) {
96 ✗ if (syslog_prefix)
97 ✗ free(syslog_prefix);
98
99 ✗ if (prefix == "") {
100 ✗ syslog_prefix = NULL;
101 } else {
102 ✗ const unsigned len = prefix.length() + 1;
103 ✗ syslog_prefix = static_cast<char *>(malloc(len));
104 ✗ assert(syslog_prefix != NULL);
105 ✗ syslog_prefix[len - 1] = '\0';
106 ✗ memcpy(syslog_prefix, &prefix[0], prefix.length());
107 }
108 }
109
110
111 ✗ void LogAuthz(const int flags, const char *format, ...) {
112 ✗ char *msg = NULL;
113 va_list variadic_list;
114 ✗ va_start(variadic_list, format);
115 ✗ const int retval = vasprintf(&msg, format, variadic_list);
116 ✗ assert(retval != -1); // else: out of memory
117 ✗ va_end(variadic_list);
118
119 ✗ if ((flags & kLogAuthzDebug) && (file_debug != NULL)) {
120 time_t rawtime;
121 ✗ time(&rawtime);
122 struct tm now;
123 ✗ localtime_r(&rawtime, &now);
124 ✗ fprintf(file_debug, "%s [%02d-%02d-%04d %02d:%02d:%02d %s]\n", msg,
125 ✗ (now.tm_mon) + 1, now.tm_mday, (now.tm_year) + 1900, now.tm_hour,
126 now.tm_min, now.tm_sec, now.tm_zone);
127 ✗ fflush(file_debug);
128 }
129
130 ✗ if (flags & (kLogAuthzSyslog | kLogAuthzSyslogWarn | kLogAuthzSyslogErr)) {
131 ✗ int level = syslog_level;
132 ✗ if (flags & kLogAuthzSyslogWarn)
133 ✗ level = LOG_WARNING;
134 ✗ if (flags & kLogAuthzSyslogErr)
135 ✗ level = LOG_ERR;
136 ✗ if (syslog_prefix) {
137 ✗ syslog(syslog_facility | level, "(%s) %s", syslog_prefix, msg);
138 } else {
139 ✗ syslog(syslog_facility | level, "%s", msg);
140 }
141 }
142
143 ✗ free(msg);
144 }
145