diff options
| author | 2025-10-02 01:24:46 +0100 | |
|---|---|---|
| committer | 2025-10-02 01:26:08 +0100 | |
| commit | 0b24653f60b608b70bb1a722900735d9119fd870 (patch) | |
| tree | e6a6cdff21504c4beca9de6ce17af0046d20dcd2 | |
| parent | dev-lang/php: drop 8.3.25, 8.4.12 (diff) | |
| download | gentoo-0b24653f60b608b70bb1a722900735d9119fd870.tar.gz gentoo-0b24653f60b608b70bb1a722900735d9119fd870.tar.bz2 gentoo-0b24653f60b608b70bb1a722900735d9119fd870.zip | |
net-mail/dovecot: fix tests w/ -ftrivial-auto-var-init=zero; fix USE=lua test deps
* Fix tests with -ftrivial-auto-var-init=zero. The issue could show up
without this flag too.
* Fix USE=lua test deps (needs dev-lua/luajson). Needs rekeywording
for that so bundled it with the other fix above.
Bug: https://bugs.gentoo.org/963643
Closes: https://bugs.gentoo.org/959838
Signed-off-by: Sam James <sam@gentoo.org>
| -rw-r--r-- | net-mail/dovecot/dovecot-2.4.1-r4.ebuild | 259 | ||||
| -rw-r--r-- | net-mail/dovecot/files/dovecot-2.4.1-trivial-auto-var-init-attrib.patch | 60 |
2 files changed, 319 insertions, 0 deletions
diff --git a/net-mail/dovecot/dovecot-2.4.1-r4.ebuild b/net-mail/dovecot/dovecot-2.4.1-r4.ebuild new file mode 100644 index 000000000000..6febeb6ba59d --- /dev/null +++ b/net-mail/dovecot/dovecot-2.4.1-r4.ebuild @@ -0,0 +1,259 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LUA_COMPAT=( lua5-1 lua5-{3..4} ) +# do not add a ssl USE flag. ssl is mandatory +SSL_DEPS_SKIP=1 +inherit autotools eapi9-ver flag-o-matic lua-single ssl-cert systemd toolchain-funcs + +MY_P="${P/_/.}-4" +MY_PV="${PV}-4" +major_minor="$(ver_cut 1-2)" + +DESCRIPTION="An IMAP and POP3 server written with security primarily in mind" +HOMEPAGE="https://www.dovecot.org/" +SRC_URI="https://www.dovecot.org/releases/${major_minor}/${MY_P}.tar.gz \ + -> ${P}.tar.gz + sieve? ( + https://pigeonhole.dovecot.org/releases/${major_minor}/${PN}-pigeonhole-${MY_PV}.tar.gz \ + -> ${PN}-pigeonhole-${PV}.tar.gz + ) + managesieve? ( + https://pigeonhole.dovecot.org/releases/${major_minor}/${PN}-pigeonhole-${MY_PV}.tar.gz \ + -> ${PN}-pigeonhole-${PV}.tar.gz + ) " +S="${WORKDIR}/${MY_P}" +PIEGONHOLE_S="../dovecot-pigeonhole-${MY_PV}" +LICENSE="LGPL-2.1 MIT" +SLOT="0/${PV}" +KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86" + +IUSE_DOVECOT_AUTH_DICT="cdb kerberos ldap lua mysql pam postgres sqlite" +IUSE_DOVECOT_COMPRESS="lz4 zstd" +IUSE_DOVECOT_FTS="solr stemmer textcat xapian" +IUSE_DOVECOT_OTHER="argon2 managesieve selinux sieve static-libs suid systemd test unwind" + +IUSE="${IUSE_DOVECOT_AUTH_DICT} ${IUSE_DOVECOT_COMPRESS} ${IUSE_DOVECOT_FTS} ${IUSE_DOVECOT_OTHER}" + +REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )" +RESTRICT="!test? ( test )" + +DEPEND=" + app-arch/bzip2 + dev-libs/icu:= + dev-libs/openssl:0= + net-libs/libtirpc:= + net-libs/rpcsvc-proto + sys-libs/libcap + sys-libs/zlib:= + virtual/libiconv + argon2? ( dev-libs/libsodium:= ) + cdb? ( dev-db/tinycdb ) + kerberos? ( virtual/krb5 ) + ldap? ( net-nds/openldap:= ) + lua? ( ${LUA_DEPS} ) + xapian? ( dev-libs/xapian:= ) + lz4? ( app-arch/lz4 ) + mysql? ( dev-db/mysql-connector-c:0= ) + pam? ( sys-libs/pam:= ) + postgres? ( dev-db/postgresql:* ) + selinux? ( sec-policy/selinux-dovecot ) + solr? ( net-misc/curl dev-libs/expat ) + sqlite? ( dev-db/sqlite:* ) + stemmer? ( dev-libs/snowball-stemmer:= ) + suid? ( acct-group/mail ) + systemd? ( sys-apps/systemd:= ) + textcat? ( app-text/libexttextcat ) + unwind? ( sys-libs/libunwind:= ) + zstd? ( app-arch/zstd:= ) + virtual/libcrypt:= + " + +RDEPEND=" + ${DEPEND} + acct-group/dovecot + acct-group/dovenull + acct-user/dovecot + acct-user/dovenull + net-mail/mailbase[pam?] + " + +BDEPEND="virtual/pkgconfig + test? ( + lua? ( + $(lua_gen_cond_dep ' + dev-lua/luajson[${LUA_USEDEP}] + ') + ) + ) + " + +PATCHES=( + "${FILESDIR}/${PN}-autoconf-lua-version-v3.patch" + "${FILESDIR}/${PN}-2.4.1-gssapi-regression.patch" + "${FILESDIR}/${PN}-2.4.1-fix-hardened-crash.patch" + "${FILESDIR}/${PN}-2.4.1-fix-musl-build.patch" + "${FILESDIR}/${PN}-2.4.1-crash-on-arm.patch" + "${FILESDIR}/${PN}-2.4.1-trivial-auto-var-init-attrib.patch" +) + +pkg_setup() { + use lua && lua-single_pkg_setup + if use managesieve && ! use sieve; then + ewarn "managesieve USE flag selected but sieve USE flag unselected" + ewarn "sieve USE flag will be turned on" + fi +} + +src_prepare() { + default + if use sieve || use managesieve; then + pushd "${PIEGONHOLE_S}" > /dev/null || die + eapply "${FILESDIR}/${PN}-2.4.1-fix-ldap-build.patch" + popd > /dev/null || die + fi + + # rename default cert files + sed -i -e "s:ssl-cert.pem:server.pem:" \ + -e "s:ssl-key.pem:server.key:" \ + doc/dovecot.conf.in || die "sed failed" + + # bug 657108, 782631 + #elibtoolize + eautoreconf + + # Bug #727244 + append-cflags -fasynchronous-unwind-tables +} + +src_configure() { + # --disable-hardening because our toolchain already defaults to + # these bits on, and it actually regresses the default _FORTIFY_SOURCE + # level for hardened at least from 3 to 2. + # + # turn valgrind tests off. Bug #340791 + VALGRIND=no \ + LUAPC="${ELUA}" \ + systemdsystemunitdir="$(systemd_get_systemunitdir)" \ + econf \ + --with-rundir="${EPREFIX}/run/dovecot" \ + --with-statedir="${EPREFIX}/var/lib/dovecot" \ + --with-moduledir="${EPREFIX}/usr/$(get_libdir)/dovecot" \ + --disable-hardening \ + --disable-rpath \ + --with-bzlib \ + --without-libbsd \ + --with-libcap \ + --with-icu \ + --enable-experimental-mail-utf8 \ + $( use_with argon2 sodium ) \ + $( use_with cdb) \ + $( use_with kerberos gssapi ) \ + $( use_with lua ) \ + $( use_with ldap ) \ + $( use_with xapian flatcurve ) \ + $( use_with lz4 ) \ + $( use_with mysql ) \ + $( use_with pam ) \ + $( use_with postgres pgsql ) \ + $( use_with sqlite ) \ + $( use_with solr ) \ + $( use_with stemmer ) \ + $( use_with systemd ) \ + $( use_with textcat ) \ + $( use_with unwind libunwind ) \ + $( use_with zstd ) \ + $( use_enable static-libs static ) + + if use sieve || use managesieve; then + # The sieve plugin needs this file to be build to determine the plugin + # directory and the list of libraries to link to + emake dovecot-config + pushd "${PIEGONHOLE_S}" > /dev/null || die + econf \ + $( use_enable static-libs static ) \ + --localstatedir="${EPREFIX}/var" \ + --enable-shared \ + --disable-hardening \ + --with-dovecot="${S}" \ + $( use_with ldap ) \ + $( use_with managesieve ) + popd > /dev/null || die + fi +} + +src_compile() { + default + if use sieve || use managesieve; then + pushd "${PIEGONHOLE_S}" > /dev/null || die + emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" + popd > /dev/null || die + fi +} + +src_test() { + # bug #340791 and bug #807178 + local -x NOVALGRIND=true + + default + if use sieve || use managesieve; then + pushd "${PIEGONHOLE_S}" > /dev/null || die + default + popd > /dev/null || die + fi +} + +src_install() { + default + + if use suid; then + einfo "Changing perms to allow deliver to be suided" + fowners root:mail "/usr/libexec/dovecot/dovecot-lda" + fperms 4750 "/usr/libexec/dovecot/dovecot-lda" + fi + + newinitd "${FILESDIR}"/dovecot.init-r6 dovecot + + use pam && dosym imap /etc/pam.d/dovecot + + insinto /etc/dovecot/conf.d + doins "${FILESDIR}/50-misc.conf" + + dodoc AUTHORS NEWS README.md TODO + docinto stopwords + dodoc src/lib-language/stopwords/stopwords*.txt + + if use sieve || use managesieve; then + pushd "${PIEGONHOLE_S}" > /dev/null || die + emake DESTDIR="${ED}" install + + newdoc README README.pigeonhole + insinto /etc/dovecot/conf.d + doins doc/example-config/conf.d/90-sieve{,-extprograms}.conf + use managesieve && doins doc/example-config/conf.d/20-managesieve.conf + popd > /dev/null || die + fi + + rm -r "${ED}"/usr/share/dovecot + use static-libs || find "${ED}"/usr/lib* -name '*.la' -delete +} + +pkg_postinst() { + if ver_replacing -lt 2.4 ; then + # This is an upgrade which requires user review + ewarn "Dovecot-2.4.x has new settings and WILL NOT work" + ewarn "unless the configuration files are updated." + ewarn "Please read the migration guide at:" + ewarn " https://doc.dovecot.org/2.4.1/installation/upgrade/2.3-to-2.4.html" + fi + + # Let's not make a new certificate if we already have one + if ! [[ -e "${ROOT}"/etc/ssl/dovecot/server.pem && \ + -e "${ROOT}"/etc/ssl/dovecot/server.key ]]; then + einfo "Creating SSL certificate" + SSL_ORGANIZATION="${SSL_ORGANIZATION:-Dovecot IMAP Server}" + install_cert /etc/dovecot/server + fi +} diff --git a/net-mail/dovecot/files/dovecot-2.4.1-trivial-auto-var-init-attrib.patch b/net-mail/dovecot/files/dovecot-2.4.1-trivial-auto-var-init-attrib.patch new file mode 100644 index 000000000000..3f07e39bc5ee --- /dev/null +++ b/net-mail/dovecot/files/dovecot-2.4.1-trivial-auto-var-init-attrib.patch @@ -0,0 +1,60 @@ +https://bugs.gentoo.org/959838 +https://github.com/dovecot/core/pull/248 +https://github.com/dovecot/core/commit/a60ada751a827f73c3f0d0c0059f340918e981ad + +From a60ada751a827f73c3f0d0c0059f340918e981ad Mon Sep 17 00:00:00 2001 +From: Sam James <sam@gentoo.org> +Date: Mon, 30 Jun 2025 04:51:19 +0100 +Subject: [PATCH] lib-json: drop invalid ATTR_PURE + +Several functions in json-types.h mutate one of their arguments (usually *size_r) +and hence aren't eligible for __attribute__((pure)) which promises that +the function has no side-effects. + +This manifests as a test failure in test-json-istream.c when building +Dovecot with -ftrivial-auto-var-init=zero (or =pattern). +--- + src/lib-json/json-types.h | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/lib-json/json-types.h b/src/lib-json/json-types.h +index caa27193c3c..6ce966883c7 100644 +--- a/src/lib-json/json-types.h ++++ b/src/lib-json/json-types.h +@@ -176,7 +176,7 @@ json_value_as_str(const struct json_value *jvalue) + } + return jvalue->content.str; + } +-static inline ATTR_PURE const unsigned char * ++static inline const unsigned char * + json_value_get_data(const struct json_value *jvalue, size_t *size_r) + { + switch (jvalue->content_type) { +@@ -192,7 +192,7 @@ json_value_get_data(const struct json_value *jvalue, size_t *size_r) + i_unreached(); + } + +-static inline ATTR_PURE int ++static inline int + json_value_get_stream(const struct json_value *jvalue, + struct istream **stream_r) + { +@@ -314,7 +314,7 @@ json_node_as_str(const struct json_node *jnode) + return json_value_as_str(&jnode->value); + } + +-static inline ATTR_PURE const unsigned char * ++static inline const unsigned char * + json_node_get_data(const struct json_node *jnode, size_t *size_r) + { + const char *literal; +@@ -497,7 +497,7 @@ json_node_is_boolean(const struct json_node *jnode) + return FALSE; + } + +-static inline ATTR_PURE int ++static inline int + json_node_get_boolean(const struct json_node *jnode, bool *bool_r) + { + switch (jnode->type) { + |
