]>
Commit | Line | Data |
---|---|---|
acddc0ed | 1 | // SPDX-License-Identifier: ISC |
8429abe0 RW |
2 | /* $OpenBSD$ */ |
3 | ||
4 | /* | |
5 | * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> | |
8429abe0 RW |
6 | */ |
7 | ||
eac6e3f0 | 8 | #include <zebra.h> |
8429abe0 RW |
9 | |
10 | #include "ldpd.h" | |
11 | #include "ldpe.h" | |
12 | #include "lde.h" | |
13 | #include "log.h" | |
5f004539 | 14 | #include "printfrr.h" |
8429abe0 | 15 | |
eac6e3f0 | 16 | #include <lib/log.h> |
eac6e3f0 | 17 | |
fa68f9da | 18 | const char *log_procname; |
8429abe0 RW |
19 | |
20 | void | |
21 | logit(int pri, const char *fmt, ...) | |
22 | { | |
23 | va_list ap; | |
24 | ||
25 | va_start(ap, fmt); | |
26 | vlog(pri, fmt, ap); | |
27 | va_end(ap); | |
28 | } | |
29 | ||
eac6e3f0 | 30 | void |
8429abe0 RW |
31 | vlog(int pri, const char *fmt, va_list ap) |
32 | { | |
eac6e3f0 | 33 | char buf[1024]; |
8429abe0 | 34 | |
eac6e3f0 RW |
35 | switch (ldpd_process) { |
36 | case PROC_LDE_ENGINE: | |
5f004539 | 37 | vsnprintfrr(buf, sizeof(buf), fmt, ap); |
f2232fdf RW |
38 | lde_imsg_compose_parent_sync(IMSG_LOG, pri, buf, |
39 | strlen(buf) + 1); | |
eac6e3f0 RW |
40 | break; |
41 | case PROC_LDP_ENGINE: | |
5f004539 | 42 | vsnprintfrr(buf, sizeof(buf), fmt, ap); |
f2232fdf RW |
43 | ldpe_imsg_compose_parent_sync(IMSG_LOG, pri, buf, |
44 | strlen(buf) + 1); | |
eac6e3f0 RW |
45 | break; |
46 | case PROC_MAIN: | |
bb85d700 | 47 | vzlog(pri, fmt, ap); |
eac6e3f0 RW |
48 | break; |
49 | } | |
8429abe0 RW |
50 | } |
51 | ||
52 | void | |
53 | log_warn(const char *emsg, ...) | |
54 | { | |
55 | char *nfmt; | |
56 | va_list ap; | |
57 | ||
58 | /* best effort to even work in out of memory situations */ | |
59 | if (emsg == NULL) | |
a9916d2b | 60 | logit(LOG_ERR, "%s", strerror(errno)); |
8429abe0 RW |
61 | else { |
62 | va_start(ap, emsg); | |
63 | ||
64 | if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) { | |
65 | /* we tried it... */ | |
a9916d2b RW |
66 | vlog(LOG_ERR, emsg, ap); |
67 | logit(LOG_ERR, "%s", strerror(errno)); | |
8429abe0 | 68 | } else { |
c84e5187 DL |
69 | #pragma GCC diagnostic push |
70 | #pragma GCC diagnostic ignored "-Wformat-nonliteral" | |
71 | /* format extended above */ | |
a9916d2b | 72 | vlog(LOG_ERR, nfmt, ap); |
c84e5187 | 73 | #pragma GCC diagnostic pop |
8429abe0 RW |
74 | free(nfmt); |
75 | } | |
76 | va_end(ap); | |
77 | } | |
78 | } | |
79 | ||
80 | void | |
81 | log_warnx(const char *emsg, ...) | |
82 | { | |
83 | va_list ap; | |
84 | ||
85 | va_start(ap, emsg); | |
a9916d2b | 86 | vlog(LOG_ERR, emsg, ap); |
8429abe0 RW |
87 | va_end(ap); |
88 | } | |
89 | ||
90 | void | |
91 | log_info(const char *emsg, ...) | |
92 | { | |
93 | va_list ap; | |
94 | ||
95 | va_start(ap, emsg); | |
96 | vlog(LOG_INFO, emsg, ap); | |
97 | va_end(ap); | |
98 | } | |
99 | ||
eac6e3f0 RW |
100 | void |
101 | log_notice(const char *emsg, ...) | |
102 | { | |
103 | va_list ap; | |
104 | ||
105 | va_start(ap, emsg); | |
106 | vlog(LOG_NOTICE, emsg, ap); | |
107 | va_end(ap); | |
108 | } | |
109 | ||
8429abe0 RW |
110 | void |
111 | log_debug(const char *emsg, ...) | |
112 | { | |
113 | va_list ap; | |
114 | ||
eac6e3f0 RW |
115 | va_start(ap, emsg); |
116 | vlog(LOG_DEBUG, emsg, ap); | |
117 | va_end(ap); | |
8429abe0 RW |
118 | } |
119 | ||
120 | void | |
121 | fatal(const char *emsg) | |
122 | { | |
123 | if (emsg == NULL) | |
fa68f9da | 124 | logit(LOG_CRIT, "fatal in %s: %s", log_procname, |
8429abe0 RW |
125 | strerror(errno)); |
126 | else | |
127 | if (errno) | |
128 | logit(LOG_CRIT, "fatal in %s: %s: %s", | |
fa68f9da | 129 | log_procname, emsg, strerror(errno)); |
8429abe0 RW |
130 | else |
131 | logit(LOG_CRIT, "fatal in %s: %s", | |
fa68f9da | 132 | log_procname, emsg); |
8429abe0 RW |
133 | |
134 | exit(1); | |
135 | } | |
136 | ||
137 | void | |
138 | fatalx(const char *emsg) | |
139 | { | |
140 | errno = 0; | |
141 | fatal(emsg); | |
142 | } |