summaryrefslogtreecommitdiffstats
path: root/sbin/gbde
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2004-02-05 10:57:29 +0000
committerdes <des@FreeBSD.org>2004-02-05 10:57:29 +0000
commit78edb732be26598993ecf051485a2e1379e8031d (patch)
tree829b9021fb0c3721c5d9b794d181e53373e5e3bb /sbin/gbde
parent9f9dd5ba6918f84c048d369c12b3667de678c070 (diff)
downloadFreeBSD-src-78edb732be26598993ecf051485a2e1379e8031d.zip
FreeBSD-src-78edb732be26598993ecf051485a2e1379e8031d.tar.gz
Don't create a template file if we're not going to let the user edit it.
Diffstat (limited to 'sbin/gbde')
-rw-r--r--sbin/gbde/gbde.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/sbin/gbde/gbde.c b/sbin/gbde/gbde.c
index d038e7b..b90ac35 100644
--- a/sbin/gbde/gbde.c
+++ b/sbin/gbde/gbde.c
@@ -507,25 +507,25 @@ cmd_init(struct g_bde_key *gl, int dfd, const char *f_opt, int i_opt, const char
err(1, "%s", f_opt);
params = properties_read(i);
close (i);
- } else {
+ } else if (i_opt) {
/* XXX: Polish */
- q = strdup("/tmp/temp.XXXXXXXXXX");
+ asprintf(&q, "%stemp.XXXXXXXXXX", _PATH_TMP);
+ if (q == NULL)
+ err(1, "asprintf");
i = mkstemp(q);
if (i < 0)
err(1, "%s", q);
write(i, template, strlen(template));
close (i);
- if (i_opt) {
- p = getenv("EDITOR");
- if (p == NULL)
- p = "vi";
- if (snprintf(cbuf, sizeof(cbuf), "%s %s\n", p, q) >=
- (ssize_t)sizeof(cbuf)) {
- unlink(q);
- errx(1, "EDITOR is too long");
- }
- system(cbuf);
+ p = getenv("EDITOR");
+ if (p == NULL)
+ p = "vi";
+ if (snprintf(cbuf, sizeof(cbuf), "%s %s\n", p, q) >=
+ (ssize_t)sizeof(cbuf)) {
+ unlink(q);
+ errx(1, "EDITOR is too long");
}
+ system(cbuf);
i = open(q, O_RDONLY);
if (i < 0)
err(1, "%s", f_opt);
@@ -533,6 +533,13 @@ cmd_init(struct g_bde_key *gl, int dfd, const char *f_opt, int i_opt, const char
close (i);
unlink(q);
free(q);
+ } else {
+ /* XXX: Hack */
+ i = open(_PATH_DEVNULL, O_RDONLY);
+ if (i < 0)
+ err(1, "%s", _PATH_DEVNULL);
+ params = properties_read(i);
+ close (i);
}
/* <sector_size> */
@@ -620,13 +627,15 @@ cmd_init(struct g_bde_key *gl, int dfd, const char *f_opt, int i_opt, const char
/* <number_of_keys> */
p = property_find(params, "number_of_keys");
- if (p == NULL)
- errx(1, "Missing number_of_keys property");
- nkeys = strtoul(p, &q, 0);
- if (!*p || *q)
- errx(1, "number_of_keys not a proper number");
- if (nkeys < 1 || nkeys > G_BDE_MAXKEYS)
- errx(1, "number_of_keys out of range");
+ if (p != NULL) {
+ nkeys = strtoul(p, &q, 0);
+ if (!*p || *q)
+ errx(1, "number_of_keys not a proper number");
+ if (nkeys < 1 || nkeys > G_BDE_MAXKEYS)
+ errx(1, "number_of_keys out of range");
+ } else {
+ nkeys = 4;
+ }
for (u = 0; u < nkeys; u++) {
for(;;) {
do {
OpenPOWER on IntegriCloud