about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/mail/dovecot
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/mail/dovecot')
-rw-r--r--nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch122
-rw-r--r--nixpkgs/pkgs/servers/mail/dovecot/default.nix75
-rw-r--r--nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix38
3 files changed, 235 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch b/nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch
new file mode 100644
index 000000000000..1914933c558c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dovecot/2.2.x-module_dir.patch
@@ -0,0 +1,122 @@
+diff --git a/src/auth/main.c b/src/auth/main.c
+index 5a87c57..74bff52 100644
+--- a/src/auth/main.c
++++ b/src/auth/main.c
+@@ -194,7 +194,7 @@ static void main_preinit(void)
+ 	mod_set.debug = global_auth_settings->debug;
+ 	mod_set.filter_callback = auth_module_filter;
+ 
+-	modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set);
++	modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set);
+ 	module_dir_init(modules);
+ 
+ 	if (!worker)
+@@ -225,7 +225,7 @@ void auth_module_load(const char *names)
+ 	mod_set.debug = global_auth_settings->debug;
+ 	mod_set.ignore_missing = TRUE;
+ 
+-	modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names,
++	modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names,
+ 					  &mod_set);
+ 	module_dir_init(modules);
+ }
+diff --git a/src/config/all-settings.c b/src/config/all-settings.c
+index de223a5..2df2d21 100644
+--- a/src/config/all-settings.c
++++ b/src/config/all-settings.c
+@@ -836,7 +836,7 @@ static const struct mail_user_settings mail_user_default_settings = {
+ 	.last_valid_gid = 0,
+ 
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 
+ 	.mail_log_prefix = "%s(%u): ",
+ 
+@@ -3545,7 +3545,7 @@ const struct doveadm_settings doveadm_default_settings = {
+ 	.base_dir = PKG_RUNDIR,
+ 	.libexec_dir = PKG_LIBEXECDIR,
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 	.auth_debug = FALSE,
+ 	.auth_socket_path = "auth-userdb",
+ 	.doveadm_socket_path = "doveadm-server",
+diff --git a/src/config/config-parser.c b/src/config/config-parser.c
+index 2a5009a..134f92b 100644
+--- a/src/config/config-parser.c
++++ b/src/config/config-parser.c
+@@ -1047,7 +1047,7 @@ void config_parse_load_modules(void)
+ 
+ 	memset(&mod_set, 0, sizeof(mod_set));
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+-	modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set);
++	modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set);
+ 	module_dir_init(modules);
+ 
+ 	i_array_init(&new_roots, 64);
+diff --git a/src/dict/main.c b/src/dict/main.c
+index e6c945e..06ad6c5 100644
+--- a/src/dict/main.c
++++ b/src/dict/main.c
+@@ -62,7 +62,7 @@ static void main_init(void)
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+ 	mod_set.require_init_funcs = TRUE;
+ 
+-	modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set);
++	modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set);
+ 	module_dir_init(modules);
+ 
+ 	/* Register only after loading modules. They may contain SQL drivers,
+diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c
+index df12284..19c18da 100644
+--- a/src/doveadm/doveadm-settings.c
++++ b/src/doveadm/doveadm-settings.c
+@@ -81,7 +81,7 @@ const struct doveadm_settings doveadm_default_settings = {
+ 	.base_dir = PKG_RUNDIR,
+ 	.libexec_dir = PKG_LIBEXECDIR,
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 	.auth_debug = FALSE,
+ 	.auth_socket_path = "auth-userdb",
+ 	.doveadm_socket_path = "doveadm-server",
+diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c
+index b50fbe0..ace3aff 100644
+--- a/src/lib-fs/fs-api.c
++++ b/src/lib-fs/fs-api.c
+@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver)
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+ 	mod_set.ignore_missing = TRUE;
+ 
+-	fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR,
++	fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules",
+ 					     module_name, &mod_set);
+ 	module_dir_init(fs_modules);
+ 
+diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c
+index a0659ab..dba3729 100644
+--- a/src/lib-ssl-iostream/iostream-ssl.c
++++ b/src/lib-ssl-iostream/iostream-ssl.c
+@@ -34,7 +34,7 @@ static int ssl_module_load(const char **error_r)
+ 	mod_set.abi_version = DOVECOT_ABI_VERSION;
+ 	mod_set.setting_name = "<built-in lib-ssl-iostream lookup>";
+ 	mod_set.require_init_funcs = TRUE;
+-	ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set);
++	ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set);
+ 	if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name,
+ 					&mod_set, error_r) < 0)
+ 		return -1;
+diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c
+index e2233bf..bbf981e 100644
+--- a/src/lib-storage/mail-storage-settings.c
++++ b/src/lib-storage/mail-storage-settings.c
+@@ -274,7 +274,7 @@ static const struct mail_user_settings mail_user_default_settings = {
+ 	.last_valid_gid = 0,
+ 
+ 	.mail_plugins = "",
+-	.mail_plugin_dir = MODULEDIR,
++	.mail_plugin_dir = "/etc/dovecot/modules",
+ 
+ 	.mail_log_prefix = "%s(%u): ",
+ 
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/default.nix b/nixpkgs/pkgs/servers/mail/dovecot/default.nix
new file mode 100644
index 000000000000..6c6ddf651e62
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dovecot/default.nix
@@ -0,0 +1,75 @@
+{ stdenv, lib, fetchurl, perl, pkgconfig, systemd, openssl
+, bzip2, zlib, lz4, inotify-tools, pam, libcap
+, clucene_core_2, icu, openldap, libsodium, libstemmer, cyrus_sasl
+, nixosTests
+# Auth modules
+, withMySQL ? false, mysql
+, withPgSQL ? false, postgresql
+, withSQLite ? true, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  name = "dovecot-2.3.4";
+
+  nativeBuildInputs = [ perl pkgconfig ];
+  buildInputs =
+    [ openssl bzip2 zlib lz4 clucene_core_2 icu openldap libsodium libstemmer cyrus_sasl.dev ]
+    ++ lib.optionals (stdenv.isLinux) [ systemd pam libcap inotify-tools ]
+    ++ lib.optional withMySQL mysql.connector-c
+    ++ lib.optional withPgSQL postgresql
+    ++ lib.optional withSQLite sqlite;
+
+  src = fetchurl {
+    url = "https://dovecot.org/releases/2.3/${name}.tar.gz";
+    sha256 = "01ggzf7b3jpl89mjiqr7xbpbs181g2gjf6wzg70qaqfzz3ppc6yr";
+  };
+
+  preConfigure = ''
+    patchShebangs src/config/settings-get.pl
+  '';
+
+  # We need this for sysconfdir, see remark below.
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    cp -r $out/$out/* $out
+    rm -rf $out/$(echo "$out" | cut -d "/" -f2)
+  '';
+
+  patches = [
+    # Make dovecot look for plugins in /etc/dovecot/modules
+    # so we can symlink plugins from several packages there.
+    # The symlinking needs to be done in NixOS.
+    ./2.2.x-module_dir.patch
+  ];
+
+  configureFlags = [
+    # It will hardcode this for /var/lib/dovecot.
+    # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=626211
+    "--localstatedir=/var"
+    # We need this so utilities default to reading /etc/dovecot/dovecot.conf file.
+    "--sysconfdir=/etc"
+    "--with-ldap"
+    "--with-ssl=openssl"
+    "--with-zlib"
+    "--with-bzlib"
+    "--with-lz4"
+    "--with-ldap"
+    "--with-lucene"
+    "--with-icu"
+  ] ++ lib.optional (stdenv.isLinux) "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+    ++ lib.optional (stdenv.isDarwin) "--enable-static"
+    ++ lib.optional withMySQL "--with-mysql"
+    ++ lib.optional withPgSQL "--with-pgsql"
+    ++ lib.optional withSQLite "--with-sqlite";
+
+  meta = {
+    homepage = https://dovecot.org/;
+    description = "Open source IMAP and POP3 email server written with security primarily in mind";
+    maintainers = with stdenv.lib.maintainers; [ peti rickynils fpletz ];
+    platforms = stdenv.lib.platforms.unix;
+  };
+  passthru.tests = {
+    opensmtpd-interaction = nixosTests.opensmtpd;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix b/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix
new file mode 100644
index 000000000000..73d6b5d593c9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchurl, dovecot, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "dovecot-pigeonhole-${version}";
+  version = "0.5.4";
+
+  src = fetchurl {
+    url = "https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-${version}.tar.gz";
+    sha256 = "05l5y0gc8ycswdbl58j7kbx5gq1z7mjkazjccmgbq6h0gbk9jyal";
+  };
+
+  buildInputs = [ dovecot openssl ];
+
+  preConfigure = ''
+    substituteInPlace src/managesieve/managesieve-settings.c --replace \
+      ".executable = \"managesieve\"" \
+      ".executable = \"$out/libexec/dovecot/managesieve\""
+    substituteInPlace src/managesieve-login/managesieve-login-settings.c --replace \
+      ".executable = \"managesieve-login\"" \
+      ".executable = \"$out/libexec/dovecot/managesieve-login\""
+  '';
+
+  configureFlags = [
+    "--with-dovecot=${dovecot}/lib/dovecot"
+    "--without-dovecot-install-dirs"
+    "--with-moduledir=$(out)/lib/dovecot"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with stdenv.lib; {
+    homepage = http://pigeonhole.dovecot.org/;
+    description = "A sieve plugin for the Dovecot IMAP server";
+    license = licenses.lgpl21;
+    maintainers = [ maintainers.rickynils ];
+    platforms = platforms.unix;
+  };
+}