Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : :
3 : : #include <string.h>
4 : : #include <syslog.h>
5 : :
6 : : #include "hexdecoct.h"
7 : : #include "macro.h"
8 : : #include "string-table.h"
9 : : #include "syslog-util.h"
10 : :
11 : 24 : int syslog_parse_priority(const char **p, int *priority, bool with_facility) {
12 : 24 : int a = 0, b = 0, c = 0;
13 : : const char *end;
14 : : size_t k;
15 : :
16 [ - + ]: 24 : assert(p);
17 [ - + ]: 24 : assert(*p);
18 [ - + ]: 24 : assert(priority);
19 : :
20 [ + + ]: 24 : if ((*p)[0] != '<')
21 : 8 : return 0;
22 : :
23 : 16 : end = strchr(*p, '>');
24 [ - + ]: 16 : if (!end)
25 : 0 : return 0;
26 : :
27 : 16 : k = end - *p;
28 [ - + ]: 16 : assert(k > 0);
29 : :
30 [ - + ]: 16 : if (k == 2)
31 : 0 : c = undecchar((*p)[1]);
32 [ - + ]: 16 : else if (k == 3) {
33 : 0 : b = undecchar((*p)[1]);
34 : 0 : c = undecchar((*p)[2]);
35 [ - + ]: 16 : } else if (k == 4) {
36 : 0 : a = undecchar((*p)[1]);
37 : 0 : b = undecchar((*p)[2]);
38 : 0 : c = undecchar((*p)[3]);
39 : : } else
40 : 16 : return 0;
41 : :
42 [ # # # # : 0 : if (a < 0 || b < 0 || c < 0 ||
# # ]
43 [ # # # # : 0 : (!with_facility && (a || b || c > 7)))
# # # # ]
44 : 0 : return 0;
45 : :
46 [ # # ]: 0 : if (with_facility)
47 : 0 : *priority = a*100 + b*10 + c;
48 : : else
49 : 0 : *priority = (*priority & LOG_FACMASK) | c;
50 : :
51 : 0 : *p += k + 1;
52 : 0 : return 1;
53 : : }
54 : :
55 : : static const char *const log_facility_unshifted_table[LOG_NFACILITIES] = {
56 : : [LOG_FAC(LOG_KERN)] = "kern",
57 : : [LOG_FAC(LOG_USER)] = "user",
58 : : [LOG_FAC(LOG_MAIL)] = "mail",
59 : : [LOG_FAC(LOG_DAEMON)] = "daemon",
60 : : [LOG_FAC(LOG_AUTH)] = "auth",
61 : : [LOG_FAC(LOG_SYSLOG)] = "syslog",
62 : : [LOG_FAC(LOG_LPR)] = "lpr",
63 : : [LOG_FAC(LOG_NEWS)] = "news",
64 : : [LOG_FAC(LOG_UUCP)] = "uucp",
65 : : [LOG_FAC(LOG_CRON)] = "cron",
66 : : [LOG_FAC(LOG_AUTHPRIV)] = "authpriv",
67 : : [LOG_FAC(LOG_FTP)] = "ftp",
68 : : [LOG_FAC(LOG_LOCAL0)] = "local0",
69 : : [LOG_FAC(LOG_LOCAL1)] = "local1",
70 : : [LOG_FAC(LOG_LOCAL2)] = "local2",
71 : : [LOG_FAC(LOG_LOCAL3)] = "local3",
72 : : [LOG_FAC(LOG_LOCAL4)] = "local4",
73 : : [LOG_FAC(LOG_LOCAL5)] = "local5",
74 : : [LOG_FAC(LOG_LOCAL6)] = "local6",
75 : : [LOG_FAC(LOG_LOCAL7)] = "local7"
76 : : };
77 : :
78 [ - + + + : 12 : DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_facility_unshifted, int, LOG_FAC(~0));
- + # # #
# ]
79 : :
80 : 0 : bool log_facility_unshifted_is_valid(int facility) {
81 [ # # # # ]: 0 : return facility >= 0 && facility <= LOG_FAC(~0);
82 : : }
83 : :
84 : : static const char *const log_level_table[] = {
85 : : [LOG_EMERG] = "emerg",
86 : : [LOG_ALERT] = "alert",
87 : : [LOG_CRIT] = "crit",
88 : : [LOG_ERR] = "err",
89 : : [LOG_WARNING] = "warning",
90 : : [LOG_NOTICE] = "notice",
91 : : [LOG_INFO] = "info",
92 : : [LOG_DEBUG] = "debug"
93 : : };
94 : :
95 [ + + + + : 787 : DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(log_level, int, LOG_DEBUG);
+ + - + #
# ]
96 : :
97 : 0 : bool log_level_is_valid(int level) {
98 [ # # # # ]: 0 : return level >= 0 && level <= LOG_DEBUG;
99 : : }
|