From e709d6561ce72133f9972d52f89d631a62f41c00 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Sun, 19 Nov 2017 09:56:05 +0300 Subject: [PATCH] Re-read ACME certificates on config reload --- src/ejabberd_acme.erl | 4 +++- src/ejabberd_pkix.erl | 18 +++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ejabberd_acme.erl b/src/ejabberd_acme.erl index 8eba9a352..9793b170e 100644 --- a/src/ejabberd_acme.erl +++ b/src/ejabberd_acme.erl @@ -17,7 +17,7 @@ %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). --export([start_link/0, opt_type/1]). +-export([start_link/0, opt_type/1, register_certfiles/0]). -include("ejabberd.hrl"). -include("logger.hrl"). @@ -40,6 +40,7 @@ start_link() -> init([]) -> case filelib:ensure_dir(filename:join(acme_certs_dir(), "foo")) of ok -> + ejabberd_hooks:add(config_reloaded, ?MODULE, register_certfiles, 40), ejabberd_commands:register_commands(get_commands_spec()), register_certfiles(), {ok, #state{}}; @@ -61,6 +62,7 @@ handle_info(_Info, State) -> {noreply, State}. terminate(_Reason, _State) -> + ejabberd_hooks:delete(config_reloaded, ?MODULE, register_certfiles, 40), ejabberd_commands:unregister_commands(get_commands_spec()). code_change(_OldVsn, State, _Extra) -> diff --git a/src/ejabberd_pkix.erl b/src/ejabberd_pkix.erl index 2fad9ea4c..37ec8b1cf 100644 --- a/src/ejabberd_pkix.erl +++ b/src/ejabberd_pkix.erl @@ -143,7 +143,7 @@ start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). config_reloaded() -> - gen_server:cast(?MODULE, config_reloaded). + gen_server:call(?MODULE, config_reloaded, 60000). opt_type(ca_path) -> fun(Path) -> iolist_to_binary(Path) end; @@ -219,18 +219,18 @@ handle_call({route_registered, Host}, _, State) -> {error, _} -> {reply, ok, State} end; -handle_call(_Request, _From, State) -> - Reply = ok, - {reply, Reply, State}. - -handle_cast(config_reloaded, State) -> +handle_call(config_reloaded, _From, State) -> State1 = State#state{paths = [], certs = #{}, keys = []}, case add_certfiles(State1) of {ok, State2} -> - {noreply, State2}; - {error, _} -> - {noreply, State} + {reply, ok, State2}; + {error, _} = Err -> + {reply, Err, State} end; +handle_call(_Request, _From, State) -> + Reply = ok, + {reply, Reply, State}. + handle_cast(_Msg, State) -> {noreply, State}. -- 2.40.0