diff options
author | Lluís Batlle i Rossell <viric@vicerveza.homeunix.net> | 2011-10-27 19:43:20 +0000 |
---|---|---|
committer | Lluís Batlle i Rossell <viric@vicerveza.homeunix.net> | 2011-10-27 19:43:20 +0000 |
commit | 69a31a37e4e38c4626dbeb3887398a923acc601e (patch) | |
tree | fc9b64796e1874e7734b3f0be85c4013b9125af8 /modules/services/mail | |
parent | ce822289c31c245aa79c30cae92b044b5072caf4 (diff) | |
download | nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.tar nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.tar.gz nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.tar.bz2 nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.tar.lz nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.tar.xz nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.tar.zst nixlib-69a31a37e4e38c4626dbeb3887398a923acc601e.zip |
Adding a module for dovecot2. I've not tried it much.
svn path=/nixos/trunk/; revision=30072
Diffstat (limited to 'modules/services/mail')
-rw-r--r-- | modules/services/mail/dovecot2.nix | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/modules/services/mail/dovecot2.nix b/modules/services/mail/dovecot2.nix new file mode 100644 index 000000000000..984c348dad8c --- /dev/null +++ b/modules/services/mail/dovecot2.nix @@ -0,0 +1,139 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + startingDependency = if config.services.gw6c.enable then "gw6c" else "network-interfaces"; + + cfg = config.services.dovecot2; + + dovecotConf = + '' + base_dir = /var/run/dovecot2/ + + protocols = imap pop3 + '' + + (if cfg.sslServerCert!="" then + '' + ssl_cert_file = ${cfg.sslServerCert} + ssl_key_file = ${cfg.sslServerKey} + ssl_ca_file = ${cfg.sslCACert} + '' else '' + ssl = no + disable_plaintext_auth = no + '') + + + '' + default_internal_user = ${cfg.user} + + mail_location = maildir:/var/spool/mail/%u + + maildir_copy_with_hardlinks = yes + + auth_mechanisms = plain login + service auth { + user = root + } + userdb { + driver=passwd + } + passdb { + driver=pam + } + auth_debug = yes + auth_verbose = yes + + pop3_uidl_format = %08Xv%08Xu + + log_path = /var/log/dovecot2.log + ''; + + confFile = pkgs.writeText "dovecot.conf" dovecotConf; + +in + +{ + + ###### interface + + options = { + + services.dovecot2 = { + + enable = mkOption { + default = false; + description = "Whether to enable the Dovecot 2.x POP3/IMAP server."; + }; + + user = mkOption { + default = "dovecot2"; + description = "Dovecot user name."; + }; + + group = mkOption { + default = "dovecot2"; + description = "Dovecot group name."; + }; + + sslServerCert = mkOption { + default = ""; + description = "Server certificate"; + }; + + sslCACert = mkOption { + default = ""; + description = "CA certificate used by the server certificate."; + }; + + sslServerKey = mkOption { + default = ""; + description = "Server key."; + }; + + }; + + }; + + + ###### implementation + + config = mkIf config.services.dovecot2.enable { + + security.pam.services = [ { name = "dovecot2"; } ]; + + users.extraUsers = [ + { name = cfg.user; + uid = config.ids.uids.dovecot2; + description = "Dovecot user"; + group = cfg.group; + } + { name = "dovenull"; + uid = config.ids.uids.dovenull2; + description = "Dovecot user for untrusted logins"; + group = cfg.group; + } + ]; + + users.extraGroups = singleton + { name = cfg.group; + gid = config.ids.gids.dovecot2; + }; + + jobs.dovecot2 = + { description = "Dovecot IMAP/POP3 server"; + + startOn = "started ${startingDependency}"; + + preStart = + '' + ${pkgs.coreutils}/bin/mkdir -p /var/run/dovecot2 /var/run/dovecot2/login + ${pkgs.coreutils}/bin/chown -R ${cfg.user}.${cfg.group} /var/run/dovecot2 + ''; + + exec = "${pkgs.dovecot_2_0}/sbin/dovecot -F -c ${confFile}"; + }; + + }; + +} |