]>
Commit | Line | Data |
---|---|---|
8429abe0 RW |
1 | /* $OpenBSD$ */ |
2 | ||
3 | /* | |
4 | * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> | |
5 | * | |
6 | * Permission to use, copy, modify, and distribute this software for any | |
7 | * purpose with or without fee is hereby granted, provided that the above | |
8 | * copyright notice and this permission notice appear in all copies. | |
9 | * | |
10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 | */ | |
18 | ||
eac6e3f0 | 19 | #include <zebra.h> |
8429abe0 RW |
20 | |
21 | #include "ldpd.h" | |
22 | #include "ldpe.h" | |
23 | #include "lde.h" | |
24 | #include "log.h" | |
25 | ||
eac6e3f0 | 26 | #include <lib/log.h> |
eac6e3f0 | 27 | |
fa68f9da | 28 | const char *log_procname; |
8429abe0 RW |
29 | |
30 | void | |
31 | logit(int pri, const char *fmt, ...) | |
32 | { | |
33 | va_list ap; | |
34 | ||
35 | va_start(ap, fmt); | |
36 | vlog(pri, fmt, ap); | |
37 | va_end(ap); | |
38 | } | |
39 | ||
eac6e3f0 | 40 | void |
8429abe0 RW |
41 | vlog(int pri, const char *fmt, va_list ap) |
42 | { | |
eac6e3f0 | 43 | char buf[1024]; |
8429abe0 | 44 | |
eac6e3f0 RW |
45 | switch (ldpd_process) { |
46 | case PROC_LDE_ENGINE: | |
47 | vsnprintf(buf, sizeof(buf), fmt, ap); | |
f2232fdf RW |
48 | lde_imsg_compose_parent_sync(IMSG_LOG, pri, buf, |
49 | strlen(buf) + 1); | |
eac6e3f0 RW |
50 | break; |
51 | case PROC_LDP_ENGINE: | |
52 | vsnprintf(buf, sizeof(buf), fmt, ap); | |
f2232fdf RW |
53 | ldpe_imsg_compose_parent_sync(IMSG_LOG, pri, buf, |
54 | strlen(buf) + 1); | |
eac6e3f0 RW |
55 | break; |
56 | case PROC_MAIN: | |
bb85d700 | 57 | vzlog(pri, fmt, ap); |
eac6e3f0 RW |
58 | break; |
59 | } | |
8429abe0 RW |
60 | } |
61 | ||
62 | void | |
63 | log_warn(const char *emsg, ...) | |
64 | { | |
65 | char *nfmt; | |
66 | va_list ap; | |
67 | ||
68 | /* best effort to even work in out of memory situations */ | |
69 | if (emsg == NULL) | |
a9916d2b | 70 | logit(LOG_ERR, "%s", strerror(errno)); |
8429abe0 RW |
71 | else { |
72 | va_start(ap, emsg); | |
73 | ||
74 | if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) { | |
75 | /* we tried it... */ | |
a9916d2b RW |
76 | vlog(LOG_ERR, emsg, ap); |
77 | logit(LOG_ERR, "%s", strerror(errno)); | |
8429abe0 | 78 | } else { |
a9916d2b | 79 | vlog(LOG_ERR, nfmt, ap); |
8429abe0 RW |
80 | free(nfmt); |
81 | } | |
82 | va_end(ap); | |
83 | } | |
84 | } | |
85 | ||
86 | void | |
87 | log_warnx(const char *emsg, ...) | |
88 | { | |
89 | va_list ap; | |
90 | ||
91 | va_start(ap, emsg); | |
a9916d2b | 92 | vlog(LOG_ERR, emsg, ap); |
8429abe0 RW |
93 | va_end(ap); |
94 | } | |
95 | ||
96 | void | |
97 | log_info(const char *emsg, ...) | |
98 | { | |
99 | va_list ap; | |
100 | ||
101 | va_start(ap, emsg); | |
102 | vlog(LOG_INFO, emsg, ap); | |
103 | va_end(ap); | |
104 | } | |
105 | ||
eac6e3f0 RW |
106 | void |
107 | log_notice(const char *emsg, ...) | |
108 | { | |
109 | va_list ap; | |
110 | ||
111 | va_start(ap, emsg); | |
112 | vlog(LOG_NOTICE, emsg, ap); | |
113 | va_end(ap); | |
114 | } | |
115 | ||
8429abe0 RW |
116 | void |
117 | log_debug(const char *emsg, ...) | |
118 | { | |
119 | va_list ap; | |
120 | ||
eac6e3f0 RW |
121 | va_start(ap, emsg); |
122 | vlog(LOG_DEBUG, emsg, ap); | |
123 | va_end(ap); | |
8429abe0 RW |
124 | } |
125 | ||
126 | void | |
127 | fatal(const char *emsg) | |
128 | { | |
129 | if (emsg == NULL) | |
fa68f9da | 130 | logit(LOG_CRIT, "fatal in %s: %s", log_procname, |
8429abe0 RW |
131 | strerror(errno)); |
132 | else | |
133 | if (errno) | |
134 | logit(LOG_CRIT, "fatal in %s: %s: %s", | |
fa68f9da | 135 | log_procname, emsg, strerror(errno)); |
8429abe0 RW |
136 | else |
137 | logit(LOG_CRIT, "fatal in %s: %s", | |
fa68f9da | 138 | log_procname, emsg); |
8429abe0 RW |
139 | |
140 | exit(1); | |
141 | } | |
142 | ||
143 | void | |
144 | fatalx(const char *emsg) | |
145 | { | |
146 | errno = 0; | |
147 | fatal(emsg); | |
148 | } |