about summary refs log tree commit diff
path: root/modules/services/mail
diff options
context:
space:
mode:
authorLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2011-10-27 19:43:20 +0000
committerLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2011-10-27 19:43:20 +0000
commit69a31a37e4e38c4626dbeb3887398a923acc601e (patch)
treefc9b64796e1874e7734b3f0be85c4013b9125af8 /modules/services/mail
parentce822289c31c245aa79c30cae92b044b5072caf4 (diff)
downloadnixlib-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.nix139
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}";
+      };
+
+  };
+
+}