* Load the zone file from disk
*/
static void
-loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) {
+loadzone(char *file, const char *origin, dns_rdataclass_t rdclass,
+ dns_db_t **db) {
isc_buffer_t b;
int len;
dns_fixedname_t fname;
isc_result_t result;
len = strlen(origin);
- isc_buffer_init(&b, origin, len);
+ isc_buffer_constinit(&b, origin, len);
isc_buffer_add(&b, len);
name = dns_fixedname_initname(&fname);
int ch;
char *startstr = NULL, *endstr = NULL, *classname = NULL;
char *dnskey_endstr = NULL;
- char *origin = NULL, *file = NULL, *output = NULL;
+ const char *origin = NULL;
+ char *file = NULL, *output = NULL;
char *inputformatstr = NULL, *outputformatstr = NULL;
char *serialformatstr = NULL;
char *dskeyfile[MAXDSKEYS];
argv += 1;
if (origin == NULL) {
- origin = file;
+ origin = isc_file_basename(file);
}
if (output == NULL) {
#include <isc/attributes.h>
#include <isc/base32.h>
#include <isc/commandline.h>
+#include <isc/file.h>
#include <isc/hash.h>
#include <isc/hex.h>
#include <isc/lib.h>
* Load the zone file from disk
*/
static void
-loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) {
+loadzone(char *file, const char *origin, bool origin_is_file,
+ dns_rdataclass_t rdclass, dns_db_t **db) {
isc_buffer_t b;
int len;
dns_fixedname_t fname;
isc_result_t result;
len = strlen(origin);
- isc_buffer_init(&b, origin, len);
+ isc_buffer_constinit(&b, origin, len);
isc_buffer_add(&b, len);
name = dns_fixedname_initname(&fname);
case ISC_R_SUCCESS:
break;
case DNS_R_NOTZONETOP:
- /*
- * Comparing pointers (vs. using strcmp()) is intentional: we
- * want to check whether -o was supplied on the command line,
- * not whether origin and file contain the same string.
- */
- if (origin == file) {
+ if (origin_is_file) {
fatal("failed loading zone '%s' from file '%s': "
"use -o to specify a different zone origin",
origin, file);
int
main(int argc, char *argv[]) {
- char *origin = NULL, *file = NULL;
+ const char *origin = NULL;
+ char *file = NULL;
char *inputformatstr = NULL;
isc_result_t result;
char *classname = NULL;
dns_rdataclass_t rdclass;
char *endp;
int ch;
+ bool origin_is_file = false;
isc_commandline_init(argc, argv);
POST(argv);
if (origin == NULL) {
- origin = file;
+ origin = isc_file_basename(file);
+ origin_is_file = true;
}
if (inputformatstr != NULL) {
gdb = NULL;
report("Loading zone '%s' from file '%s'\n", origin, file);
- loadzone(file, origin, rdclass, &gdb);
+ loadzone(file, origin, origin_is_file, rdclass, &gdb);
if (journal != NULL) {
loadjournal(isc_g_mctx, gdb, journal);
}