Annotate

util/watchdog.lua @ 13289:38c95544b7ee

mod_saslauth, mod_c2s: Disable tls-server-end-point channel binding by default This channel binding method is now enabled when a hash is manually set in the config, or it attempts to discover the hash automatically if the value is the special string "auto". A related change to mod_c2s prevents complicated certificate lookups in the client connection hot path - this work now happens only when this channel binding method is used. I'm not aware of anything else that uses ssl_cfg (vs ssl_ctx). Rationale for disabling by default: - Minor performance impact in automatic cert detection - This method is weak against a leaked/stolen private key (other methods such as 'tls-exporter' would not be compromised in such a case) Rationale for keeping the implementation: - For some deployments, this may be the only method available (e.g. due to TLS offloading in another process/server).
author Matthew Wild <mwild1@gmail.com>
date Thu, 26 Oct 2023 15:14:39 +0100
parent 12975:d10957394a3c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12975
d10957394a3c util: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12547
diff changeset
1 local timer = require "prosody.util.timer";
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local setmetatable = setmetatable;
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
4 local _ENV = nil;
8555
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
5 -- luacheck: std none
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 local watchdog_methods = {};
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local watchdog_mt = { __index = watchdog_methods };
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
10 local function new(timeout, callback)
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
11 local watchdog = setmetatable({
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
12 timeout = timeout;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
13 callback = callback;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
14 timer_id = nil;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
15 }, watchdog_mt);
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
16
12546
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
17 watchdog:reset(); -- Kick things off
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
18
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 return watchdog;
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 end
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
12547
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
diff changeset
22 function watchdog_methods:reset(new_timeout)
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
diff changeset
23 if new_timeout then
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
diff changeset
24 self.timeout = new_timeout;
e79c64b2dfed util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents: 12546
diff changeset
25 end
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
26 if self.timer_id then
12546
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
27 timer.reschedule(self.timer_id, self.timeout+1);
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
28 else
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
29 self.timer_id = timer.add_task(self.timeout+1, function ()
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
30 return self:callback();
e78b35574aae util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents: 12545
diff changeset
31 end);
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
32 end
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 end
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 function watchdog_methods:cancel()
12545
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
36 if self.timer_id then
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
37 timer.stop(self.timer_id);
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
38 self.timer_id = nil;
5059a639f61e util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents: 8555
diff changeset
39 end
4401
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 end
0ed617f58404 util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
42 return {
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
43 new = new;
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 4891
diff changeset
44 };