Merge pull request #34060 from WilliButz/fix-postfix-module
nixos/postfix: fix default postfix config
This commit is contained in:
commit
1c2e33f3cf
@ -149,6 +149,17 @@ following incompatible changes:</para>
|
|||||||
The <varname>hardware.amdHybridGraphics.disable</varname> option was removed for lack of a maintainer. If you still need this module, you may wish to include a copy of it from an older version of nixos in your imports.
|
The <varname>hardware.amdHybridGraphics.disable</varname> option was removed for lack of a maintainer. If you still need this module, you may wish to include a copy of it from an older version of nixos in your imports.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The merging of config options for <varname>services.postfix.config</varname>
|
||||||
|
was buggy. Previously, if other options in the Postfix module like
|
||||||
|
<varname>services.postfix.useSrs</varname> were set and the user set config
|
||||||
|
options that were also set by such options, the resulting config wouldn't
|
||||||
|
include all options that were needed. They are now merged correctly. If
|
||||||
|
config options need to be overridden, <literal>lib.mkForce</literal> or
|
||||||
|
<literal>lib.mkOverride</literal> can be used.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
@ -15,20 +15,18 @@ let
|
|||||||
haveVirtual = cfg.virtual != "";
|
haveVirtual = cfg.virtual != "";
|
||||||
|
|
||||||
clientAccess =
|
clientAccess =
|
||||||
if (cfg.dnsBlacklistOverrides != "")
|
optional (cfg.dnsBlacklistOverrides != "")
|
||||||
then [ "check_client_access hash:/etc/postfix/client_access" ]
|
"check_client_access hash:/etc/postfix/client_access";
|
||||||
else [];
|
|
||||||
|
|
||||||
dnsBl =
|
dnsBl =
|
||||||
if (cfg.dnsBlacklists != [])
|
optionals (cfg.dnsBlacklists != [])
|
||||||
then [ (concatStringsSep ", " (map (s: "reject_rbl_client " + s) cfg.dnsBlacklists)) ]
|
(map (s: "reject_rbl_client " + s) cfg.dnsBlacklists);
|
||||||
else [];
|
|
||||||
|
|
||||||
clientRestrictions = concatStringsSep ", " (clientAccess ++ dnsBl);
|
clientRestrictions = concatStringsSep ", " (clientAccess ++ dnsBl);
|
||||||
|
|
||||||
mainCf = let
|
mainCf = let
|
||||||
escape = replaceStrings ["$"] ["$$"];
|
escape = replaceStrings ["$"] ["$$"];
|
||||||
mkList = items: "\n " + concatStringsSep "\n " items;
|
mkList = items: "\n " + concatStringsSep ",\n " items;
|
||||||
mkVal = value:
|
mkVal = value:
|
||||||
if isList value then mkList value
|
if isList value then mkList value
|
||||||
else " " + (if value == true then "yes"
|
else " " + (if value == true then "yes"
|
||||||
@ -36,72 +34,9 @@ let
|
|||||||
else toString value);
|
else toString value);
|
||||||
mkEntry = name: value: "${escape name} =${mkVal value}";
|
mkEntry = name: value: "${escape name} =${mkVal value}";
|
||||||
in
|
in
|
||||||
concatStringsSep "\n" (mapAttrsToList mkEntry (recursiveUpdate defaultConf cfg.config))
|
concatStringsSep "\n" (mapAttrsToList mkEntry cfg.config)
|
||||||
+ "\n" + cfg.extraConfig;
|
+ "\n" + cfg.extraConfig;
|
||||||
|
|
||||||
defaultConf = {
|
|
||||||
compatibility_level = "9999";
|
|
||||||
mail_owner = user;
|
|
||||||
default_privs = "nobody";
|
|
||||||
|
|
||||||
# NixOS specific locations
|
|
||||||
data_directory = "/var/lib/postfix/data";
|
|
||||||
queue_directory = "/var/lib/postfix/queue";
|
|
||||||
|
|
||||||
# Default location of everything in package
|
|
||||||
meta_directory = "${pkgs.postfix}/etc/postfix";
|
|
||||||
command_directory = "${pkgs.postfix}/bin";
|
|
||||||
sample_directory = "/etc/postfix";
|
|
||||||
newaliases_path = "${pkgs.postfix}/bin/newaliases";
|
|
||||||
mailq_path = "${pkgs.postfix}/bin/mailq";
|
|
||||||
readme_directory = false;
|
|
||||||
sendmail_path = "${pkgs.postfix}/bin/sendmail";
|
|
||||||
daemon_directory = "${pkgs.postfix}/libexec/postfix";
|
|
||||||
manpage_directory = "${pkgs.postfix}/share/man";
|
|
||||||
html_directory = "${pkgs.postfix}/share/postfix/doc/html";
|
|
||||||
shlib_directory = false;
|
|
||||||
relayhost = if cfg.relayHost == "" then "" else
|
|
||||||
if cfg.lookupMX
|
|
||||||
then "${cfg.relayHost}:${toString cfg.relayPort}"
|
|
||||||
else "[${cfg.relayHost}]:${toString cfg.relayPort}";
|
|
||||||
|
|
||||||
mail_spool_directory = "/var/spool/mail/";
|
|
||||||
setgid_group = setgidGroup;
|
|
||||||
}
|
|
||||||
// optionalAttrs config.networking.enableIPv6 { inet_protocols = "all"; }
|
|
||||||
// optionalAttrs (cfg.networks != null) { mynetworks = cfg.networks; }
|
|
||||||
// optionalAttrs (cfg.networksStyle != "") { mynetworks_style = cfg.networksStyle; }
|
|
||||||
// optionalAttrs (cfg.hostname != "") { myhostname = cfg.hostname; }
|
|
||||||
// optionalAttrs (cfg.domain != "") { mydomain = cfg.domain; }
|
|
||||||
// optionalAttrs (cfg.origin != "") { myorigin = cfg.origin; }
|
|
||||||
// optionalAttrs (cfg.destination != null) { mydestination = cfg.destination; }
|
|
||||||
// optionalAttrs (cfg.relayDomains != null) { relay_domains = cfg.relayDomains; }
|
|
||||||
// optionalAttrs (cfg.recipientDelimiter != "") { recipient_delimiter = cfg.recipientDelimiter; }
|
|
||||||
// optionalAttrs haveAliases { alias_maps = "${cfg.aliasMapType}:/etc/postfix/aliases"; }
|
|
||||||
// optionalAttrs haveTransport { transport_maps = "hash:/etc/postfix/transport"; }
|
|
||||||
// optionalAttrs haveVirtual { virtual_alias_maps = "${cfg.virtualMapType}:/etc/postfix/virtual"; }
|
|
||||||
// optionalAttrs (cfg.dnsBlacklists != []) { smtpd_client_restrictions = clientRestrictions; }
|
|
||||||
// optionalAttrs cfg.useSrs {
|
|
||||||
sender_canonical_maps = "tcp:127.0.0.1:10001";
|
|
||||||
sender_canonical_classes = "envelope_sender";
|
|
||||||
recipient_canonical_maps = "tcp:127.0.0.1:10002";
|
|
||||||
recipient_canonical_classes= "envelope_recipient";
|
|
||||||
}
|
|
||||||
// optionalAttrs cfg.enableHeaderChecks { header_checks = "regexp:/etc/postfix/header_checks"; }
|
|
||||||
// optionalAttrs (cfg.sslCert != "") {
|
|
||||||
smtp_tls_CAfile = cfg.sslCACert;
|
|
||||||
smtp_tls_cert_file = cfg.sslCert;
|
|
||||||
smtp_tls_key_file = cfg.sslKey;
|
|
||||||
|
|
||||||
smtp_use_tls = true;
|
|
||||||
|
|
||||||
smtpd_tls_CAfile = cfg.sslCACert;
|
|
||||||
smtpd_tls_cert_file = cfg.sslCert;
|
|
||||||
smtpd_tls_key_file = cfg.sslKey;
|
|
||||||
|
|
||||||
smtpd_use_tls = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
masterCfOptions = { options, config, name, ... }: {
|
masterCfOptions = { options, config, name, ... }: {
|
||||||
options = {
|
options = {
|
||||||
name = mkOption {
|
name = mkOption {
|
||||||
@ -507,7 +442,6 @@ in
|
|||||||
|
|
||||||
config = mkOption {
|
config = mkOption {
|
||||||
type = with types; attrsOf (either bool (either str (listOf str)));
|
type = with types; attrsOf (either bool (either str (listOf str)));
|
||||||
default = defaultConf;
|
|
||||||
description = ''
|
description = ''
|
||||||
The main.cf configuration file as key value set.
|
The main.cf configuration file as key value set.
|
||||||
'';
|
'';
|
||||||
@ -749,6 +683,67 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.postfix.config = (mapAttrs (_: v: mkDefault v) {
|
||||||
|
compatibility_level = "9999";
|
||||||
|
mail_owner = cfg.user;
|
||||||
|
default_privs = "nobody";
|
||||||
|
|
||||||
|
# NixOS specific locations
|
||||||
|
data_directory = "/var/lib/postfix/data";
|
||||||
|
queue_directory = "/var/lib/postfix/queue";
|
||||||
|
|
||||||
|
# Default location of everything in package
|
||||||
|
meta_directory = "${pkgs.postfix}/etc/postfix";
|
||||||
|
command_directory = "${pkgs.postfix}/bin";
|
||||||
|
sample_directory = "/etc/postfix";
|
||||||
|
newaliases_path = "${pkgs.postfix}/bin/newaliases";
|
||||||
|
mailq_path = "${pkgs.postfix}/bin/mailq";
|
||||||
|
readme_directory = false;
|
||||||
|
sendmail_path = "${pkgs.postfix}/bin/sendmail";
|
||||||
|
daemon_directory = "${pkgs.postfix}/libexec/postfix";
|
||||||
|
manpage_directory = "${pkgs.postfix}/share/man";
|
||||||
|
html_directory = "${pkgs.postfix}/share/postfix/doc/html";
|
||||||
|
shlib_directory = false;
|
||||||
|
mail_spool_directory = "/var/spool/mail/";
|
||||||
|
setgid_group = cfg.setgidGroup;
|
||||||
|
})
|
||||||
|
// optionalAttrs (cfg.relayHost != "") { relayhost = if cfg.lookupMX
|
||||||
|
then "${cfg.relayHost}:${toString cfg.relayPort}"
|
||||||
|
else "[${cfg.relayHost}]:${toString cfg.relayPort}"; }
|
||||||
|
// optionalAttrs config.networking.enableIPv6 { inet_protocols = mkDefault "all"; }
|
||||||
|
// optionalAttrs (cfg.networks != null) { mynetworks = cfg.networks; }
|
||||||
|
// optionalAttrs (cfg.networksStyle != "") { mynetworks_style = cfg.networksStyle; }
|
||||||
|
// optionalAttrs (cfg.hostname != "") { myhostname = cfg.hostname; }
|
||||||
|
// optionalAttrs (cfg.domain != "") { mydomain = cfg.domain; }
|
||||||
|
// optionalAttrs (cfg.origin != "") { myorigin = cfg.origin; }
|
||||||
|
// optionalAttrs (cfg.destination != null) { mydestination = cfg.destination; }
|
||||||
|
// optionalAttrs (cfg.relayDomains != null) { relay_domains = cfg.relayDomains; }
|
||||||
|
// optionalAttrs (cfg.recipientDelimiter != "") { recipient_delimiter = cfg.recipientDelimiter; }
|
||||||
|
// optionalAttrs haveAliases { alias_maps = [ "${cfg.aliasMapType}:/etc/postfix/aliases" ]; }
|
||||||
|
// optionalAttrs haveTransport { transport_maps = [ "hash:/etc/postfix/transport" ]; }
|
||||||
|
// optionalAttrs haveVirtual { virtual_alias_maps = [ "${cfg.virtualMapType}:/etc/postfix/virtual" ]; }
|
||||||
|
// optionalAttrs (cfg.dnsBlacklists != []) { smtpd_client_restrictions = clientRestrictions; }
|
||||||
|
// optionalAttrs cfg.useSrs {
|
||||||
|
sender_canonical_maps = [ "tcp:127.0.0.1:10001" ];
|
||||||
|
sender_canonical_classes = [ "envelope_sender" ];
|
||||||
|
recipient_canonical_maps = [ "tcp:127.0.0.1:10002" ];
|
||||||
|
recipient_canonical_classes = [ "envelope_recipient" ];
|
||||||
|
}
|
||||||
|
// optionalAttrs cfg.enableHeaderChecks { header_checks = [ "regexp:/etc/postfix/header_checks" ]; }
|
||||||
|
// optionalAttrs (cfg.sslCert != "") {
|
||||||
|
smtp_tls_CAfile = cfg.sslCACert;
|
||||||
|
smtp_tls_cert_file = cfg.sslCert;
|
||||||
|
smtp_tls_key_file = cfg.sslKey;
|
||||||
|
|
||||||
|
smtp_use_tls = true;
|
||||||
|
|
||||||
|
smtpd_tls_CAfile = cfg.sslCACert;
|
||||||
|
smtpd_tls_cert_file = cfg.sslCert;
|
||||||
|
smtpd_tls_key_file = cfg.sslKey;
|
||||||
|
|
||||||
|
smtpd_use_tls = true;
|
||||||
|
};
|
||||||
|
|
||||||
services.postfix.masterConfig = {
|
services.postfix.masterConfig = {
|
||||||
smtp_inet = {
|
smtp_inet = {
|
||||||
name = "smtp";
|
name = "smtp";
|
||||||
|
Loading…
Reference in New Issue
Block a user