diff --git a/auditd/1.0.0/cmodule/main.lua b/auditd/1.0.0/cmodule/main.lua index 9edf9c2..2268e0e 100644 --- a/auditd/1.0.0/cmodule/main.lua +++ b/auditd/1.0.0/cmodule/main.lua @@ -16,24 +16,13 @@ if not pm then return "success" end -local function setup_audit() - local ok, err = audit.setup(pm, { - audit.file_auditd_service_override, - audit.file_auditd_conf, - audit.file_audit_rules, - }) - if not ok then __log.error(err) end -end - -local check_interval_sec -local last_check = 0 +local watcher = require("watcher").new() local function update_config() local c = cjson.decode(__config.get_current_config()) - check_interval_sec = c.check_interval_sec audit.file_auditd_conf:set(c.auditd_conf) audit.file_audit_rules:set(c.audit_rules) - last_check = 0 + watcher:reset(c.check_interval) end update_config() @@ -44,12 +33,12 @@ __api.add_cbs{ end, } -while not __api.is_close() do - local now = os.time() - if now - last_check > check_interval_sec then - last_check = now - setup_audit() - end - __api.await(1000) -end +watcher:run(function() + local ok, err = audit.setup(pm, { + audit.file_auditd_service_override, + audit.file_auditd_conf, + audit.file_audit_rules, + }) + if not ok then __log.error(err) end +end) return "success" diff --git a/auditd/1.0.0/cmodule/watcher.lua b/auditd/1.0.0/cmodule/watcher.lua new file mode 100644 index 0000000..37a15ed --- /dev/null +++ b/auditd/1.0.0/cmodule/watcher.lua @@ -0,0 +1,30 @@ +local Watcher = {}; Watcher.__index = Watcher + +--:: seconds? -> Watcher +function Watcher.new(interval) + return setmetatable({ + _interval = interval or 0, + }, Watcher) +end + +--:: seconds? -> () +function Watcher:reset(interval) + self._last_run = 0 + self._interval = interval or self._interval +end + +function Watcher:run(f) + self._last_run = 0 + self._interval = self._interval or 1 + + while not __api.is_close() do + local now = os.time() + if now - self._last_run >= self._interval then + self._last_run = now + f() + end + __api.await(1000) + end +end + +return Watcher diff --git a/auditd/1.0.0/config/config_schema.json b/auditd/1.0.0/config/config_schema.json index 0dd731c..e4c0aef 100644 --- a/auditd/1.0.0/config/config_schema.json +++ b/auditd/1.0.0/config/config_schema.json @@ -23,7 +23,7 @@ } } }, - "check_interval_sec": { + "check_interval": { "rules": {}, "type": "integer", "ui": { @@ -35,7 +35,7 @@ "required": [ "audit_rules", "auditd_conf", - "check_interval_sec" + "check_interval" ], "type": "object" } \ No newline at end of file diff --git a/auditd/1.0.0/config/current_config.json b/auditd/1.0.0/config/current_config.json index 6abc378..f597f3d 100644 --- a/auditd/1.0.0/config/current_config.json +++ b/auditd/1.0.0/config/current_config.json @@ -1,5 +1,5 @@ { "audit_rules": "# Managed by SOLDR(auditd)\n-D", "auditd_conf": "# Managed by SOLDR(auditd)", - "check_interval_sec": 600 + "check_interval": 600 } \ No newline at end of file diff --git a/auditd/1.0.0/config/default_config.json b/auditd/1.0.0/config/default_config.json index 6abc378..f597f3d 100644 --- a/auditd/1.0.0/config/default_config.json +++ b/auditd/1.0.0/config/default_config.json @@ -1,5 +1,5 @@ { "audit_rules": "# Managed by SOLDR(auditd)\n-D", "auditd_conf": "# Managed by SOLDR(auditd)", - "check_interval_sec": 600 + "check_interval": 600 } \ No newline at end of file diff --git a/auditd/1.0.0/config/locale.json b/auditd/1.0.0/config/locale.json index dacd9ff..91639c2 100644 --- a/auditd/1.0.0/config/locale.json +++ b/auditd/1.0.0/config/locale.json @@ -30,7 +30,7 @@ "description": "/etc/audit/auditd.conf" } }, - "check_interval_sec": { + "check_interval": { "en": { "title": "Check interval, seconds", "description": "Module is checking audit configuration every given interval of time"