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