diff --git a/mailsystem/default.nix b/mailsystem/default.nix index 7d6231f..2dc96d9 100644 --- a/mailsystem/default.nix +++ b/mailsystem/default.nix @@ -92,17 +92,6 @@ in { ''; }; - aliases = lib.mkOption { - type = with lib.types; listOf types.str; - example = ["abuse@example.com" "postmaster@example.com"]; - default = []; - description = '' - A list of aliases of this login account. - Note: Use list entries like "@example.com" to create a catchAll - that allows sending from all email addresses in these domain. - ''; - }; - isSystemUser = lib.mkOption { type = lib.types.bool; default = false; @@ -153,7 +142,7 @@ in { default = {}; }; - extraVirtualAliases = lib.mkOption { + virtualAccountAliases = lib.mkOption { type = let account = lib.mkOptionType { name = "Mail Account"; diff --git a/mailsystem/postfix.nix b/mailsystem/postfix.nix index 708ad31..3549afe 100644 --- a/mailsystem/postfix.nix +++ b/mailsystem/postfix.nix @@ -21,25 +21,15 @@ with (import ./common.nix {inherit config;}); let mergeLookupTables = tables: lib.zipAttrsWith (n: v: lib.flatten v) tables; - account_virtual_aliases = mergeLookupTables (lib.flatten (lib.mapAttrsToList - (name: value: let - to = name; - in - map (from: {"${from}" = to;}) (value.aliases ++ lib.singleton name)) - cfg.accounts)); + virtual_accounts = mergeLookupTables (lib.map (name: {"${name}" = name;}) (lib.attrNames cfg.accounts)); + virtual_account_aliases = attrsToLookupTable cfg.virtualAccountAliases; virtual_domain_aliases = let - alias_domains = - lib.concatMapAttrs (src: dst: { - "@${src}" = "@${dst}"; - }) - cfg.virtualDomainAliases; + alias_domains = lib.mapAttrs' (src: dst: lib.nameValuePair "@${src}" "@${dst}") cfg.virtualDomainAliases; in attrsToLookupTable alias_domains; - extra_virtual_aliases = attrsToLookupTable cfg.extraVirtualAliases; - - all_virtual_aliases = mergeLookupTables [account_virtual_aliases virtual_domain_aliases extra_virtual_aliases]; + all_virtual_aliases = mergeLookupTables [virtual_accounts virtual_account_aliases virtual_domain_aliases]; aliases_file = let content = lookupTableToString all_virtual_aliases; diff --git a/tests/aliases.nix b/tests/aliases.nix index 842991d..ba063e1 100644 --- a/tests/aliases.nix +++ b/tests/aliases.nix @@ -1,5 +1,6 @@ {pkgs, ...}: with (import ./common/lib.nix {inherit pkgs;}); let + lib = pkgs.lib; accounts = { "normal" = { address = "user1@example.com"; @@ -11,32 +12,23 @@ with (import ./common/lib.nix {inherit pkgs;}); let }; "alias" = { address = "user3@example.com"; - aliases = ["alias@example.com"]; password = "secret-password3"; }; - "extra-alias" = { - address = "user4@example.com"; - password = "secret-password4;"; - }; "multi-alias1" = { address = "multi-alias1@example.com"; - aliases = ["multi-alias@example.com"]; - password = "secret-password5;"; + password = "secret-password4;"; }; "multi-alias2" = { address = "multi-alias2@example.com"; - aliases = ["multi-alias@example.com"]; - password = "secret-password6;"; + password = "secret-password5;"; }; "catchall" = { address = "catchall@example.com"; - aliases = ["@example.com"]; - password = "secret-password7;"; + password = "secret-password6;"; }; "otherdomain" = { address = "otherdomain@example.com"; - aliases = ["user@otherdomain.com"]; - password = "secret-password8;"; + password = "secret-password7;"; }; }; in @@ -53,8 +45,11 @@ in virtualDomainAliases = { "aliased.com" = "example.com"; }; - extraVirtualAliases = { - "extra-alias@example.com" = accounts."extra-alias".address; + virtualAccountAliases = { + "alias@example.com" = accounts."alias".address; + "multi-alias@example.com" = lib.map (x: accounts.${x}.address) ["multi-alias1" "multi-alias2"]; + "@example.com" = accounts."catchall".address; + "user@otherdomain.com" = accounts."otherdomain".address; }; }; }; @@ -182,18 +177,6 @@ in # fetchmail returns EXIT_CODE 0 when it retrieves mail client.succeed("${recvMail "otherdomain"} >&2") - with subtest("mail incoming on extraVirtualAlias"): - client.succeed("${sendMail "normal" "" "extra-alias@example.com" '' - Subject: extraVirtualAliases-Test - - Hello User4, - this is mail is sent to you by using an extraVirtualAlias as recipient. - ''}") - server.wait_until_fails('${pendingPostqueue}') - client.execute("${cleanupMail}") - # fetchmail returns EXIT_CODE 0 when it retrieves mail - client.succeed("${recvMail "extra-alias"} >&2") - with subtest("receiving mail on aliased domain using normal account"): client.succeed("${sendMail "normal" "" "user2@aliased.com" '' Subject: aliasedDomain with normal account