From 4093dc2f858a99207f9950c1a27e63f618de7386 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 21 Jun 2019 20:27:30 -0700 Subject: [PATCH] ircd::m::self::init: Fix keys init; prevent libircd as dependency for module. --- include/ircd/m/self.h | 1 + ircd/m.cc | 6 ++++-- modules/s_keys.cc | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/include/ircd/m/self.h b/include/ircd/m/self.h index e5a56e157..187fe4108 100644 --- a/include/ircd/m/self.h +++ b/include/ircd/m/self.h @@ -49,6 +49,7 @@ struct ircd::m::self::init { static void federation_ed25519(); static void tls_certificate(); + static void keys(); init(const string_view &origin, const string_view &servername); }; diff --git a/ircd/m.cc b/ircd/m.cc index 31201021a..0eeab5af4 100644 --- a/ircd/m.cc +++ b/ircd/m.cc @@ -530,9 +530,11 @@ ircd::m::self::init::init(const string_view &origin, "The origin is configured or has defaulted to 'localhost'" }; + // Loading the keys module in runlevel::START will do further + // inits of m::self::globals. Calling the inits directly from + // here makes the module dependent on libircd and unloadable. + assert(ircd::run::level == run::level::START); mods::imports.emplace("s_keys"s, "s_keys"s); - federation_ed25519(); - tls_certificate(); } /////////////////////////////////////////////////////////////////////////////// diff --git a/modules/s_keys.cc b/modules/s_keys.cc index ce63499bc..b1cd268c7 100644 --- a/modules/s_keys.cc +++ b/modules/s_keys.cc @@ -12,6 +12,7 @@ ircd::mapi::header IRCD_MODULE { "Server keys" + ,ircd::m::self::init::keys }; bool @@ -431,15 +432,23 @@ noexcept // m/self.h // +// +// self::init +// + +void +IRCD_MODULE_EXPORT +ircd::m::self::init::keys() +{ + tls_certificate(); + federation_ed25519(); +} + namespace ircd::m::self { extern conf::item tls_key_dir; } -// -// self::init -// - decltype(ircd::m::self::tls_key_dir) ircd::m::self::tls_key_dir {