1 /*------------------------------------------------------------------------------
2 *
3 * Copyright (c) 2011-2021, EURid vzw. All rights reserved.
4 * The YADIFA TM software product is provided under the BSD 3-clause license:
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * * Neither the name of EURid nor the names of its contributors may be
16 * used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 *------------------------------------------------------------------------------
32 *
33 */
34
35 /** @defgroup dnscoreerror Error
36 * @ingroup dnscore
37 * @brief
38 *
39 *
40 *
41 * @{
42 *
43 *----------------------------------------------------------------------------*/
44
45 #include <openssl/err.h>
46 #include <dnscore/logger_handle.h>
47 #include "dnscore/dnscore-config.h"
48 #include "dnscore/sys_types.h"
49 #include "dnscore/sys_error.h"
50 #include "dnscore/rfc.h"
51 #include "dnscore/u32_set.h"
52 #include "dnscore/output_stream.h"
53 #include "dnscore/format.h"
54 #include "dnscore/dnssec_errors.h"
55 #include "dnscore/parser.h"
56 #include "dnscore/config_settings.h"
57 #include "dnscore/cmdline.h"
58 #include "dnscore/zone_reader.h"
59 #include "dnscore/zone_reader_text.h"
60
61 extern logger_handle *g_system_logger;
62 #define MODULE_MSG_HANDLE g_system_logger
63
64 #define ERRORTBL_TAG 0x4c4254524f525245
65
66 #define ERROR_TEXT_COPIED 0
67
68 /*----------------------------------------------------------------------------*/
69
70 void
dief(ya_result error_code,const char * format,...)71 dief(ya_result error_code, const char* format, ...)
72 {
73 /**
74 * @note Cannot use format here. The output call HAS to be from the standard library/system.
75 */
76 fflush(NULL);
77 fprintf(stderr, "critical error : %i %x '%s'\n", error_code, error_code, error_gettext(error_code));
78 fflush(NULL);
79 va_list args;
80 va_start(args, format);
81 vfprintf(stderr, format, args); /* Keep native */
82 va_end(args);
83 fflush(NULL);
84 abort();
85 }
86
87 static u32_node *error_set = NULL;
88
89 void
error_register(ya_result code,const char * const text)90 error_register(ya_result code, const char* const text)
91 {
92 if(text == NULL)
93 {
94 fprintf(stderr, "error_register(%08x, NULL): text cannot be NULL", code);
95 fflush(stderr);
96 }
97
98 if(YA_ERROR_BASE(code) == ERRNO_ERROR_BASE)
99 {
100 fprintf(stderr, "error_register(%08x,%s): the errno space is reserved (0x8000xxxx), ignoring code", code, text);
101 fflush(stderr);
102 return;
103 }
104
105 u32_node *error_node;
106
107 if((error_node = u32_set_find(&error_set, code)) == NULL)
108 {
109 error_node = u32_set_insert(&error_set, code);
110
111 if(error_node->value == 0)
112 {
113 #if ERROR_TEXT_COPIED
114 error_node->value = strdup(text);
115 #else
116 error_node->value = (void*)text; /// @note 20210427 edf -- it used to be strdup(text), but the parameter is supposed to be a constant string.
117 #endif
118 }
119 }
120 else
121 {
122 fprintf(stderr, "error_register(%08x,%s): duplicate key, previous value = '%s'", code, text, (const char*)error_node->value);
123 fflush(stderr);
124 }
125 }
126
127 #if ERROR_TEXT_COPIED
128 static void
error_unregister_all_cb(u32_node * node)129 error_unregister_all_cb(u32_node *node)
130 {
131 free(node->value);
132 }
133 #endif
134
135 void
error_unregister_all()136 error_unregister_all()
137 {
138 #if ERROR_TEXT_COPIED
139 u32_set_callback_and_destroy(&error_set, error_unregister_all_cb);
140 #else
141 u32_set_destroy(&error_set);
142 #endif
143 }
144
145 static char error_gettext_tmp[64];
146
147 /**
148 *
149 * DEPRECATED
150 *
151 * @param code
152 * @return
153 */
154
155 const char*
error_gettext(ya_result code)156 error_gettext(ya_result code)
157 {
158 /* errno handling */
159
160 if(code > 0)
161 {
162 snprintf(error_gettext_tmp, sizeof(error_gettext_tmp), "success (%08x)", code);
163 return error_gettext_tmp;
164 }
165
166 if(YA_ERROR_BASE(code) == ERRNO_ERROR_BASE)
167 {
168 return strerror(YA_ERROR_CODE(code));
169 }
170
171 /**/
172
173 u32_node *error_node;
174
175 error_node = u32_set_find(&error_set, code);
176 if(error_node != NULL)
177 {
178 return (const char*)error_node->value;
179 }
180
181 u32 error_base = YA_ERROR_BASE(code);
182
183 error_node = u32_set_find(&error_set, error_base);
184 if(error_node != NULL)
185 {
186 return (const char*)error_node->value;
187 }
188
189 snprintf(error_gettext_tmp, sizeof(error_gettext_tmp), "undefined error code %08x", code);
190
191 return error_gettext_tmp;
192 }
193
194 /**
195 *
196 * Text representation of the error code
197 *
198 * @param os
199 * @param code
200 */
201
202 void
error_writetext(output_stream * os,ya_result code)203 error_writetext(output_stream *os, ya_result code)
204 {
205 /* errno handling */
206
207 if(code > 0)
208 {
209 osformat(os, "success (%08x)", code);
210 return;
211 }
212
213 if(YA_ERROR_BASE(code) == ERRNO_ERROR_BASE)
214 {
215 code &= 0xffff;
216 #if DEBUG
217 if(code == EINTR)
218 {
219 osprint(os, "<EINTR> "); // whoopsie
220 }
221 #endif
222 osprint(os, strerror(code));
223 return;
224 }
225 else if(YA_ERROR_BASE(code) == SSL_ERROR_BASE)
226 {
227 code &= 0xffff;
228 char buffer[256];
229 ERR_error_string_n(code, buffer, sizeof(buffer));
230 osformat(os, "SSL error %i '%s'", code, buffer);
231 return;
232 }
233
234 /**/
235
236 u32_node *error_node;
237
238 error_node = u32_set_find(&error_set, code);
239 if(error_node != NULL)
240 {
241 osprint(os, (const char*)error_node->value);
242 return;
243 }
244
245 u32 error_base = YA_ERROR_BASE(code);
246
247 error_node = u32_set_find(&error_set, error_base);
248 if(error_node != NULL)
249 {
250 osformatln(os, "%s(%08x)", (const char*)error_node->value, code);
251 return;
252 }
253
254 osformat(os, "undefined error code %08x", code);
255 }
256
257 static bool dnscore_register_errors_done = FALSE;
258
259 void
dnscore_register_errors()260 dnscore_register_errors()
261 {
262 if(dnscore_register_errors_done)
263 {
264 return;
265 }
266
267 dnscore_register_errors_done = TRUE;
268
269 error_register(SUCCESS, "SUCCESS");
270
271 error_register(PARSEB16_ERROR, "PARSEB16_ERROR");
272 error_register(PARSEB32_ERROR, "PARSEB32_ERROR");
273 error_register(PARSEB32H_ERROR, "PARSEB32H_ERROR");
274 error_register(PARSEB64_ERROR, "PARSEB64_ERROR");
275 error_register(PARSEINT_ERROR, "PARSEINT_ERROR");
276 error_register(PARSEDATE_ERROR, "PARSEDATE_ERROR");
277 error_register(PARSEIP_ERROR, "PARSEIP_ERROR");
278
279 error_register(CIRCULAR_FILE_FULL, "CIRCULAR_FILE_FULL");
280 error_register(CIRCULAR_FILE_SHORT, "CIRCULAR_FILE_SHORT");
281 error_register(CIRCULAR_FILE_END, "CIRCULAR_FILE_FULL");
282 error_register(CIRCULAR_FILE_LIMIT_EXCEEDED, "CIRCULAR_FILE_LIMIT_EXCEEDED");
283
284 error_register(DATA_FORMAT_ERROR, "DATA_FORMAT_ERROR");
285
286 error_register(LOCK_FAILED, "LOCK_FAILED");
287
288 error_register(TCP_RATE_TOO_SLOW, "TCP_RATE_TOO_SLOW");
289
290 error_register(PARSEWORD_NOMATCH_ERROR, "PARSEWORD_NOMATCH_ERROR");
291 error_register(PARSESTRING_ERROR, "PARSESTRING_ERROR");
292 error_register(PARSE_BUFFER_TOO_SMALL_ERROR, "PARSE_BUFFER_TOO_SMALL_ERROR");
293 error_register(PARSE_INVALID_CHARACTER, "PARSE_INVALID_CHARACTER");
294 error_register(PARSE_INVALID_ARGUMENT, "PARSE_INVALID_ARGUMENT");
295 error_register(PARSE_EMPTY_ARGUMENT, "PARSE_EMPTY_ARGUMENT");
296
297 error_register(CONFIG_SECTION_CALLBACK_ALREADY_SET, "CONFIG_SECTION_CALLBACK_ALREADY_SET");
298 error_register(CONFIG_SECTION_CALLBACK_NOT_SET, "CONFIG_SECTION_CALLBACK_NOT_SET");
299 error_register(CONFIG_SECTION_CALLBACK_NOT_FOUND, "CONFIG_SECTION_CALLBACK_NOT_FOUND");
300 error_register(CONFIG_NOT_A_REGULAR_FILE, "CONFIG_NOT_A_REGULAR_FILE");
301 error_register(CONFIG_TOO_MANY_HOSTS, "CONFIG_TOO_MANY_HOSTS");
302 error_register(CONFIG_FQDN_NOT_ALLOWED, "CONFIG_FQDN_NOT_ALLOWED");
303 error_register(CONFIG_PORT_NOT_ALLOWED, "CONFIG_PORT_NOT_ALLOWED");
304 error_register(CONFIG_EXPECTED_VALID_PORT_VALUE, "CONFIG_EXPECTED_VALID_PORT_VALUE");
305 error_register(CONFIG_TSIG_NOT_ALLOWED, "CONFIG_TSIG_NOT_ALLOWED");
306 error_register(CONFIG_INTERNAL_ERROR, "CONFIG_INTERNAL_ERROR");
307 error_register(CONFIG_IPV4_NOT_ALLOWED, "CONFIG_IPV4_NOT_ALLOWED");
308 error_register(CONFIG_IPV6_NOT_ALLOWED, "CONFIG_IPV6_NOT_ALLOWED");
309 error_register(CONFIG_KEY_UNKNOWN, "CONFIG_KEY_UNKNOWN");
310 error_register(CONFIG_KEY_PARSE_ERROR, "CONFIG_KEY_PARSE_ERROR");
311 error_register(CONFIG_SECTION_ERROR, "CONFIG_SECTION_ERROR");
312 error_register(CONFIG_IS_BUSY, "CONFIG_IS_BUSY");
313 error_register(CONFIG_FILE_NOT_FOUND, "CONFIG_FILE_NOT_FOUND");
314
315 error_register(LOGGER_INITIALISATION_ERROR, "LOGGER_INITIALISATION_ERROR");
316 error_register(COMMAND_ARGUMENT_EXPECTED, "COMMAND_ARGUMENT_EXPECTED");
317 error_register(OBJECT_NOT_INITIALIZED, "OBJECT_NOT_INITIALIZED");
318 error_register(FORMAT_ALREADY_REGISTERED, "FORMAT_ALREADY_REGISTERED");
319 error_register(STOPPED_BY_APPLICATION_SHUTDOWN, "STOPPED_BY_APPLICATION_SHUTDOWN");
320 error_register(INVALID_STATE_ERROR, "INVALID_STATE_ERROR");
321 error_register(FEATURE_NOT_IMPLEMENTED_ERROR, "FEATURE_NOT_IMPLEMENTED_ERROR");
322 error_register(UNEXPECTED_NULL_ARGUMENT_ERROR, "UNEXPECTED_NULL_ARGUMENT_ERROR");
323 error_register(INVALID_ARGUMENT_ERROR, "INVALID_ARGUMENT_ERROR");
324
325 error_register(INVALID_PATH, "INVALID_PATH");
326 error_register(PID_LOCKED, "PID_LOCKED");
327
328 error_register(UNABLE_TO_COMPLETE_FULL_READ, "UNABLE_TO_COMPLETE_FULL_READ");
329 error_register(UNEXPECTED_EOF, "UNEXPECTED_EOF");
330 error_register(UNSUPPORTED_TYPE, "UNSUPPORTED_TYPE");
331 error_register(UNSUPPORTED_CLASS, "UNSUPPORTED_CLASS");
332
333 error_register(CANNOT_OPEN_FILE, "CANNOT_OPEN_FILE");
334
335 error_register(UNKNOWN_NAME, "UNKNOWN_NAME");
336 error_register(BIGGER_THAN_PATH_MAX, "BIGGER_THAN_PATH_MAX");
337 error_register(UNABLE_TO_COMPLETE_FULL_WRITE, "UNABLE_TO_COMPLETE_FULL_WRITE");
338 error_register(BUFFER_WOULD_OVERFLOW, "BUFFER_WOULD_OVERFLOW");
339 error_register(CHROOT_NOT_A_DIRECTORY, "CHROOT_NOT_A_DIRECTORY");
340 error_register(CHROOT_ALREADY_JAILED, "CHROOT_ALREADY_JAILED");
341 error_register(IP_VERSION_NOT_SUPPORTED, "IP_VERSION_NOT_SUPPORTED");
342
343 error_register(THREAD_CREATION_ERROR, "THREAD_CREATION_ERROR");
344 error_register(THREAD_DOUBLEDESTRUCTION_ERROR, "THREAD_DOUBLEDESTRUCTION_ERROR");
345 error_register(SERVICE_ID_ERROR, "SERVICE_ID_ERROR");
346 error_register(SERVICE_WITHOUT_ENTRY_POINT, "SERVICE_WITHOUT_ENTRY_POINT");
347 error_register(SERVICE_ALREADY_INITIALISED, "SERVICE_ALREADY_INITIALISED");
348 error_register(SERVICE_ALREADY_RUNNING, "SERVICE_ALREADY_RUNNING");
349 error_register(SERVICE_NOT_RUNNING, "SERVICE_NOT_RUNNING");
350 error_register(SERVICE_NOT_INITIALISED, "SERVICE_NOT_INITIALISED");
351 error_register(SERVICE_HAS_RUNNING_THREADS, "SERVICE_HAS_RUNNING_THREADS");
352
353 error_register(TSIG_DUPLICATE_REGISTRATION, "TSIG_DUPLICATE_REGISTRATION");
354 error_register(TSIG_UNABLE_TO_SIGN, "TSIG_UNABLE_TO_SIGN");
355
356 error_register(NET_UNABLE_TO_RESOLVE_HOST, "NET_UNABLE_TO_RESOLVE_HOST");
357
358 error_register(CHARON_ERROR_FILE_LOCKED, "CHARON_ERROR_FILE_LOCKED");
359 error_register(CHARON_ERROR_NOT_AUTHORISED, "CHARON_ERROR_NOT_AUTHORISED");
360 error_register(CHARON_ERROR_UNKNOWN_ID, "CHARON_ERROR_UNKNOWN_ID");
361 error_register(CHARON_ERROR_EXPECTED_MAGIC_HEAD, "CHARON_ERROR_EXPECTED_MAGIC_HEAD");
362 error_register(CHARON_ERROR_INVALID_HEAD, "CHARON_ERROR_INVALID_HEAD");
363 error_register(CHARON_ERROR_INVALID_TAIL, "CHARON_ERROR_INVALID_TAIL");
364 error_register(CHARON_ERROR_INVALID_COMMAND, "CHARON_ERROR_INVALID_COMMAND");
365 error_register(CHARON_ERROR_COMMAND_SEQ_MISMATCHED, "CHARON_ERROR_COMMAND_SEQ_MISMATCHED");
366
367 error_register(CHARON_ERROR_UNKNOWN_MAGIC, "CHARON_ERROR_UNKNOWN_MAGIC");
368 error_register(CHARON_ERROR_ALREADY_RUNNING, "CHARON_ERROR_ALREADY_RUNNING");
369 error_register(CHARON_ERROR_ALREADY_STOPPED, "CHARON_ERROR_ALREADY_STOPPED");
370
371 error_register(LOGGER_CHANNEL_ALREADY_REGISTERED, "LOGGER_CHANNEL_ALREADY_REGISTERED");
372 error_register(LOGGER_CHANNEL_NOT_REGISTERED, "LOGGER_CHANNEL_NOT_REGISTERED");
373 error_register(LOGGER_CHANNEL_HAS_LINKS, "LOGGER_CHANNEL_HAS_LINKS");
374
375 error_register(ALARM_REARM, "ALARM_REARM");
376
377 error_register(DNS_ERROR_BASE, "DNS_ERROR_BASE");
378 error_register(DOMAIN_TOO_LONG, "DOMAIN_TOO_LONG");
379 error_register(INCORRECT_IPADDRESS, "INCORRECT_IPADDRESS");
380 error_register(INCORRECT_RDATA, "INCORRECT_RDATA");
381 error_register(LABEL_TOO_LONG, "LABEL_TOO_LONG");
382 error_register(INVALID_CHARSET, "INVALID_CHARSET");
383 error_register(ZONEFILE_INVALID_TYPE, "ZONEFILE_INVALID_TYPE");
384 error_register(DOMAINNAME_INVALID, "DOMAINNAME_INVALID");
385 error_register(TSIG_FORMERR, "TSIG_FORMERR");
386 error_register(TSIG_SIZE_LIMIT_ERROR, "TSIG_SIZE_LIMIT_ERROR");
387 error_register(UNPROCESSABLE_MESSAGE, "UNPROCESSABLE_MESSAGE");
388 error_register(INVALID_PROTOCOL, "INVALID_PROTOCOL");
389 error_register(INVALID_RECORD, "INVALID_RECORD");
390 error_register(UNSUPPORTED_RECORD, "UNSUPPORTED_RECORD");
391 error_register(ZONE_ALREADY_UP_TO_DATE, "ZONE_ALREADY_UP_TO_DATE");
392 error_register(UNKNOWN_DNS_TYPE, "UNKNOWN_DNS_TYPE");
393 error_register(UNKNOWN_DNS_CLASS, "UNKNOWN_DNS_CLASS");
394 //error_register(INVALID_MESSAGE, "INVALID_MESSAGE");
395 error_register(MESSAGE_HAS_WRONG_ID, "MESSAGE_HAS_WRONG_ID");
396 error_register(MESSAGE_IS_NOT_AN_ANSWER, "MESSAGE_IS_NOT_AN_ANSWER");
397 error_register(MESSAGE_UNEXPECTED_ANSWER_DOMAIN, "MESSAGE_UNEXPECTED_ANSWER_DOMAIN");
398 error_register(MESSAGE_UNEXPECTED_ANSWER_TYPE_CLASS, "MESSAGE_UNEXPECTED_ANSWER_TYPE_CLASS");
399 error_register(MESSAGE_CONTENT_OVERFLOW, "MESSAGE_CONTENT_OVERFLOW");
400 error_register(MESSAGE_TRUNCATED, "MESSAGE_TRUNCATED");
401
402 error_register(RRSIG_COVERED_TYPE_DIFFERS, "RRSIG_COVERED_TYPE_DIFFERS");
403 error_register(RRSIG_OUTPUT_DIGEST_SIZE_TOO_BIG, "RRSIG_OUTPUT_DIGEST_SIZE_TOO_BIG");
404 error_register(RRSIG_UNSUPPORTED_COVERED_TYPE, "RRSIG_UNSUPPORTED_COVERED_TYPE");
405 error_register(RRSIG_VERIFICATION_FAILED, "RRSIG_VERIFICATION_FAILED");
406
407 error_register(DNSSEC_ALGORITHM_UNKOWN, "DNSSEC_ALGORITHM_UNKOWN");
408
409 /* DNS */
410
411 error_register(RCODE_ERROR_CODE(RCODE_NOERROR), "NOERROR");
412 error_register(RCODE_ERROR_CODE(RCODE_FORMERR), "FORMERR");
413 error_register(RCODE_ERROR_CODE(RCODE_SERVFAIL), "SERVFAIL");
414 error_register(RCODE_ERROR_CODE(RCODE_NXDOMAIN), "NXDOMAIN");
415 error_register(RCODE_ERROR_CODE(RCODE_NOTIMP), "NOTIMP");
416 error_register(RCODE_ERROR_CODE(RCODE_REFUSED), "REFUSED");
417 error_register(RCODE_ERROR_CODE(RCODE_YXDOMAIN), "YXDOMAIN");
418 error_register(RCODE_ERROR_CODE(RCODE_YXRRSET), "YXRRSET");
419 error_register(RCODE_ERROR_CODE(RCODE_NXRRSET), "NXRRSET");
420 error_register(RCODE_ERROR_CODE(RCODE_NOTAUTH), "NOTAUTH");
421 error_register(RCODE_ERROR_CODE(RCODE_NOTZONE), "NOTZONE");
422
423 error_register(RCODE_ERROR_CODE(RCODE_BADVERS), "BADVERS");
424 //error_register(RCODE_ERROR_CODE(RCODE_BADSIG), "BADSIG");
425 error_register(RCODE_ERROR_CODE(RCODE_BADKEY), "BADKEY");
426 error_register(RCODE_ERROR_CODE(RCODE_BADTIME), "BADTIME");
427 error_register(RCODE_ERROR_CODE(RCODE_BADMODE), "BADMODE");
428 error_register(RCODE_ERROR_CODE(RCODE_BADNAME), "BADNAME");
429 error_register(RCODE_ERROR_CODE(RCODE_BADALG), "BADALG");
430 error_register(RCODE_ERROR_CODE(RCODE_BADTRUNC), "BADTRUNC");
431
432 error_register(DNSSEC_ERROR_BASE, "DNSSEC_ERROR_BASE");
433
434 error_register(DNSSEC_ERROR_NOENGINE, "DNSSEC_ERROR_NOENGINE");
435 error_register(DNSSEC_ERROR_INVALIDENGINE, "DNSSEC_ERROR_INVALIDENGINE");
436 error_register(DNSSEC_ERROR_CANTPOOLTHREAD, "DNSSEC_ERROR_CANTPOOLTHREAD");
437
438 error_register(DNSSEC_ERROR_UNSUPPORTEDKEYALGORITHM, "DNSSEC_ERROR_UNSUPPORTEDKEYALGORITHM");
439 error_register(DNSSEC_ERROR_UNSUPPORTEDDIGESTALGORITHM, "DNSSEC_ERROR_UNSUPPORTEDDIGESTALGORITHM");
440 error_register(DNSSEC_ERROR_FILE_FORMAT_VERSION, "DNSSEC_ERROR_FILE_FORMAT_VERSION");
441 error_register(DNSSEC_ERROR_EXPECTED_CLASS_IN, "DNSSEC_ERROR_EXPECTED_CLASS_IN");
442 error_register(DNSSEC_ERROR_EXPECTED_TYPE_DNSKEY, "DNSSEC_ERROR_EXPECTED_TYPE_DNSKEY");
443
444 error_register(DNSSEC_ERROR_DUPLICATEKEY, "DNSSEC_ERROR_DUPLICATEKEY");
445 error_register(DNSSEC_ERROR_INCOMPLETEKEY, "DNSSEC_ERROR_INCOMPLETEKEY");
446 error_register(DNSSEC_ERROR_KEYSTOREPATHISTOOLONG, "DNSSEC_ERROR_KEYSTOREPATHISTOOLONG");
447 error_register(DNSSEC_ERROR_UNABLETOCREATEKEYFILES, "DNSSEC_ERROR_UNABLETOCREATEKEYFILES");
448 error_register(DNSSEC_ERROR_KEYWRITEERROR, "DNSSEC_ERROR_KEYWRITEERROR");
449 error_register(DNSSEC_ERROR_BNISNULL, "DNSSEC_ERROR_BNISNULL");
450 error_register(DNSSEC_ERROR_BNISBIGGERTHANBUFFER, "DNSSEC_ERROR_BNISBIGGERTHANBUFFER");
451 error_register(DNSSEC_ERROR_UNEXPECTEDKEYSIZE, "DNSSEC_ERROR_UNEXPECTEDKEYSIZE");
452 error_register(DNSSEC_ERROR_KEYISTOOBIG, "DNSSEC_ERROR_KEYISTOOBIG");
453 error_register(DNSSEC_ERROR_KEYRING_ALGOTAG_COLLISION, "DNSSEC_ERROR_KEYRING_ALGOTAG_COLLISION");
454
455 error_register(DNSSEC_ERROR_KEYRING_KEY_IS_NOT_PRIVATE,"DNSSEC_ERROR_KEYRING_KEY_IS_NOT_PRIVATE");
456
457 error_register(DNSSEC_ERROR_KEY_GENERATION_FAILED, "DNSSEC_ERROR_KEY_GENERATION_FAILED");
458 error_register(DNSSEC_ERROR_NO_KEY_FOR_DOMAIN, "DNSSEC_ERROR_NO_KEY_FOR_DOMAIN");
459
460 error_register(DNSSEC_ERROR_CANNOT_WRITE_NEW_FILE, "DNSSEC_ERROR_CANNOT_WRITE_NEW_FILE");
461 error_register(DNSSEC_ERROR_FIELD_NOT_HANDLED, "DNSSEC_ERROR_FIELD_NOT_HANDLED");
462 error_register(DNSSEC_ERROR_CANNOT_READ_KEY_FROM_RDATA, "DNSSEC_ERROR_CANNOT_READ_KEY_FROM_RDATA");
463
464 error_register(DNSSEC_ERROR_RSASIGNATUREFAILED, "DNSSEC_ERROR_RSASIGNATUREFAILED");
465 error_register(DNSSEC_ERROR_DSASIGNATUREFAILED, "DNSSEC_ERROR_DSASIGNATUREFAILED");
466
467 error_register(DNSSEC_ERROR_NSEC3_INVALIDZONESTATE, "DNSSEC_ERROR_NSEC3_INVALIDZONESTATE");
468 error_register(DNSSEC_ERROR_NSEC3_LABELTODIGESTFAILED, "DNSSEC_ERROR_NSEC3_LABELTODIGESTFAILED");
469 error_register(DNSSEC_ERROR_NSEC3_DIGESTORIGINOVERFLOW, "DNSSEC_ERROR_NSEC3_DIGESTORIGINOVERFLOW");
470 error_register(DNSSEC_ERROR_NSEC3_LABELNOTFOUND, "DNSSEC_ERROR_NSEC3_LABELNOTFOUND");
471
472 error_register(DNSSEC_ERROR_NSEC_INVALIDZONESTATE, "DNSSEC_ERROR_NSEC_INVALIDZONESTATE");
473
474 error_register(DNSSEC_ERROR_RRSIG_NOENGINE, "DNSSEC_ERROR_RRSIG_NOENGINE");
475 error_register(DNSSEC_ERROR_RRSIG_NOZONEKEYS, "DNSSEC_ERROR_RRSIG_NOZONEKEYS");
476 error_register(DNSSEC_ERROR_RRSIG_NOUSABLEKEYS, "DNSSEC_ERROR_RRSIG_NOUSABLEKEYS");
477 error_register(DNSSEC_ERROR_RRSIG_NOSOA, "DNSSEC_ERROR_RRSIG_NOSOA");
478 error_register(DNSSEC_ERROR_RRSIG_NOSIGNINGKEY, "DNSSEC_ERROR_RRSIG_NOSIGNINGKEY");
479 error_register(DNSSEC_ERROR_RRSIG_UNSUPPORTEDRECORD, "DNSSEC_ERROR_RRSIG_UNSUPPORTEDRECORD");
480
481 error_register(ZALLOC_ERROR_MMAPFAILED, "ZALLOC_ERROR_MMAPFAILED");
482 error_register(ZALLOC_ERROR_OUTOFMEMORY, "ZALLOC_ERROR_OUTOFMEMORY");
483
484 zone_reader_text_init_error_codes();
485
486 parser_init_error_codes();
487 config_init_error_codes();
488 cmdline_init_error_codes();
489 }
490
ya_ssl_error()491 ya_result ya_ssl_error()
492 {
493 unsigned long ssl_err = ERR_get_error();
494
495 if(ssl_err != 0)
496 {
497 LOGGER_EARLY_CULL_PREFIX(MSG_ERR)
498 {
499 char buffer[256];
500 ERR_error_string_n(ssl_err, buffer, sizeof(buffer));
501 log_err("ssl: %i, %s", ssl_err, buffer);
502
503 unsigned long next_ssl_err;
504 while((next_ssl_err = ERR_get_error()) != 0)
505 {
506 ERR_error_string_n(next_ssl_err, buffer, sizeof(buffer));
507 log_err("ssl: %i, %s", next_ssl_err, buffer);
508 }
509
510 ERR_clear_error();
511 }
512 }
513
514 return SSL_ERROR_CODE(ssl_err);
515 }
516
517 /** @} */
518