+2728. [bug] dnssec-keygen, dnssec-keyfromlabel and
+ dnssec-signzone now warn immediately if asked to
+ write into a nonexistent directory. [RT #20278]
+
2727. [func] The 'key-directory' option can now specify a relative
path. [RT #20154]
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-keyfromlabel.c,v 1.23 2009/10/22 02:21:30 each Exp $ */
+/* $Id: dnssec-keyfromlabel.c,v 1.24 2009/10/24 00:00:06 each Exp $ */
/*! \file */
break;
case 'K':
directory = isc_commandline_argument;
+ ret = try_dir(directory);
+ if (ret != ISC_R_SUCCESS)
+ fatal("Cannot write to directory %s: %s",
+ directory, isc_result_totext(ret));
break;
case 'k':
options |= DST_TYPE_KEY;
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-keygen.c,v 1.102 2009/10/22 02:21:30 each Exp $ */
+/* $Id: dnssec-keygen.c,v 1.103 2009/10/24 00:00:06 each Exp $ */
/*! \file */
break;
case 'K':
directory = isc_commandline_argument;
+ ret = try_dir(directory);
+ if (ret != ISC_R_SUCCESS)
+ fatal("cannot write to directory %s: %s",
+ directory, isc_result_totext(ret));
break;
case 'k':
fatal("The -k option has been deprecated.\n"
if (conflict == ISC_TRUE) {
if (verbose > 0) {
isc_buffer_clear(&buf);
- ret = dst_key_buildfilename(key, 0, directory,
- &buf);
+ dst_key_buildfilename(key, 0, directory, &buf);
fprintf(stderr,
"%s: %s already exists, "
"generating a new key\n",
}
dst_key_free(&key);
}
-
} while (conflict == ISC_TRUE);
if (conflict)
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-signzone.c,v 1.247 2009/10/13 23:48:12 tbox Exp $ */
+/* $Id: dnssec-signzone.c,v 1.248 2009/10/24 00:00:06 each Exp $ */
/*! \file */
dsdir = isc_commandline_argument;
if (strlen(dsdir) == 0U)
fatal("DS directory must be non-empty string");
+ result = try_dir(dsdir);
+ if (result != ISC_R_SUCCESS)
+ fatal("Cannot write to directory %s: %s",
+ dsdir, isc_result_totext(result));
break;
case 'E':
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssectool.c,v 1.55 2009/10/12 20:48:11 each Exp $ */
+/* $Id: dnssectool.c,v 1.56 2009/10/24 00:00:06 each Exp $ */
/*! \file */
#include <stdlib.h>
#include <isc/buffer.h>
+#include <isc/dir.h>
#include <isc/entropy.h>
#include <isc/list.h>
#include <isc/mem.h>
fatal("unknown class %s", str);
return (rdclass);
}
+
+isc_result_t
+try_dir(const char *dirname) {
+ isc_result_t result;
+ isc_dir_t d;
+
+ isc_dir_init(&d);
+ result = isc_dir_open(&d, dirname);
+ if (result == ISC_R_SUCCESS) {
+ isc_dir_close(&d);
+ }
+ return (result);
+}
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssectool.h,v 1.27 2009/10/12 20:48:11 each Exp $ */
+/* $Id: dnssectool.h,v 1.28 2009/10/24 00:00:06 each Exp $ */
#ifndef DNSSECTOOL_H
#define DNSSECTOOL_H 1
dns_rdataclass_t
strtoclass(const char *str);
+isc_result_t
+try_dir(const char *dirname);
#endif /* DNSSEC_DNSSECTOOL_H */