1 /*
2  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  *
8  * See the COPYRIGHT file distributed with this work for additional
9  * information regarding copyright ownership.
10  */
11 
12 #ifndef DNSSECTOOL_H
13 #define DNSSECTOOL_H 1
14 
15 #include <inttypes.h>
16 #include <stdbool.h>
17 
18 #include <isc/log.h>
19 #include <isc/platform.h>
20 #include <isc/stdtime.h>
21 
22 #include <dns/rdatastruct.h>
23 
24 #include <dst/dst.h>
25 
26 /*! verbosity: set by -v and -q option in each program, defined in dnssectool.c
27  */
28 extern int verbose;
29 extern bool quiet;
30 
31 /*! program name, statically initialized in each program */
32 extern const char *program;
33 
34 /*!
35  * List of DS digest types used by dnssec-cds and dnssec-dsfromkey,
36  * defined in dnssectool.c. Filled in by add_dtype() from -a
37  * arguments, sorted (so that DS records are in a canonical order) and
38  * terminated by a zero. The size of the array is an arbitrary limit
39  * which should be greater than the number of known digest types.
40  */
41 extern uint8_t dtype[8];
42 
43 typedef void(fatalcallback_t)(void);
44 
45 ISC_PLATFORM_NORETURN_PRE void
46 fatal(const char *format, ...)
47 	ISC_FORMAT_PRINTF(1, 2) ISC_PLATFORM_NORETURN_POST;
48 
49 void
50 setfatalcallback(fatalcallback_t *callback);
51 
52 void
53 check_result(isc_result_t result, const char *message);
54 
55 void
56 vbprintf(int level, const char *fmt, ...) ISC_FORMAT_PRINTF(2, 3);
57 
58 ISC_PLATFORM_NORETURN_PRE void
59 version(const char *program) ISC_PLATFORM_NORETURN_POST;
60 
61 void
62 sig_format(dns_rdata_rrsig_t *sig, char *cp, unsigned int size);
63 #define SIG_FORMATSIZE \
64 	(DNS_NAME_FORMATSIZE + DNS_SECALG_FORMATSIZE + sizeof("65535"))
65 
66 void
67 setup_logging(isc_mem_t *mctx, isc_log_t **logp);
68 
69 void
70 cleanup_logging(isc_log_t **logp);
71 
72 dns_ttl_t
73 strtottl(const char *str);
74 
75 dst_key_state_t
76 strtokeystate(const char *str);
77 
78 isc_stdtime_t
79 strtotime(const char *str, int64_t now, int64_t base, bool *setp);
80 
81 dns_rdataclass_t
82 strtoclass(const char *str);
83 
84 unsigned int
85 strtodsdigest(const char *str);
86 
87 void
88 add_dtype(unsigned int dt);
89 
90 isc_result_t
91 try_dir(const char *dirname);
92 
93 void
94 check_keyversion(dst_key_t *key, char *keystr);
95 
96 void
97 set_keyversion(dst_key_t *key);
98 
99 bool
100 key_collision(dst_key_t *key, dns_name_t *name, const char *dir,
101 	      isc_mem_t *mctx, bool *exact);
102 
103 bool
104 isoptarg(const char *arg, char **argv, void (*usage)(void));
105 
106 #ifdef _WIN32
107 void
108 InitSockets(void);
109 void
110 DestroySockets(void);
111 #endif /* ifdef _WIN32 */
112 
113 #endif /* DNSSEC_DNSSECTOOL_H */
114