Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net-mail/dovecot: Fix linking with slibtool #26966

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
304 changes: 304 additions & 0 deletions net-mail/dovecot/dovecot-2.3.19.1-r2.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,304 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

LUA_COMPAT=( lua5-1 lua5-3 )
# do not add a ssl USE flag. ssl is mandatory
SSL_DEPS_SKIP=1
inherit autotools flag-o-matic lua-single ssl-cert systemd toolchain-funcs

MY_P="${P/_/.}"
#MY_S="${PN}-ce-${PV}"
major_minor="$(ver_cut 1-2)"
sieve_version="0.5.19"
if [[ ${PV} == *_rc* ]]; then
rc_dir="rc/"
else
rc_dir=""
fi
SRC_URI="https://dovecot.org/releases/${major_minor}/${rc_dir}${MY_P}.tar.gz
sieve? (
https://pigeonhole.dovecot.org/releases/${major_minor}/${rc_dir}${PN}-${major_minor}-pigeonhole-${sieve_version}.tar.gz
)
managesieve? (
https://pigeonhole.dovecot.org/releases/${major_minor}/${rc_dir}${PN}-${major_minor}-pigeonhole-${sieve_version}.tar.gz
) "
DESCRIPTION="An IMAP and POP3 server written with security primarily in mind"
HOMEPAGE="https://www.dovecot.org/"

SLOT="0"
LICENSE="LGPL-2.1 MIT"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"

IUSE_DOVECOT_AUTH="kerberos ldap lua mysql pam postgres sqlite"
IUSE_DOVECOT_COMPRESS="lz4 zstd"
IUSE_DOVECOT_OTHER="argon2 caps doc ipv6 lucene managesieve rpc
selinux sieve solr static-libs stemmer suid systemd tcpd textcat unwind"

IUSE="${IUSE_DOVECOT_AUTH} ${IUSE_DOVECOT_COMPRESS} ${IUSE_DOVECOT_OTHER}"

REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )"

DEPEND="
app-arch/bzip2
app-arch/xz-utils
dev-libs/icu:=
dev-libs/openssl:0=
sys-libs/zlib:=
virtual/libiconv
argon2? ( dev-libs/libsodium:= )
caps? ( sys-libs/libcap )
kerberos? ( virtual/krb5 )
ldap? ( net-nds/openldap:= )
lua? ( ${LUA_DEPS} )
lucene? ( >=dev-cpp/clucene-2.3 )
lz4? ( app-arch/lz4 )
mysql? ( dev-db/mysql-connector-c:0= )
pam? ( sys-libs/pam:= )
postgres? ( dev-db/postgresql:* )
rpc? ( net-libs/libtirpc:= net-libs/rpcsvc-proto )
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:= )
tcpd? ( sys-apps/tcp-wrappers )
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
"

S="${WORKDIR}/${MY_P}"

PATCHES=(
"${FILESDIR}/${PN}"-autoconf-lua-version-v2.patch
"${FILESDIR}/${PN}"-socket-name-too-long.patch
"${FILESDIR}/${P}"-slibtool.patch # 782631
"${FILESDIR}"/CVE-2022-30550.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
# bug 657108, 782631
#elibtoolize
eautoreconf

# Bug #727244
append-cflags -fasynchronous-unwind-tables
}

src_configure() {
local conf=""

if use postgres || use mysql || use sqlite; then
conf="${conf} --with-sql"
fi

# 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-rpath \
--with-bzlib \
--without-libbsd \
--with-lzma \
--with-icu \
--with-ssl \
--with-zlib \
$( use_with argon2 sodium ) \
$( use_with caps libcap ) \
$( use_with kerberos gssapi ) \
$( use_with lua ) \
$( use_with ldap ) \
$( use_with lucene ) \
$( 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 tcpd libwrap ) \
$( use_with textcat ) \
$( use_with unwind libunwind ) \
$( use_with zstd ) \
$( use_enable static-libs static ) \
${conf}

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
cd "../dovecot-${major_minor}-pigeonhole-${sieve_version}" || die "cd failed"
econf \
$( use_enable static-libs static ) \
--localstatedir="${EPREFIX}/var" \
--enable-shared \
--with-dovecot="${S}" \
$( use_with ldap ) \
$( use_with managesieve )
fi
}

