dnssectool.c revision 70e5a7403f0e0a3bd292b8287c5fed5772c15270
9eb24f1f84885d5c2e51a7f675264db398c31af7Tinderbox User * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * Copyright (C) 2000, 2001, 2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and/or distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * copyright notice and this permission notice appear in all copies.
28a8f5b0de57d269cf2845c69cb6abe18cbd3b3aMark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * PERFORMANCE OF THIS SOFTWARE.
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews/* $Id: dnssectool.c,v 1.45 2007/06/19 23:46:59 tbox Exp $ */
c6d4f781529d2f28693546b25b2967d44ec89e60Mark Andrews * DNSSEC Support Routines.
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupontextern const char *program;
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewscheck_result(isc_result_t result, const char *message) {
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont fatal("%s: %s", message, isc_result_totext(result));
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Duponttype_format(const dns_rdatatype_t type, char *cp, unsigned int size) {
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont check_result(result, "dns_rdatatype_totext()");
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupontalg_format(const dns_secalg_t alg, char *cp, unsigned int size) {
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupontsig_format(dns_rdata_rrsig_t *sig, char *cp, unsigned int size) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews dns_name_format(&sig->signer, namestr, sizeof(namestr));
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont alg_format(sig->algorithm, algstr, sizeof(algstr));
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont snprintf(cp, size, "%s/%s/%d", namestr, algstr, sig->keyid);
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupontkey_format(const dst_key_t *key, char *cp, unsigned int size) {
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont dns_name_format(dst_key_name(key), namestr, sizeof(namestr));
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont alg_format((dns_secalg_t) dst_key_alg(key), algstr, sizeof(algstr));
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont snprintf(cp, size, "%s/%s/%d", namestr, algstr, dst_key_id(key));
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrewssetup_logging(int verbose, isc_mem_t *mctx, isc_log_t **logp) {
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews * We want to see warnings about things like out-of-zone
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews * data in the master file even when not verbose.
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont RUNTIME_CHECK(isc_log_create(mctx, &log, &logconfig) == ISC_R_SUCCESS);
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont RUNTIME_CHECK(isc_log_settag(logconfig, program) == ISC_R_SUCCESS);
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont * Set up a channel similar to default_stderr except:
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont * - the logging level is passed in
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont * - the program name and logging level are printed
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont * - no time stamp is printed
b5252fcde512405a68dd4becfe683d9763bd0feaMukund Sivaraman result = isc_log_createchannel(logconfig, "stderr",
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupont check_result(result, "isc_log_createchannel()");
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews RUNTIME_CHECK(isc_log_usechannel(logconfig, "stderr",
c1d7e0562f6a72ecc07ab5140cf2b88183adbd08Francis Dupontsetup_entropy(isc_mem_t *mctx, const char *randomfile, isc_entropy_t **ectx) {
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews if (randomfile != NULL && strcmp(randomfile, "keyboard") == 0) {
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews result = isc_entropy_usebestsource(*ectx, &source, randomfile,
c40906dfad6dd6e3a3e3c94b8c8847bc9bc064e5Mark Andrews fatal("could not initialize entropy source: %s",
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt isc_mem_put(source->mctx, source, sizeof(*source));