diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/mail/dovecot')
5 files changed, 379 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/mail/dovecot/2.3.x-module_dir.patch b/nixpkgs/pkgs/servers/mail/dovecot/2.3.x-module_dir.patch new file mode 100644 index 000000000000..0f987b44d8a2 --- /dev/null +++ b/nixpkgs/pkgs/servers/mail/dovecot/2.3.x-module_dir.patch @@ -0,0 +1,165 @@ +diff -ru dovecot-2.3.9.2.orig/src/auth/main.c dovecot-2.3.9.2/src/auth/main.c +--- dovecot-2.3.9.2.orig/src/auth/main.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/auth/main.c 2019-12-15 19:46:52.101597499 +0100 +@@ -191,7 +191,7 @@ + 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) +@@ -222,7 +222,7 @@ + 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 -ru dovecot-2.3.9.2.orig/src/config/all-settings.c dovecot-2.3.9.2/src/config/all-settings.c +--- dovecot-2.3.9.2.orig/src/config/all-settings.c 2019-12-13 14:12:32.000000000 +0100 ++++ dovecot-2.3.9.2/src/config/all-settings.c 2019-12-15 19:49:42.764650074 +0100 +@@ -1080,7 +1080,7 @@ + .last_valid_gid = 0, + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", + +@@ -3849,7 +3849,7 @@ + .login_log_format = "%$: %s", + .login_access_sockets = "", + .login_proxy_notify_path = "proxy-notify", +- .login_plugin_dir = MODULEDIR"/login", ++ .login_plugin_dir = "/etc/dovecot/modules""/login", + .login_plugins = "", + .login_proxy_max_disconnect_delay = 0, + .director_username_hash = "%u", +@@ -4058,7 +4058,7 @@ + .login_trusted_networks = "", + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + }; + static const struct setting_parser_info *lmtp_setting_dependencies[] = { + &lda_setting_parser_info, +@@ -4823,7 +4823,7 @@ + .base_dir = PKG_RUNDIR, + .libexec_dir = PKG_LIBEXECDIR, + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + .mail_temp_dir = "/tmp", + .auth_debug = FALSE, + .auth_socket_path = "auth-userdb", +diff -ru dovecot-2.3.9.2.orig/src/config/config-parser.c dovecot-2.3.9.2/src/config/config-parser.c +--- dovecot-2.3.9.2.orig/src/config/config-parser.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/config/config-parser.c 2019-12-15 19:46:52.102597505 +0100 +@@ -1077,7 +1077,7 @@ + + i_zero(&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 -ru dovecot-2.3.9.2.orig/src/dict/main.c dovecot-2.3.9.2/src/dict/main.c +--- dovecot-2.3.9.2.orig/src/dict/main.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/dict/main.c 2019-12-15 19:46:52.102597505 +0100 +@@ -104,7 +104,7 @@ + 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 -ru dovecot-2.3.9.2.orig/src/doveadm/doveadm-settings.c dovecot-2.3.9.2/src/doveadm/doveadm-settings.c +--- dovecot-2.3.9.2.orig/src/doveadm/doveadm-settings.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/doveadm/doveadm-settings.c 2019-12-15 19:47:29.525812499 +0100 +@@ -89,7 +89,7 @@ + .base_dir = PKG_RUNDIR, + .libexec_dir = PKG_LIBEXECDIR, + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + .mail_temp_dir = "/tmp", + .auth_debug = FALSE, + .auth_socket_path = "auth-userdb", +diff -ru dovecot-2.3.9.2.orig/src/doveadm/doveadm-util.c dovecot-2.3.9.2/src/doveadm/doveadm-util.c +--- dovecot-2.3.9.2.orig/src/doveadm/doveadm-util.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/doveadm/doveadm-util.c 2019-12-15 19:52:32.003844670 +0100 +@@ -33,7 +33,7 @@ + mod_set.debug = doveadm_debug; + mod_set.ignore_dlopen_errors = TRUE; + +- modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/doveadm", + NULL, &mod_set); + module_dir_init(modules); + } +@@ -58,7 +58,7 @@ + return FALSE; + } + +- dir = opendir(DOVEADM_MODULEDIR); ++ dir = opendir("/etc/dovecot/modules/doveadm"); + if (dir == NULL) + return FALSE; + +diff -ru dovecot-2.3.9.2.orig/src/lib-fs/fs-api.c dovecot-2.3.9.2/src/lib-fs/fs-api.c +--- dovecot-2.3.9.2.orig/src/lib-fs/fs-api.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/lib-fs/fs-api.c 2019-12-15 19:46:52.102597505 +0100 +@@ -114,7 +114,7 @@ + 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 -ru dovecot-2.3.9.2.orig/src/lib-ssl-iostream/iostream-ssl.c dovecot-2.3.9.2/src/lib-ssl-iostream/iostream-ssl.c +--- dovecot-2.3.9.2.orig/src/lib-ssl-iostream/iostream-ssl.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/lib-ssl-iostream/iostream-ssl.c 2019-12-15 19:46:52.102597505 +0100 +@@ -54,7 +54,7 @@ + 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 -ru dovecot-2.3.9.2.orig/src/lib-storage/mail-storage-settings.c dovecot-2.3.9.2/src/lib-storage/mail-storage-settings.c +--- dovecot-2.3.9.2.orig/src/lib-storage/mail-storage-settings.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/lib-storage/mail-storage-settings.c 2019-12-15 19:46:52.102597505 +0100 +@@ -337,7 +337,7 @@ + .last_valid_gid = 0, + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", + +diff -ru dovecot-2.3.9.2.orig/src/lmtp/lmtp-settings.c dovecot-2.3.9.2/src/lmtp/lmtp-settings.c +--- dovecot-2.3.9.2.orig/src/lmtp/lmtp-settings.c 2019-12-13 14:12:00.000000000 +0100 ++++ dovecot-2.3.9.2/src/lmtp/lmtp-settings.c 2019-12-15 19:46:52.102597505 +0100 +@@ -95,7 +95,7 @@ + .login_trusted_networks = "", + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + }; + + static const struct setting_parser_info *lmtp_setting_dependencies[] = { diff --git a/nixpkgs/pkgs/servers/mail/dovecot/default.nix b/nixpkgs/pkgs/servers/mail/dovecot/default.nix new file mode 100644 index 000000000000..185f38d2e0be --- /dev/null +++ b/nixpkgs/pkgs/servers/mail/dovecot/default.nix @@ -0,0 +1,124 @@ +{ stdenv, lib, fetchurl, perl, pkg-config, systemd, openssl +, bzip2, zlib, lz4, inotify-tools, pam, libcap, coreutils +, clucene_core_2, icu, openldap, libsodium, libstemmer, cyrus_sasl +, nixosTests +, fetchpatch +# Auth modules +, withMySQL ? false, libmysqlclient +, withPgSQL ? false, postgresql +, withSQLite ? true, sqlite +, withLua ? false, lua5_3 +}: + +stdenv.mkDerivation rec { + pname = "dovecot"; + version = "2.3.21"; + + nativeBuildInputs = [ perl pkg-config ]; + 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 libmysqlclient + ++ lib.optional withPgSQL postgresql + ++ lib.optional withSQLite sqlite + ++ lib.optional withLua lua5_3; + + src = fetchurl { + url = "https://dovecot.org/releases/${lib.versions.majorMinor version}/${pname}-${version}.tar.gz"; + hash = "sha256-BbEQk6ccI3wu8wmtWHUQchzJO77mgoJRVJ/BWGw2UC0="; + }; + + enableParallelBuilding = true; + + postPatch = '' + sed -i -E \ + -e 's!/bin/sh\b!${stdenv.shell}!g' \ + -e 's!([^[:alnum:]/_-])/bin/([[:alnum:]]+)\b!\1${coreutils}/bin/\2!g' \ + -e 's!([^[:alnum:]/_-])(head|sleep|cat)\b!\1${coreutils}/bin/\2!g' \ + src/lib-program-client/test-program-client-local.c + + patchShebangs src/lib-smtp/test-bin/*.sh + sed -i -s -E 's!\bcat\b!${coreutils}/bin/cat!g' src/lib-smtp/test-bin/*.sh + + patchShebangs src/config/settings-get.pl + + # DES-encrypted passwords are not supported by NixPkgs anymore + sed '/test_password_scheme("CRYPT"/d' -i src/auth/test-libpassword.c + '' + lib.optionalString stdenv.isLinux '' + export systemdsystemunitdir=$out/etc/systemd/system + ''; + + # 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.3.x-module_dir.patch + # fix openssl 3.0 compatibility + (fetchpatch { + url = "https://salsa.debian.org/debian/dovecot/-/raw/debian/1%252.3.19.1+dfsg1-2/debian/patches/Support-openssl-3.0.patch"; + hash = "sha256-PbBB1jIY3jIC8Js1NY93zkV0gISGUq7Nc67Ul5tN7sw="; + }) + ] ++ lib.optionals stdenv.isDarwin [ + # fix timespec calls + ./timespec.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.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "i_cv_epoll_works=${if stdenv.isLinux then "yes" else "no"}" + "i_cv_posix_fallocate_works=${if stdenv.isDarwin then "no" else "yes"}" + "i_cv_inotify_works=${if stdenv.isLinux then "yes" else "no"}" + "i_cv_signed_size_t=no" + "i_cv_signed_time_t=yes" + "i_cv_c99_vsnprintf=yes" + "lib_cv_va_copy=yes" + "i_cv_mmap_plays_with_write=yes" + "i_cv_gmtime_max_time_t=${toString stdenv.hostPlatform.parsed.cpu.bits}" + "i_cv_signed_time_t=yes" + "i_cv_fd_passing=yes" + "lib_cv_va_copy=yes" + "lib_cv___va_copy=yes" + "lib_cv_va_val_copy=yes" + ] ++ lib.optional stdenv.isLinux "--with-systemd" + ++ lib.optional stdenv.isDarwin "--enable-static" + ++ lib.optional withMySQL "--with-mysql" + ++ lib.optional withPgSQL "--with-pgsql" + ++ lib.optional withSQLite "--with-sqlite" + ++ lib.optional withLua "--with-lua"; + + doCheck = !stdenv.isDarwin; + + meta = with lib; { + homepage = "https://dovecot.org/"; + description = "Open source IMAP and POP3 email server written with security primarily in mind"; + license = with licenses; [ mit publicDomain lgpl21Only bsd3 bsdOriginal ]; + mainProgram = "dovecot"; + maintainers = with maintainers; [ fpletz globin ] ++ teams.helsinki-systems.members; + platforms = platforms.unix; + }; + passthru.tests = { + opensmtpd-interaction = nixosTests.opensmtpd; + inherit (nixosTests) dovecot; + }; +} diff --git a/nixpkgs/pkgs/servers/mail/dovecot/plugins/fts_xapian/default.nix b/nixpkgs/pkgs/servers/mail/dovecot/plugins/fts_xapian/default.nix new file mode 100644 index 000000000000..f27f82aeff6a --- /dev/null +++ b/nixpkgs/pkgs/servers/mail/dovecot/plugins/fts_xapian/default.nix @@ -0,0 +1,36 @@ +{ lib, stdenv, fetchFromGitHub, autoconf, automake, sqlite, pkg-config, dovecot, libtool, xapian, icu64 }: +stdenv.mkDerivation rec { + pname = "dovecot-fts-xapian"; + version = "1.7.9"; + + src = fetchFromGitHub { + owner = "grosjo"; + repo = "fts-xapian"; + rev = version; + sha256 = "sha256-8D2K0i6wJZfvhRIZKqGPS1tWzBOTPKzn1YMAhDIPkw0="; + }; + + buildInputs = [ dovecot xapian icu64 sqlite ]; + + nativeBuildInputs = [ autoconf automake libtool pkg-config ]; + + preConfigure = '' + export PANDOC=false + autoreconf -vi + ''; + + configureFlags = [ + "--with-dovecot=${dovecot}/lib/dovecot" + "--with-moduledir=$(out)/lib/dovecot" + ]; + + meta = with lib; { + homepage = "https://github.com/grosjo/fts-xapian"; + description = "Dovecot FTS plugin based on Xapian"; + changelog = "https://github.com/grosjo/fts-xapian/releases"; + license = licenses.lgpl21Only; + maintainers = with maintainers; [ julm symphorien ]; + platforms = platforms.unix; + broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/dovecot_fts_xapian.x86_64-darwin + }; +} 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..25be75b2b960 --- /dev/null +++ b/nixpkgs/pkgs/servers/mail/dovecot/plugins/pigeonhole/default.nix @@ -0,0 +1,39 @@ +{ lib, stdenv, fetchurl, dovecot, openssl }: +let + dovecotMajorMinor = lib.versions.majorMinor dovecot.version; +in stdenv.mkDerivation rec { + pname = "dovecot-pigeonhole"; + version = "0.5.21"; + + src = fetchurl { + url = "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${version}.tar.gz"; + hash = "sha256-HKcdJlkHZxIFinIDAojxULKwdrAwZFNHHFJhSY097Sc="; + }; + + 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 lib; { + homepage = "https://pigeonhole.dovecot.org/"; + description = "A sieve plugin for the Dovecot IMAP server"; + license = licenses.lgpl21Only; + maintainers = with maintainers; [ globin ] ++ teams.helsinki-systems.members; + platforms = platforms.unix; + }; +} diff --git a/nixpkgs/pkgs/servers/mail/dovecot/timespec.patch b/nixpkgs/pkgs/servers/mail/dovecot/timespec.patch new file mode 100644 index 000000000000..50290a5a57de --- /dev/null +++ b/nixpkgs/pkgs/servers/mail/dovecot/timespec.patch @@ -0,0 +1,15 @@ +diff --git a/src/lib-storage/index/dbox-common/dbox-storage.h b/src/lib-storage/index/dbox-common/dbox-storage.h +index 8e8aaa1..a3018a4 100644 +--- a/src/lib-storage/index/dbox-common/dbox-storage.h ++++ b/src/lib-storage/index/dbox-common/dbox-storage.h +@@ -86,4 +86,10 @@ int dbox_verify_alt_storage(struct mailbox_list *list); + bool dbox_header_have_flag(struct mailbox *box, uint32_t ext_id, + unsigned int flags_offset, uint8_t flag); + ++#if defined(__APPLE__) || defined(__NetBSD__) ++#define st_atim st_atimespec ++#define st_ctim st_ctimespec ++#define st_mtim st_mtimespec ++#endif ++ + #endif |