diff --git a/pkgs/by-name/do/dovecot-fts-flatcurve/package.nix b/pkgs/by-name/do/dovecot-fts-flatcurve/package.nix index 7cceb60a6fc5..857bdea41bae 100644 --- a/pkgs/by-name/do/dovecot-fts-flatcurve/package.nix +++ b/pkgs/by-name/do/dovecot-fts-flatcurve/package.nix @@ -4,7 +4,8 @@ fetchFromGitHub, autoreconfHook, pkg-config, - dovecot, + # only build for dovecot 2.3 as the package is part of dovecot since 2.4 + dovecot_2_3, xapian, }: @@ -29,7 +30,7 @@ stdenv.mkDerivation (finalAttrs: { ]; configureFlags = [ - "--with-dovecot=${dovecot}/lib/dovecot" + "--with-dovecot=${lib.getLib dovecot_2_3}/lib/dovecot" "--with-moduledir=${placeholder "out"}/lib/dovecot/modules" ]; diff --git a/pkgs/by-name/do/dovecot/2.4.nix b/pkgs/by-name/do/dovecot/2.4.nix new file mode 100644 index 000000000000..388cb6101cc4 --- /dev/null +++ b/pkgs/by-name/do/dovecot/2.4.nix @@ -0,0 +1,8 @@ +import ./generic.nix { + version = "2.4.2"; + hash = "sha256-uOW0gOernPRb+3fkupTISiQ34An0HEMFrdH0mjmFLKQ="; + patches = _: [ + # Fix loading extended modules. + ./load-extended-modules.patch + ]; +} diff --git a/pkgs/by-name/do/dovecot/generic.nix b/pkgs/by-name/do/dovecot/generic.nix new file mode 100644 index 000000000000..6bdba0038bc6 --- /dev/null +++ b/pkgs/by-name/do/dovecot/generic.nix @@ -0,0 +1,234 @@ +{ + version, + hash, + patches, +}: +{ + stdenv, + lib, + fetchzip, + flex, + bison, + perl, + pkg-config, + systemd, + openssl, + bzip2, + lz4, + zlib, + zstd, + xz, + inotify-tools, + pam, + libcap, + coreutils, + clucene-core_2, + icu75, + libexttextcat, + libsodium, + libxcrypt, + libstemmer, + cyrus_sasl, + nixosTests, + fetchpatch, + rpcsvc-proto, + libtirpc, + dovecot_pigeonhole_0_5, + dovecot_pigeonhole ? dovecot_pigeonhole_0_5, + withApparmor ? false, + libapparmor, + withLDAP ? true, + openldap, + withPCRE2 ? lib.strings.versionAtLeast version "2.4", + pcre2, + withUnwind ? false, + libunwind, + # Auth modules + withMySQL ? false, + libmysqlclient, + withPgSQL ? false, + libpq, + withSQLite ? true, + sqlite, + withLua ? false, + lua5_3, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "dovecot"; + inherit version; + + nativeBuildInputs = [ + flex + bison + perl + pkg-config + ] + ++ lib.optionals (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isDarwin) [ rpcsvc-proto ]; + + buildInputs = [ + openssl + bzip2 + lz4 + zlib + zstd + xz + clucene-core_2 + icu75 + libexttextcat + libsodium + libxcrypt + libstemmer + cyrus_sasl.dev + ] + ++ lib.optionals (stdenv.hostPlatform.isLinux) [ + systemd + pam + libcap + inotify-tools + ] + ++ lib.optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isDarwin) libtirpc + ++ lib.optional withApparmor libapparmor + ++ lib.optional withLDAP openldap + ++ lib.optional withPCRE2 pcre2 + ++ lib.optional withUnwind libunwind + ++ lib.optional withMySQL libmysqlclient + ++ lib.optional withPgSQL libpq + ++ lib.optional withSQLite sqlite + ++ lib.optional withLua lua5_3; + + src = fetchzip { + url = "https://dovecot.org/releases/${lib.versions.majorMinor finalAttrs.version}/dovecot-${finalAttrs.version}.tar.gz"; + inherit hash; + }; + + enableParallelBuilding = true; + + env.NIX_LDFLAGS = lib.optionalString stdenv.hostPlatform.isDarwin "-liconv"; + + postConfigure = lib.optionalString (lib.strings.versionAtLeast version "2.4") '' + substituteInPlace src/lib-regex/Makefile --replace-fail \ + "test_regex_DEPENDENCIES = libdregex.la \$(LIBPCRE_LIBS)" \ + "test_regex_DEPENDENCIES = libdregex.la" + ''; + + 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 + '' + + ( + let + filePath = + if lib.strings.versionAtLeast version "2.4" then + "src/lib-auth/test-password-scheme.c" + else + "src/auth/test-libpassword.c"; + in + '' + # DES-encrypted passwords are not supported by Nixpkgs anymore + sed '/test_password_scheme("CRYPT"/d' -i ${filePath} + '' + ) + + lib.optionalString stdenv.hostPlatform.isLinux '' + export systemdsystemunitdir=$out/etc/systemd/system + ''; + + preBuild = lib.optionalString (lib.strings.versionOlder version "2.4" && stdenv.isDarwin) '' + export NIX_LDFLAGS="$NIX_LDFLAGS -undefined dynamic_lookup" + ''; + + # 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 = + (patches fetchpatch) + ++ lib.optionals stdenv.hostPlatform.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-moduledir=${placeholder "out"}/lib/dovecot/modules" + "--with-ssl=openssl" + "--with-zlib" + "--with-bzlib" + "--with-lz4" + "--with-lucene" + "--with-icu" + "--with-textcat" + ] + ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "i_cv_epoll_works=${lib.boolToYesNo stdenv.hostPlatform.isLinux}" + "i_cv_posix_fallocate_works=${lib.boolToYesNo stdenv.hostPlatform.isDarwin}" + "i_cv_inotify_works=${lib.boolToYesNo stdenv.hostPlatform.isLinux}" + "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.hostPlatform.isLinux "--with-systemd" + ++ lib.optional stdenv.hostPlatform.isDarwin "--enable-static" + ++ lib.optional withLDAP "--with-ldap" + ++ lib.optional withPCRE2 "--with-pcre2" + ++ lib.optional withLua "--with-lua" + ++ lib.optional withMySQL "--with-mysql" + ++ lib.optional withPgSQL "--with-pgsql" + ++ lib.optional withSQLite "--with-sqlite"; + + doCheck = !stdenv.hostPlatform.isDarwin; + + strictDeps = true; + + meta = { + homepage = "https://dovecot.org/"; + description = "Open source IMAP and POP3 email server written with security primarily in mind"; + license = with lib.licenses; [ + mit + publicDomain + lgpl21Only + bsd3 + bsdOriginal + ]; + mainProgram = "dovecot"; + maintainers = with lib.maintainers; [ + das_j + fpletz + helsinki-Jo + jappie3 + prince213 + ]; + platforms = lib.platforms.unix; + }; + passthru = { + inherit dovecot_pigeonhole; + tests = { + opensmtpd-interaction = nixosTests.opensmtpd; + inherit (nixosTests) dovecot; + }; + }; +}) diff --git a/pkgs/by-name/do/dovecot/package.nix b/pkgs/by-name/do/dovecot/package.nix index de811df59304..3b8ad371034e 100644 --- a/pkgs/by-name/do/dovecot/package.nix +++ b/pkgs/by-name/do/dovecot/package.nix @@ -1,127 +1,7 @@ -{ - stdenv, - lib, - fetchurl, - flex, - bison, - perl, - pkg-config, - systemd, - openssl, - bzip2, - lz4, - zlib, - zstd, - xz, - inotify-tools, - pam, - libcap, - coreutils, - clucene-core_2, - icu75, - libexttextcat, - libsodium, - libxcrypt, - libstemmer, - cyrus_sasl, - nixosTests, - fetchpatch, - rpcsvc-proto, - libtirpc, - withApparmor ? false, - libapparmor, - withLDAP ? true, - openldap, - withUnwind ? false, - libunwind, - # Auth modules - withMySQL ? false, - libmysqlclient, - withPgSQL ? false, - libpq, - withSQLite ? true, - sqlite, - withLua ? false, - lua5_3, -}: - -stdenv.mkDerivation (finalAttrs: { - pname = "dovecot"; +import ./generic.nix { version = "2.3.21.1"; - - nativeBuildInputs = [ - flex - bison - perl - pkg-config - ] - ++ lib.optionals (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isDarwin) [ rpcsvc-proto ]; - - buildInputs = [ - openssl - bzip2 - lz4 - zlib - zstd - xz - clucene-core_2 - icu75 - libexttextcat - libsodium - libxcrypt - libstemmer - cyrus_sasl.dev - ] - ++ lib.optionals (stdenv.hostPlatform.isLinux) [ - systemd - pam - libcap - inotify-tools - ] - ++ lib.optional (stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isDarwin) libtirpc - ++ lib.optional withApparmor libapparmor - ++ lib.optional withLDAP openldap - ++ lib.optional withUnwind libunwind - ++ lib.optional withMySQL libmysqlclient - ++ lib.optional withPgSQL libpq - ++ lib.optional withSQLite sqlite - ++ lib.optional withLua lua5_3; - - src = fetchurl { - url = "https://dovecot.org/releases/${lib.versions.majorMinor finalAttrs.version}/dovecot-${finalAttrs.version}.tar.gz"; - hash = "sha256-LZCheMQpdhEIi/farlSSo7w9WrYyjDoDLrQl0sJJCX4="; - }; - - 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.hostPlatform.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 = [ + hash = "sha256-1THBB401r6AnZbnHGhIq+o+nR8v94O0mIX68Pv0miiE="; + patches = fetchpatch: [ # Fix loading extended modules. ./load-extended-modules.patch # fix openssl 3.0 compatibility @@ -129,81 +9,10 @@ stdenv.mkDerivation (finalAttrs: { 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="; }) - # Fix build with gcc15 (fetchpatch { name = "dovecot-test-data-stack-drop-bogus-assertion.patch"; url = "https://github.com/dovecot/core/commit/9f642dd868db6e7401f24e4fb4031b5bdca8aae7.patch"; hash = "sha256-dAX80dRqOba9Fkzl11ChYJ6vqcgfkaw/o+TOQKCnnns="; }) - ] - ++ lib.optionals stdenv.hostPlatform.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-moduledir=${placeholder "out"}/lib/dovecot/modules" - "--with-ssl=openssl" - "--with-zlib" - "--with-bzlib" - "--with-lz4" - "--with-lucene" - "--with-icu" - "--with-textcat" - ] - ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ - "i_cv_epoll_works=${lib.boolToYesNo stdenv.hostPlatform.isLinux}" - "i_cv_posix_fallocate_works=${lib.boolToYesNo stdenv.hostPlatform.isDarwin}" - "i_cv_inotify_works=${lib.boolToYesNo stdenv.hostPlatform.isLinux}" - "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.hostPlatform.isLinux "--with-systemd" - ++ lib.optional stdenv.hostPlatform.isDarwin "--enable-static" - ++ lib.optional withLDAP "--with-ldap" - ++ lib.optional withLua "--with-lua" - ++ lib.optional withMySQL "--with-mysql" - ++ lib.optional withPgSQL "--with-pgsql" - ++ lib.optional withSQLite "--with-sqlite"; - - doCheck = !stdenv.hostPlatform.isDarwin; - - strictDeps = true; - - meta = { - homepage = "https://dovecot.org/"; - description = "Open source IMAP and POP3 email server written with security primarily in mind"; - license = with lib.licenses; [ - mit - publicDomain - lgpl21Only - bsd3 - bsdOriginal - ]; - mainProgram = "dovecot"; - maintainers = with lib.maintainers; [ - das_j - fpletz - helsinki-Jo - ]; - platforms = lib.platforms.unix; - }; - passthru.tests = { - opensmtpd-interaction = nixosTests.opensmtpd; - inherit (nixosTests) dovecot; - }; -}) +} diff --git a/pkgs/by-name/do/dovecot_pigeonhole/2.4.nix b/pkgs/by-name/do/dovecot_pigeonhole/2.4.nix new file mode 100644 index 000000000000..5c33ad27e677 --- /dev/null +++ b/pkgs/by-name/do/dovecot_pigeonhole/2.4.nix @@ -0,0 +1,18 @@ +import ./generic.nix { + version = "2.4.2"; + url = + { + version, + dovecotMajorMinor, + }: + "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-pigeonhole-${version}.tar.gz"; + hash = "sha256-nXiBii9LGe6VkGKkUBpvlntuvkQbqhAOqeSwwJb/ghE="; + patches = fetchpatch: [ + ./max_lookup_size.patch + # https://github.com/NixOS/nixpkgs/pull/388463#issuecomment-3066016707 + (fetchpatch { + url = "https://github.com/dovecot/pigeonhole/commit/517d74aa1d98b853b72608ce722bc58009c0f4a9.patch"; + hash = "sha256-BLBz9ZhOGEIIitnXG0uM6bZBRNnQBy4K2IJlh1+Un50="; + }) + ]; +} diff --git a/pkgs/by-name/do/dovecot_pigeonhole/generic.nix b/pkgs/by-name/do/dovecot_pigeonhole/generic.nix new file mode 100644 index 000000000000..5ae28acac1ce --- /dev/null +++ b/pkgs/by-name/do/dovecot_pigeonhole/generic.nix @@ -0,0 +1,89 @@ +{ + version, + url, + hash, + patches ? _: [ ], +}: +{ + lib, + stdenv, + fetchpatch, + fetchzip, + dovecot_2_3, + dovecot ? dovecot_2_3, + openssl, + libstemmer, + perl, + withLDAP ? true, + cyrus_sasl, + openldap, +}: +let + dovecotMajorMinor = lib.versions.majorMinor dovecot.version; + isCurrent = lib.strings.versionAtLeast version "2.4"; +in +stdenv.mkDerivation (finalAttrs: { + pname = "dovecot-pigeonhole"; + inherit version; + + src = fetchzip { + url = url { + inherit (finalAttrs) version; + inherit dovecotMajorMinor; + }; + inherit hash; + }; + + patches = patches fetchpatch; + + postPatch = lib.optionalString isCurrent '' + patchShebangs src/plugins/settings/settings-get.pl + ''; + + nativeBuildInputs = lib.optional isCurrent perl; + + buildInputs = [ + dovecot + openssl + ] + ++ lib.optional (isCurrent && stdenv.hostPlatform.isDarwin) libstemmer + ++ lib.optionals withLDAP [ + cyrus_sasl + openldap + ]; + + 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" + "--with-moduledir=${placeholder "out"}/lib/dovecot/modules" + "--without-dovecot-install-dirs" + ] + ++ lib.optional withLDAP "--with-ldap"; + + preBuild = lib.optionalString (lib.strings.versionOlder version "2.4" && stdenv.isDarwin) '' + export NIX_LDFLAGS="$NIX_LDFLAGS -undefined dynamic_lookup" + ''; + + enableParallelBuilding = true; + + meta = { + homepage = "https://pigeonhole.dovecot.org/"; + description = "Sieve plugin for the Dovecot IMAP server"; + license = lib.licenses.lgpl21Only; + maintainers = with lib.maintainers; [ + das_j + helsinki-Jo + jappie3 + prince213 + ]; + platforms = lib.platforms.unix; + }; +}) diff --git a/pkgs/by-name/do/dovecot_pigeonhole/max_lookup_size.patch b/pkgs/by-name/do/dovecot_pigeonhole/max_lookup_size.patch new file mode 100644 index 000000000000..e1168a8f400c --- /dev/null +++ b/pkgs/by-name/do/dovecot_pigeonhole/max_lookup_size.patch @@ -0,0 +1,11 @@ +--- a/src/lib-sieve/plugins/extlists/ext-extlists-settings.h ++++ b/src/lib-sieve/plugins/extlists/ext-extlists-settings.h +@@ -12,7 +12,7 @@ + + const char *name; + /* Maximum size of lookup value */ +- size_t max_lookup_size; ++ uoff_t max_lookup_size; + + struct { + const char *name; diff --git a/pkgs/by-name/do/dovecot_pigeonhole/package.nix b/pkgs/by-name/do/dovecot_pigeonhole/package.nix index 90d50c6d5d20..4de2e7419269 100644 --- a/pkgs/by-name/do/dovecot_pigeonhole/package.nix +++ b/pkgs/by-name/do/dovecot_pigeonhole/package.nix @@ -1,52 +1,10 @@ -{ - lib, - stdenv, - fetchurl, - dovecot, - openssl, -}: -let - dovecotMajorMinor = lib.versions.majorMinor dovecot.version; -in -stdenv.mkDerivation (finalAttrs: { - pname = "dovecot-pigeonhole"; +import ./generic.nix { version = "0.5.21.1"; - - src = fetchurl { - url = "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${finalAttrs.version}.tar.gz"; - hash = "sha256-A3fbKEtiByPeBgQxEV+y53keHfQyFBGvcYIB1pJcRpI="; - }; - - 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" - "--with-moduledir=${placeholder "out"}/lib/dovecot/modules" - "--without-dovecot-install-dirs" - ]; - - enableParallelBuilding = true; - - meta = { - homepage = "https://pigeonhole.dovecot.org/"; - description = "Sieve plugin for the Dovecot IMAP server"; - license = lib.licenses.lgpl21Only; - maintainers = with lib.maintainers; [ - das_j - helsinki-Jo - ]; - platforms = lib.platforms.unix; - }; -}) + url = + { + version, + dovecotMajorMinor, + }: + "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${version}.tar.gz"; + hash = "sha256-andOWZmgWYIPATEk0V+mHmReL+quG81azwPkBMoo9OE="; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f1c2f437c098..c990f4a15dcd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8082,6 +8082,16 @@ with pkgs; dodgy = with python3Packages; toPythonApplication dodgy; + dovecot_2_3 = dovecot; + dovecot_2_4 = callPackage ../by-name/do/dovecot/2.4.nix { + dovecot_pigeonhole = dovecot_pigeonhole_2_4; + }; + + dovecot_pigeonhole_0_5 = dovecot_pigeonhole; + dovecot_pigeonhole_2_4 = callPackage ../by-name/do/dovecot_pigeonhole/2.4.nix { + dovecot = dovecot_2_4; + }; + inherit (callPackages ../servers/firebird { }) firebird_4 firebird_3