summaryrefslogtreecommitdiff
path: root/usr.sbin/ikectl
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ikectl')
-rw-r--r--usr.sbin/ikectl/ikeca.c17
-rw-r--r--usr.sbin/ikectl/ikectl.c14
2 files changed, 22 insertions, 9 deletions
diff --git a/usr.sbin/ikectl/ikeca.c b/usr.sbin/ikectl/ikeca.c
index 2824490415c..9388ea61c7b 100644
--- a/usr.sbin/ikectl/ikeca.c
+++ b/usr.sbin/ikectl/ikeca.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ikeca.c,v 1.16 2010/10/08 10:13:47 jsg Exp $ */
+/* $OpenBSD: ikeca.c,v 1.17 2010/10/08 11:41:56 jsg Exp $ */
/* $vantronix: ikeca.c,v 1.13 2010/06/03 15:52:52 reyk Exp $ */
/*
@@ -59,7 +59,8 @@ struct ca {
struct {
char *dir;
mode_t mode;
-} exdirs[] = {
+} hier[] = {
+ { "", 0755 },
{ "/ca", 0755 },
{ "/certs", 0755 },
{ "/crls", 0755 },
@@ -513,11 +514,11 @@ ca_hier(char *path)
char dst[PATH_MAX];
u_int i;
- for (i = 0; i < nitems(exdirs); i++) {
+ for (i = 0; i < nitems(hier); i++) {
strlcpy(dst, path, sizeof(dst));
- strlcat(dst, exdirs[i].dir, sizeof(dst));
+ strlcat(dst, hier[i].dir, sizeof(dst));
if (stat(dst, &st) != 0 && errno == ENOENT &&
- mkdir(dst, exdirs[i].mode) != 0)
+ mkdir(dst, hier[i].mode) != 0)
err(1, "failed to create dir %s", dst);
}
@@ -587,10 +588,10 @@ ca_export(struct ca *ca, char *keyname, char *myname, char *password)
chmod(p, 0755);
- for (i = 0; i < nitems(exdirs); i++) {
+ for (i = 0; i < nitems(hier); i++) {
strlcpy(dst, p, sizeof(dst));
- strlcat(dst, exdirs[i].dir, sizeof(dst));
- if (mkdir(dst, exdirs[i].mode) != 0)
+ strlcat(dst, hier[i].dir, sizeof(dst));
+ if (mkdir(dst, hier[i].mode) != 0)
err(1, "failed to create dir %s", dst);
}
diff --git a/usr.sbin/ikectl/ikectl.c b/usr.sbin/ikectl/ikectl.c
index 21626187dad..64bdbd5d6b2 100644
--- a/usr.sbin/ikectl/ikectl.c
+++ b/usr.sbin/ikectl/ikectl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ikectl.c,v 1.10 2010/10/08 10:13:47 jsg Exp $ */
+/* $OpenBSD: ikectl.c,v 1.11 2010/10/08 11:41:56 jsg Exp $ */
/*
* Copyright (c) 2007, 2008 Reyk Floeter <reyk@vantronix.net>
@@ -80,12 +80,24 @@ int
ca_opt(struct parse_result *res)
{
struct ca *ca;
+ size_t len;
+ char *p;
ca = ca_setup(res->caname, (res->action == CA_CREATE),
res->quiet, res->pass);
if (ca == NULL)
errx(1, "ca_setup failed");
+ /* assume paths are relative to /etc if not absolute */
+ if (res->path && (res->path[0] != '.') && (res->path[0] != '/')) {
+ len = 5 + strlen(res->path) + 1;
+ if ((p = malloc(len)) == NULL)
+ err(1, "malloc");
+ snprintf(p, len, "/etc/%s", res->path);
+ free(res->path);
+ res->path = p;
+ }
+
switch (res->action) {
case CA_CREATE:
ca_create(ca);