src_compile() {
default
if use sieve || use managesieve; then
cd "../dovecot-${major_minor}-pigeonhole-${sieve_version}" || die "cd failed"
emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}"
fi
}

src_test() {
default
if use sieve || use managesieve; then
cd "../dovecot-${major_minor}-pigeonhole-${sieve_version}" || die "cd failed"
default
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

rm -rf "${ED}"/usr/share/doc/dovecot

dodoc AUTHORS NEWS README TODO
dodoc doc/*.{txt,cnf,xml,sh}
docinto example-config
dodoc doc/example-config/*.{conf,ext}
docinto example-config/conf.d
dodoc doc/example-config/conf.d/*.{conf,ext}
docinto wiki
dodoc doc/wiki/*
doman doc/man/*.{1,7}

# Create the dovecot.conf file from the dovecot-example.conf file that
# the dovecot folks nicely left for us....
local conf="${ED}/etc/dovecot/dovecot.conf"
local confd="${ED}/etc/dovecot/conf.d"

insinto /etc/dovecot
doins doc/example-config/*.{conf,ext}
insinto /etc/dovecot/conf.d
doins doc/example-config/conf.d/*.{conf,ext}
fperms 0600 /etc/dovecot/dovecot-{ldap,sql}.conf.ext
rm -f "${confd}/../README"

# .maildir is the Gentoo default
local mail_location="maildir:~/.maildir"
sed -i -e \
"s|#mail_location =|mail_location = ${mail_location}|" \
"${confd}/10-mail.conf" \
|| die "failed to update mail location settings in 10-mail.conf"

# We're using pam files (imap and pop3) provided by mailbase
if use pam; then
sed -i -e '/driver = pam/,/^[ \t]*}/ s|#args = dovecot|args = "\*"|' \
"${confd}/auth-system.conf.ext" \
|| die "failed to update PAM settings in auth-system.conf.ext"
# mailbase does not provide a sieve pam file
use managesieve && dosym imap /etc/pam.d/sieve
sed -i -e \
's/#!include auth-system.conf.ext/!include auth-system.conf.ext/' \
"${confd}/10-auth.conf" \
|| die "failed to update PAM settings in 10-auth.conf"
fi

# Disable ipv6 if necessary
if ! use ipv6; then
sed -i -e 's/^#listen = \*, ::/listen = \*/g' "${conf}" \
|| die "failed to update listen settings in dovecot.conf"
fi

# Update ssl cert locations
sed -i -e 's:^#ssl = yes:ssl = yes:' "${confd}/10-ssl.conf" \
|| die "ssl conf failed"
sed -i -e 's:^ssl_cert =.*:ssl_cert = </etc/ssl/dovecot/server.pem:' \
-e 's:^ssl_key =.*:ssl_key = </etc/ssl/dovecot/server.key:' \
"${confd}/10-ssl.conf" || die "failed to update SSL settings in 10-ssl.conf"

# Install SQL configuration
if use mysql || use postgres; then
sed -i -e \
's/#!include auth-sql.conf.ext/!include auth-sql.conf.ext/' \
"${confd}/10-auth.conf" || die "failed to update SQL settings in \
10-auth.conf"
fi

# Install LDAP configuration
if use ldap; then
sed -i -e \
's/#!include auth-ldap.conf.ext/!include auth-ldap.conf.ext/' \
"${confd}/10-auth.conf" \
|| die "failed to update ldap settings in 10-auth.conf"
fi

if use sieve || use managesieve; then
cd "../dovecot-${major_minor}-pigeonhole-${sieve_version}" || die "cd failed"
emake DESTDIR="${ED}" install
sed -i -e \
's/^[[:space:]]*#mail_plugins = $mail_plugins/mail_plugins = sieve/' "${confd}/15-lda.conf" \
|| die "failed to update sieve settings in 15-lda.conf"
rm -rf "${ED}"/usr/share/doc/dovecot
docinto example-config/conf.d
dodoc doc/example-config/conf.d/*.conf
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
docinto sieve/rfc
dodoc doc/rfc/*.txt
docinto sieve/devel
dodoc doc/devel/DESIGN
docinto plugins
dodoc doc/plugins/*.txt
docinto extensions
dodoc doc/extensions/*.txt
docinto locations
dodoc doc/locations/*.txt
doman doc/man/*.{1,7}
fi

use static-libs || find "${ED}"/usr/lib* -name '*.la' -delete
}

pkg_postinst() {
# 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/ssl/dovecot/server
fi
}
65 changes: 65 additions & 0 deletions net-mail/dovecot/files/dovecot-2.3.19.1-slibtool.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
Upstream-commit: https://github.com/dovecot/core/commit/d5f5cd32bafc18a28a7edbe1dbe559f8abe55323

From d5f5cd32bafc18a28a7edbe1dbe559f8abe55323 Mon Sep 17 00:00:00 2001
From: Timo Sirainen <timo.sirainen@open-xchange.com>
Date: Mon, 25 Jul 2022 19:47:34 +0300
Subject: [PATCH] lib-index: Makefile.am - Fix double-linking of
mail-index-util.o

This fixes linking with slibtool.
---
src/lib-index/Makefile.am | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/lib-index/Makefile.am b/src/lib-index/Makefile.am
index f203201bf7..a4af01715b 100644
--- a/src/lib-index/Makefile.am
+++ b/src/lib-index/Makefile.am
@@ -79,10 +79,13 @@ test_programs = \
noinst_PROGRAMS = $(test_programs)

test_libs = \
- mail-index-util.lo \
../lib-test/libtest.la \
../lib/liblib.la

+test_minimal_libs = \
+ mail-index-util.lo \
+ $(test_libs)
+
test_deps = $(noinst_LTLIBRARIES) $(test_libs)

test_mail_cache_SOURCES = test-mail-cache-common.c test-mail-cache.c
@@ -114,19 +117,19 @@ test_mail_index_sync_ext_LDADD = $(noinst_LTLIBRARIES) $(test_libs)
test_mail_index_sync_ext_DEPENDENCIES = $(test_deps)

test_mail_index_transaction_finish_SOURCES = test-mail-index-transaction-finish.c
-test_mail_index_transaction_finish_LDADD = mail-index-transaction-finish.lo $(test_libs)
+test_mail_index_transaction_finish_LDADD = mail-index-transaction-finish.lo $(test_minimal_libs)
test_mail_index_transaction_finish_DEPENDENCIES = $(test_deps)

test_mail_index_transaction_update_SOURCES = test-mail-index-transaction-update.c
-test_mail_index_transaction_update_LDADD = mail-index-transaction-update.lo $(test_libs)
+test_mail_index_transaction_update_LDADD = mail-index-transaction-update.lo $(test_minimal_libs)
test_mail_index_transaction_update_DEPENDENCIES = $(test_deps)

test_mail_index_write_SOURCES = test-mail-index-write.c
-test_mail_index_write_LDADD = mail-index-write.lo $(test_libs)
+test_mail_index_write_LDADD = mail-index-write.lo $(test_minimal_libs)
test_mail_index_write_DEPENDENCIES = $(test_deps)

test_mail_transaction_log_append_SOURCES = test-mail-transaction-log-append.c
-test_mail_transaction_log_append_LDADD = mail-transaction-log-append.lo $(test_libs)
+test_mail_transaction_log_append_LDADD = mail-transaction-log-append.lo $(test_minimal_libs)
test_mail_transaction_log_append_DEPENDENCIES = $(test_deps)

test_mail_transaction_log_file_SOURCES = test-mail-transaction-log-file.c
@@ -134,7 +137,7 @@ test_mail_transaction_log_file_LDADD = $(noinst_LTLIBRARIES) $(test_libs)
test_mail_transaction_log_file_DEPENDENCIES = $(test_deps)

test_mail_transaction_log_view_SOURCES = test-mail-transaction-log-view.c
-test_mail_transaction_log_view_LDADD = mail-transaction-log-view.lo $(test_libs)
+test_mail_transaction_log_view_LDADD = mail-transaction-log-view.lo $(test_minimal_libs)
test_mail_transaction_log_view_DEPENDENCIES = $(test_deps)

check-local: