commit 3dd06ab4813b6c8f4992e19fce9d4b094fd3a1a9
parent d371589381e57835d37796f1d349638b806e43b4
Author: Eyal Sawady <ecs@d2evs.net>
Date: Tue, 9 Mar 2021 05:21:59 -0500
gmnlm: create cert dir on 6x response
So that the OpenSSL command doesn't fail when the cert dir hasn't
already been created.
Diffstat:
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/include/util.h b/include/util.h
@@ -9,6 +9,7 @@ struct pathspec {
};
char *getpath(const struct pathspec *paths, size_t npaths);
+void posix_dirname(char *path, char *dname);
int mkdirs(char *path, mode_t mode);
int download_resp(FILE *out, struct gemini_response resp, const char *path,
char *url);
diff --git a/src/gmnlm.c b/src/gmnlm.c
@@ -562,6 +562,13 @@ do_requests(struct browser *browser, struct gemini_response *resp)
n = snprintf(certpath, sizeof(certpath), path_fmt, host, "crt");
assert(n < sizeof(certpath));
n = snprintf(keypath, sizeof(keypath), path_fmt, host, "key");
+ char dname[PATH_MAX + 1];
+ posix_dirname(certpath, dname);
+ if (mkdirs(dname, 0755) != 0) {
+ fprintf(stderr, "Error creating directory %s: %s\n",
+ dname, strerror(errno));
+ break;
+ }
assert(n < sizeof(keypath));
fprintf(stderr, "The server requested a client certificate.\n"
"Presently, this process is not automated.\n"
diff --git a/src/util.c b/src/util.c
@@ -11,7 +11,7 @@
#include <sys/stat.h>
#include "util.h"
-static void
+void
posix_dirname(char *path, char *dname)
{
char p[PATH_MAX+1];