diff --git a/lib/dns/view.c b/lib/dns/view.c index b58dfdde73..049d0fd59f 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -352,28 +352,28 @@ destroy(dns_view_t *view) { if (view->dynamickeys != NULL) { isc_result_t result; - char template[20]; - char keyfile[20]; + char template[PATH_MAX]; + char keyfile[PATH_MAX]; FILE *fp = NULL; - int n; - n = snprintf(keyfile, sizeof(keyfile), "%s.tsigkeys", - view->name); - if (n > 0 && (size_t)n < sizeof(keyfile)) { - result = isc_file_mktemplate(keyfile, template, - sizeof(template)); - if (result == ISC_R_SUCCESS) - (void)isc_file_openuniqueprivate(template, &fp); + result = isc_file_mktemplate(NULL, template, sizeof(template)); + if (result == ISC_R_SUCCESS) { + (void)isc_file_openuniqueprivate(template, &fp); } - if (fp == NULL) + if (fp == NULL) { dns_tsigkeyring_detach(&view->dynamickeys); - else { - result = dns_tsigkeyring_dumpanddetach( - &view->dynamickeys, fp); + } else { + result = dns_tsigkeyring_dumpanddetach + (&view->dynamickeys, fp); if (result == ISC_R_SUCCESS) { - if (fclose(fp) == 0) - result = isc_file_rename(template, - keyfile); + if (fclose(fp) == 0) { + result = isc_file_sanitize + (NULL, view->name, "tsigkeys", + keyfile, sizeof(keyfile)); + if (result == ISC_R_SUCCESS) + result = isc_file_rename + (template, keyfile); + } if (result != ISC_R_SUCCESS) (void)remove(template); } else { @@ -907,15 +907,15 @@ dns_view_getdynamickeyring(dns_view_t *view, dns_tsig_keyring_t **ringp) { void dns_view_restorekeyring(dns_view_t *view) { FILE *fp; - char keyfile[20]; - int n; + char keyfile[PATH_MAX]; + isc_result_t result; REQUIRE(DNS_VIEW_VALID(view)); if (view->dynamickeys != NULL) { - n = snprintf(keyfile, sizeof(keyfile), "%s.tsigkeys", - view->name); - if (n > 0 && (size_t)n < sizeof(keyfile)) { + result = isc_file_sanitize(NULL, view->name, "tsigkeys", + keyfile, sizeof(keyfile)); + if (result == ISC_R_SUCCESS) { fp = fopen(keyfile, "r"); if (fp != NULL) { dns_keyring_restore(view->dynamickeys, fp);