summaryrefslogtreecommitdiff
diff options
authorSam James <sam@gentoo.org>2025-10-02 01:24:46 +0100
committerSam James <sam@gentoo.org>2025-10-02 01:26:08 +0100
commit0b24653f60b608b70bb1a722900735d9119fd870 (patch)
treee6a6cdff21504c4beca9de6ce17af0046d20dcd2
parentdev-lang/php: drop 8.3.25, 8.4.12 (diff)
downloadgentoo-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.ebuild259
-rw-r--r--net-mail/dovecot/files/dovecot-2.4.1-trivial-auto-var-init-attrib.patch60
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) {
+