diff --git a/nixos/modules/services/mail/rspamd.nix b/nixos/modules/services/mail/rspamd.nix
index d83d6f1f750..78a2f37b6de 100644
--- a/nixos/modules/services/mail/rspamd.nix
+++ b/nixos/modules/services/mail/rspamd.nix
@@ -153,9 +153,10 @@ let
${cfg.extraConfig}
'';
+ filterFiles = files: filterAttrs (n: v: v.enable) files;
rspamdDir = pkgs.linkFarm "etc-rspamd-dir" (
- (mapAttrsToList (name: file: { name = "local.d/${name}"; path = file.source; }) cfg.locals) ++
- (mapAttrsToList (name: file: { name = "override.d/${name}"; path = file.source; }) cfg.overrides) ++
+ (mapAttrsToList (name: file: { name = "local.d/${name}"; path = file.source; }) (filterFiles cfg.locals)) ++
+ (mapAttrsToList (name: file: { name = "override.d/${name}"; path = file.source; }) (filterFiles cfg.overrides)) ++
(optional (cfg.localLuaRules != null) { name = "rspamd.local.lua"; path = cfg.localLuaRules; }) ++
[ { name = "rspamd.conf"; path = rspamdConfFile; } ]
);
@@ -207,7 +208,7 @@ in
};
locals = mkOption {
- type = with types; loaOf (submodule (configFileModule "locals"));
+ type = with types; attrsOf (submodule (configFileModule "locals"));
default = {};
description = ''
Local configuration files, written into /etc/rspamd/local.d/{name}.
@@ -220,7 +221,7 @@ in
};
overrides = mkOption {
- type = with types; loaOf (submodule (configFileModule "overrides"));
+ type = with types; attrsOf (submodule (configFileModule "overrides"));
default = {};
description = ''
Overridden configuration files, written into /etc/rspamd/override.d/{name}.
diff --git a/nixos/tests/rspamd.nix b/nixos/tests/rspamd.nix
index af765f37b91..a744760412d 100644
--- a/nixos/tests/rspamd.nix
+++ b/nixos/tests/rspamd.nix
@@ -110,16 +110,33 @@ in
'';
services.rspamd = {
enable = true;
- locals."groups.conf".text = ''
- group "cows" {
- symbol {
- NO_MUH = {
- weight = 1.0;
- description = "Mails should not muh";
+ locals = {
+ "antivirus.conf" = mkIf false { text = ''
+ clamav {
+ action = "reject";
+ symbol = "CLAM_VIRUS";
+ type = "clamav";
+ log_clean = true;
+ servers = "/run/clamav/clamd.ctl";
+ }
+ '';};
+ "redis.conf" = {
+ enable = false;
+ text = ''
+ servers = "127.0.0.1";
+ '';
+ };
+ "groups.conf".text = ''
+ group "cows" {
+ symbol {
+ NO_MUH = {
+ weight = 1.0;
+ description = "Mails should not muh";
+ }
}
}
- }
- '';
+ '';
+ };
localLuaRules = pkgs.writeText "rspamd.local.lua" ''
local rspamd_logger = require "rspamd_logger"
rspamd_config.NO_MUH = {
@@ -152,6 +169,10 @@ in
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.conf"));
$machine->log($machine->succeed("cat /etc/rspamd/rspamd.local.lua"));
$machine->log($machine->succeed("cat /etc/rspamd/local.d/groups.conf"));
+ # Verify that redis.conf was not written
+ $machine->fail("cat /etc/rspamd/local.d/redis.conf >&2");
+ # Verify that antivirus.conf was not written
+ $machine->fail("cat /etc/rspamd/local.d/antivirus.conf >&2");
${checkSocket "/run/rspamd/rspamd.sock" "rspamd" "rspamd" "660" }
$machine->log($machine->succeed("curl --unix-socket /run/rspamd/rspamd.sock http://localhost/ping"));
$machine->log($machine->succeed("rspamc -h 127.0.0.1:11334 stat"));