tProvide local copy of TLS CA certs on Windows - vaccinewars - be a doctor and … | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 8da737ea0755185abfcb3d7e4ff95f06deed3a1c | |
parent 75f503a26a4b9c3327347e9127223d7b54bcdf2c | |
Author: Ben Webb <[email protected]> | |
Date: Wed, 11 Nov 2020 12:20:08 -0800 | |
Provide local copy of TLS CA certs on Windows | |
Without this, curl connections to the metaserver may fail | |
on Windows as it cannot verify the certificate. | |
Diffstat: | |
M src/network.c | 25 +++++++++++++++++++++++++ | |
M src/winmain.h | 2 ++ | |
2 files changed, 27 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/src/network.c b/src/network.c | |
t@@ -29,6 +29,7 @@ | |
#ifdef CYGWIN | |
#include <winsock2.h> /* For network functions */ | |
#include <windows.h> /* For datatypes such as BOOL */ | |
+#include "winmain.h" | |
#else | |
#include <sys/types.h> /* For size_t etc. */ | |
#include <sys/socket.h> /* For struct sockaddr etc. */ | |
t@@ -1188,6 +1189,27 @@ gboolean CurlEasySetopt1(CURL *curl, CURLoption option,… | |
} | |
} | |
+#ifdef CYGWIN | |
+/* Set the path to TLS CA certificates. Without this, curl connections | |
+ to the metaserver may fail on Windows as it cannot verify the | |
+ certificate. | |
+ */ | |
+static gboolean SetCaInfo(CurlConnection *conn, GError **err) | |
+{ | |
+ gchar *bindir, *cainfo; | |
+ gboolean ret; | |
+ | |
+ /* Point to a .crt file in the same directory as dopewars.exe */ | |
+ bindir = GetBinaryDir(); | |
+ cainfo = g_strdup_printf("%s\\ca-bundle.crt", bindir); | |
+ g_free(bindir); | |
+ | |
+ ret = CurlEasySetopt1(conn->h, CURLOPT_CAINFO, cainfo, err); | |
+ g_free(cainfo); | |
+ return ret; | |
+} | |
+#endif | |
+ | |
gboolean OpenCurlConnection(CurlConnection *conn, char *URL, char *body, | |
GError **err) | |
{ | |
t@@ -1210,6 +1232,9 @@ gboolean OpenCurlConnection(CurlConnection *conn, char *… | |
|| !CurlEasySetopt1(conn->h, CURLOPT_WRITEDATA, conn, err) | |
|| !CurlEasySetopt1(conn->h, CURLOPT_HEADERFUNCTION, | |
MetaConnHeaderFunc, err) | |
+#ifdef CYGWIN | |
+ || !SetCaInfo(conn, err) | |
+#endif | |
|| !CurlEasySetopt1(conn->h, CURLOPT_HEADERDATA, conn, err)) { | |
return FALSE; | |
} | |
diff --git a/src/winmain.h b/src/winmain.h | |
t@@ -25,6 +25,8 @@ | |
#ifdef CYGWIN | |
+#include <glib.h> | |
+ | |
gchar *GetBinaryDir(void); | |
#endif /* CYGWIN */ |