]> git.ipfire.org Git - thirdparty/dhcp.git/blame - omapip/errwarn.c
[master] Update log_fatal message to be shorter and point to the web page
[thirdparty/dhcp.git] / omapip / errwarn.c
CommitLineData
d7837182
TL
1/* errwarn.c
2
3 Errors and warnings... */
4
5/*
f39b6e00 6 * Copyright (c) 1995 RadioMail Corporation.
4889a646
SR
7 * Copyright (c) 2009,2014 by Internet Systems Consortium, Inc. ("ISC")
8 * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC")
98311e4b 9 * Copyright (c) 1996-2003 by Internet Software Consortium
d7837182 10 *
98311e4b
DH
11 * Permission to use, copy, modify, and distribute this software for any
12 * purpose with or without fee is hereby granted, provided that the above
13 * copyright notice and this permission notice appear in all copies.
d7837182 14 *
98311e4b
DH
15 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
16 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
18 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
d7837182 22 *
98311e4b
DH
23 * Internet Systems Consortium, Inc.
24 * 950 Charter Street
25 * Redwood City, CA 94063
26 * <info@isc.org>
2c85ac9b 27 * https://www.isc.org/
d7837182
TL
28 *
29 * This software was written for RadioMail Corporation by Ted Lemon
a2f303cd 30 * under a contract with Vixie Enterprises. Further modifications have
98311e4b 31 * been made for Internet Systems Consortium under a contract
a2f303cd 32 * with Vixie Laboratories.
d7837182
TL
33 */
34
fe5b0fdd
DH
35#include "dhcpd.h"
36
4bd8800e 37#include <omapip/omapip_p.h>
d7837182 38#include <errno.h>
fe5b0fdd 39#include <syslog.h>
d7837182 40
4bd8800e
TL
41#ifdef DEBUG
42int log_perror = -1;
43#else
44int log_perror = 1;
45#endif
46int log_priority;
47void (*log_cleanup) (void);
d7837182 48
0a10a8df
TL
49#define CVT_BUF_MAX 1023
50static char mbuf [CVT_BUF_MAX + 1];
51static char fbuf [CVT_BUF_MAX + 1];
d7837182
TL
52
53/* Log an error message, then exit... */
54
cfdfb9f1 55void log_fatal (const char * fmt, ... )
d7837182
TL
56{
57 va_list list;
d7837182
TL
58
59 do_percentm (fbuf, fmt);
60
98311e4b
DH
61 /* %Audit% This is log output. %2004.06.17,Safe%
62 * If we truncate we hope the user can get a hint from the log.
63 */
cfdfb9f1 64 va_start (list, fmt);
d7837182
TL
65 vsnprintf (mbuf, sizeof mbuf, fbuf, list);
66 va_end (list);
55526112 67
eb5cc81e 68#ifndef DEBUG
4f9e9f47 69 syslog (log_priority | LOG_ERR, "%s", mbuf);
eb5cc81e 70#endif
55526112
TL
71
72 /* Also log it to stderr? */
73 if (log_perror) {
ae566556
SR
74 IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
75 IGNORE_RET (write (STDERR_FILENO, "\n", 1));
55526112 76 }
d7837182 77
5d62f969 78 log_error ("%s", "");
4889a646
SR
79 log_error ("If you think you have received this message due to a bug rather");
80 log_error ("than a configuration issue please read the section on submitting");
81 log_error ("bugs on either our web page at www.isc.org or in the README file");
82 log_error ("before submitting a bug. These pages explain the proper");
83 log_error ("process and the information we find helpful for debugging..");
5d62f969 84 log_error ("%s", "");
f1b8950a 85 log_error ("exiting.");
4889a646 86
4bd8800e
TL
87 if (log_cleanup)
88 (*log_cleanup) ();
d7837182
TL
89 exit (1);
90}
91
8ae2d595 92/* Log an error message... */
d7837182 93
cfdfb9f1 94int log_error (const char * fmt, ...)
d7837182
TL
95{
96 va_list list;
97
98 do_percentm (fbuf, fmt);
99
98311e4b
DH
100 /* %Audit% This is log output. %2004.06.17,Safe%
101 * If we truncate we hope the user can get a hint from the log.
102 */
cfdfb9f1 103 va_start (list, fmt);
d7837182
TL
104 vsnprintf (mbuf, sizeof mbuf, fbuf, list);
105 va_end (list);
55526112 106
eb5cc81e 107#ifndef DEBUG
4f9e9f47 108 syslog (log_priority | LOG_ERR, "%s", mbuf);
eb5cc81e 109#endif
55526112
TL
110
111 if (log_perror) {
ae566556
SR
112 IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
113 IGNORE_RET (write (STDERR_FILENO, "\n", 1));
55526112
TL
114 }
115
d7837182
TL
116 return 0;
117}
118
119/* Log a note... */
120
cfdfb9f1 121int log_info (const char *fmt, ...)
d7837182
TL
122{
123 va_list list;
124
125 do_percentm (fbuf, fmt);
126
98311e4b
DH
127 /* %Audit% This is log output. %2004.06.17,Safe%
128 * If we truncate we hope the user can get a hint from the log.
129 */
cfdfb9f1 130 va_start (list, fmt);
d7837182
TL
131 vsnprintf (mbuf, sizeof mbuf, fbuf, list);
132 va_end (list);
55526112 133
eb5cc81e 134#ifndef DEBUG
4f9e9f47 135 syslog (log_priority | LOG_INFO, "%s", mbuf);
eb5cc81e 136#endif
55526112
TL
137
138 if (log_perror) {
ae566556
SR
139 IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
140 IGNORE_RET (write (STDERR_FILENO, "\n", 1));
55526112
TL
141 }
142
d7837182
TL
143 return 0;
144}
145
146/* Log a debug message... */
147
cfdfb9f1 148int log_debug (const char *fmt, ...)
d7837182
TL
149{
150 va_list list;
151
152 do_percentm (fbuf, fmt);
153
98311e4b
DH
154 /* %Audit% This is log output. %2004.06.17,Safe%
155 * If we truncate we hope the user can get a hint from the log.
156 */
cfdfb9f1 157 va_start (list, fmt);
d7837182
TL
158 vsnprintf (mbuf, sizeof mbuf, fbuf, list);
159 va_end (list);
55526112 160
eb5cc81e 161#ifndef DEBUG
4f9e9f47 162 syslog (log_priority | LOG_DEBUG, "%s", mbuf);
eb5cc81e 163#endif
55526112
TL
164
165 if (log_perror) {
ae566556
SR
166 IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
167 IGNORE_RET (write (STDERR_FILENO, "\n", 1));
55526112
TL
168 }
169
d7837182
TL
170 return 0;
171}
172
173/* Find %m in the input string and substitute an error message string. */
174
4bd8800e 175void do_percentm (obuf, ibuf)
d7837182 176 char *obuf;
b1b7b521 177 const char *ibuf;
d7837182 178{
b1b7b521 179 const char *s = ibuf;
7c695fad
TL
180 char *p = obuf;
181 int infmt = 0;
b1b7b521 182 const char *m;
0a10a8df 183 int len = 0;
d7837182 184
0a10a8df
TL
185 while (*s) {
186 if (infmt) {
187 if (*s == 'm') {
7c695fad
TL
188#ifndef __CYGWIN32__
189 m = strerror (errno);
190#else
191 m = pWSAError ();
192#endif
193 if (!m)
194 m = "<unknown error>";
0a10a8df
TL
195 len += strlen (m);
196 if (len > CVT_BUF_MAX)
197 goto out;
7c695fad
TL
198 strcpy (p - 1, m);
199 p += strlen (p);
200 ++s;
0a10a8df
TL
201 } else {
202 if (++len > CVT_BUF_MAX)
203 goto out;
7c695fad 204 *p++ = *s++;
0a10a8df 205 }
7c695fad 206 infmt = 0;
0a10a8df 207 } else {
7c695fad
TL
208 if (*s == '%')
209 infmt = 1;
0a10a8df
TL
210 if (++len > CVT_BUF_MAX)
211 goto out;
7c695fad
TL
212 *p++ = *s++;
213 }
d7837182 214 }
0a10a8df 215 out:
7c695fad 216 *p = 0;
d7837182
TL
217}
218
cd05ee6b
TL
219#ifdef NO_STRERROR
220char *strerror (err)
221 int err;
222{
223 extern char *sys_errlist [];
224 extern int sys_nerr;
225 static char errbuf [128];
226
227 if (err < 0 || err >= sys_nerr) {
228 sprintf (errbuf, "Error %d", err);
229 return errbuf;
230 }
231 return sys_errlist [err];
232}
233#endif /* NO_STRERROR */
7c695fad
TL
234
235#ifdef _WIN32
236char *pWSAError ()
237{
238 int err = WSAGetLastError ();
239
240 switch (err)
241 {
242 case WSAEACCES:
243 return "Permission denied";
244 case WSAEADDRINUSE:
245 return "Address already in use";
246 case WSAEADDRNOTAVAIL:
247 return "Cannot assign requested address";
248 case WSAEAFNOSUPPORT:
249 return "Address family not supported by protocol family";
250 case WSAEALREADY:
251 return "Operation already in progress";
252 case WSAECONNABORTED:
253 return "Software caused connection abort";
254 case WSAECONNREFUSED:
255 return "Connection refused";
256 case WSAECONNRESET:
257 return "Connection reset by peer";
258 case WSAEDESTADDRREQ:
259 return "Destination address required";
260 case WSAEFAULT:
261 return "Bad address";
262 case WSAEHOSTDOWN:
263 return "Host is down";
264 case WSAEHOSTUNREACH:
265 return "No route to host";
266 case WSAEINPROGRESS:
267 return "Operation now in progress";
268 case WSAEINTR:
269 return "Interrupted function call";
270 case WSAEINVAL:
271 return "Invalid argument";
272 case WSAEISCONN:
273 return "Socket is already connected";
274 case WSAEMFILE:
275 return "Too many open files";
276 case WSAEMSGSIZE:
277 return "Message too long";
278 case WSAENETDOWN:
279 return "Network is down";
280 case WSAENETRESET:
281 return "Network dropped connection on reset";
282 case WSAENETUNREACH:
283 return "Network is unreachable";
284 case WSAENOBUFS:
285 return "No buffer space available";
286 case WSAENOPROTOOPT:
287 return "Bad protocol option";
288 case WSAENOTCONN:
289 return "Socket is not connected";
290 case WSAENOTSOCK:
291 return "Socket operation on non-socket";
292 case WSAEOPNOTSUPP:
293 return "Operation not supported";
294 case WSAEPFNOSUPPORT:
295 return "Protocol family not supported";
296 case WSAEPROCLIM:
297 return "Too many processes";
298 case WSAEPROTONOSUPPORT:
299 return "Protocol not supported";
300 case WSAEPROTOTYPE:
301 return "Protocol wrong type for socket";
302 case WSAESHUTDOWN:
303 return "Cannot send after socket shutdown";
304 case WSAESOCKTNOSUPPORT:
305 return "Socket type not supported";
306 case WSAETIMEDOUT:
307 return "Connection timed out";
308 case WSAEWOULDBLOCK:
309 return "Resource temporarily unavailable";
310 case WSAHOST_NOT_FOUND:
311 return "Host not found";
312#if 0
313 case WSA_INVALID_HANDLE:
314 return "Specified event object handle is invalid";
315 case WSA_INVALID_PARAMETER:
316 return "One or more parameters are invalid";
317 case WSAINVALIDPROCTABLE:
318 return "Invalid procedure table from service provider";
319 case WSAINVALIDPROVIDER:
320 return "Invalid service provider version number";
321 case WSA_IO_PENDING:
322 return "Overlapped operations will complete later";
323 case WSA_IO_INCOMPLETE:
324 return "Overlapped I/O event object not in signaled state";
325 case WSA_NOT_ENOUGH_MEMORY:
326 return "Insufficient memory available";
327#endif
328 case WSANOTINITIALISED:
329 return "Successful WSAStartup not yet performer";
330 case WSANO_DATA:
331 return "Valid name, no data record of requested type";
332 case WSANO_RECOVERY:
333 return "This is a non-recoverable error";
334#if 0
335 case WSAPROVIDERFAILEDINIT:
336 return "Unable to initialize a service provider";
337 case WSASYSCALLFAILURE:
338 return "System call failure";
339#endif
340 case WSASYSNOTREADY:
341 return "Network subsystem is unavailable";
342 case WSATRY_AGAIN:
343 return "Non-authoritative host not found";
344 case WSAVERNOTSUPPORTED:
345 return "WINSOCK.DLL version out of range";
346 case WSAEDISCON:
347 return "Graceful shutdown in progress";
348#if 0
349 case WSA_OPERATION_ABORTED:
350 return "Overlapped operation aborted";
351#endif
352 }
353 return "Unknown WinSock error";
354}
355#endif /* _WIN32 */