From 93f30522f032c0d8137ba3ebe140b4019842d13d Mon Sep 17 00:00:00 2001 From: Eyal Sawady Date: Tue, 9 Mar 2021 05:21:59 -0500 Subject: [PATCH] gmnlm: create cert dir on 6x response So that the OpenSSL command doesn't fail when the cert dir hasn't already been created. --- include/util.h | 1 + src/gmnlm.c | 7 +++++++ src/util.c | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/util.h b/include/util.h index 8ec9ac5..6c241f4 100644 --- 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 index 87d6f35..1379959 100644 --- a/src/gmnlm.c +++ b/src/gmnlm.c @@ -510,6 +510,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 index 1cb0bf4..8441b58 100644 --- a/src/util.c +++ b/src/util.c @@ -11,7 +11,7 @@ #include #include "util.h" -static void +void posix_dirname(char *path, char *dname) { char p[PATH_MAX+1];