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