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