dovecot: init at 2.4.2 (#500892)

This commit is contained in:
Sizhe Zhao
2026-03-27 03:11:50 +00:00
committed by GitHub
9 changed files with 386 additions and 248 deletions
@@ -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"
];
+8
View File
@@ -0,0 +1,8 @@
import ./generic.nix {
version = "2.4.2";
hash = "sha256-uOW0gOernPRb+3fkupTISiQ34An0HEMFrdH0mjmFLKQ=";
patches = _: [
# Fix loading extended modules.
./load-extended-modules.patch
];
}
+234
View File
@@ -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;
};
};
})
+4 -195
View File
@@ -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;
};
})
}
@@ -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=";
})
];
}
@@ -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;
};
})
@@ -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;
+9 -51
View File
@@ -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=";
}
+10
View File
@@ -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