From 5a99c8e11ca810ff8d06022ca73471f0ed34f285 Mon Sep 17 00:00:00 2001 From: Paul Kulchenko Date: Sun, 13 Feb 2022 22:19:39 -0800 Subject: [PATCH] Update fetch in redbean to initialize SSL when used with https --- tool/net/redbean.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tool/net/redbean.c b/tool/net/redbean.c index a929286f9..4ebae65e3 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -347,6 +347,7 @@ static bool invalidated; static bool logmessages; static bool isinitialized; static bool checkedmethod; +static bool sslinitialized; static bool sslfetchverify; static bool sslclientverify; static bool connectionclose; @@ -448,6 +449,8 @@ static char *HandleAsset(struct Asset *, const char *, size_t); static char *ServeAsset(struct Asset *, const char *, size_t); static char *SetStatus(unsigned, const char *); +static void TlsInit(void); + static void OnChld(void) { zombied = true; } @@ -3565,12 +3568,6 @@ static int LuaFetch(lua_State *L) { .ai_protocol = IPPROTO_TCP, .ai_flags = AI_NUMERICSERV}; - if (!isinitialized) { - luaL_error(L, "Fetch() can't be called from .init.lua global scope;" - " try calling it from your OnServerStart() hook"); - unreachable; - } - /* * Get args: url [, body | {method = "PUT", body = "..."}] */ @@ -3622,6 +3619,9 @@ static int LuaFetch(lua_State *L) { unreachable; } } + + if (usessl && !sslinitialized) TlsInit(); + if (url.host.n) { host = gc(strndup(url.host.p, url.host.n)); if (url.port.n) { @@ -6973,6 +6973,10 @@ static void SigInit(void) { static void TlsInit(void) { #ifndef UNSECURE int suite; + + if (sslinitialized) return; + sslinitialized = true; + InitializeRng(&rng); InitializeRng(&rngcli); cachain = GetSslRoots();