From 54cbc47cc0c99387c896445fe55022653e725051 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 23 Apr 2016 14:57:03 -0400 Subject: [PATCH] net-im/bitlbee: rewrite SSL handling, non-root systemd fixes Gentoo bugs 544646, 472406, 470272, 466548. --- net-im/bitlbee/bitlbee-3.4.2-r1.ebuild | 186 +++++++++++++++++++++ net-im/bitlbee/bitlbee-9999.ebuild | 61 ++++--- .../files/bitlbee-service-user-bitlbee.patch | 10 ++ net-im/bitlbee/metadata.xml | 8 + 4 files changed, 234 insertions(+), 31 deletions(-) create mode 100644 net-im/bitlbee/bitlbee-3.4.2-r1.ebuild create mode 100644 net-im/bitlbee/files/bitlbee-service-user-bitlbee.patch diff --git a/net-im/bitlbee/bitlbee-3.4.2-r1.ebuild b/net-im/bitlbee/bitlbee-3.4.2-r1.ebuild new file mode 100644 index 0000000..62ab9c3 --- /dev/null +++ b/net-im/bitlbee/bitlbee-3.4.2-r1.ebuild @@ -0,0 +1,186 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 +PYTHON_COMPAT=( python2_7 ) + +inherit eutils multilib user python-single-r1 systemd + +if [[ ${PV} == "9999" ]]; then + EGIT_REPO_URI="https://github.com/bitlbee/bitlbee.git" + inherit git-r3 +else + SRC_URI="http://get.bitlbee.org/src/${P}.tar.gz" + KEYWORDS="~amd64 ~ppc ~ppc64 ~x86 ~x86-fbsd" +fi + +DESCRIPTION="irc to IM gateway that support multiple IM protocols" +HOMEPAGE="http://www.bitlbee.org/" + +LICENSE="GPL-2" +SLOT="0" +IUSE_PROTOCOLS="xmpp msn oscar purple skype twitter yahoo" +IUSE="debug +gnutls ipv6 libevent libressl nss otr +plugins selinux test xinetd + ${IUSE_PROTOCOLS}" + +COMMON_DEPEND=" + >=dev-libs/glib-2.16 + purple? ( net-im/pidgin ) + libevent? ( dev-libs/libevent:= ) + otr? ( >=net-libs/libotr-4 ) + gnutls? ( net-libs/gnutls:= ) + !gnutls? ( + nss? ( dev-libs/nss ) + !nss? ( + libressl? ( dev-libs/libressl:= ) + !libressl? ( dev-libs/openssl:0= ) + ) + ) + " +DEPEND="${COMMON_DEPEND} + dev-lang/python + virtual/pkgconfig + selinux? ( sec-policy/selinux-bitlbee ) + test? ( dev-libs/check )" + +RDEPEND="${COMMON_DEPEND} + virtual/logger + skype? ( + dev-python/skype4py[${PYTHON_USEDEP}] + net-im/skype + ) + xinetd? ( sys-apps/xinetd )" + +pkg_pretend() { + if [[ -z "${I_KNOW_WHAT_I_AM_DOING}" ]]; then + local chat_enabled + for flag in "${IUSE_PROTOCOLS}"; do + use $flag && chat_enabled=1 + done + if [[ -z "${chat_enabled}" ]]; then + die "Please enable at least one chat protocol." + fi + fi +} + +pkg_setup() { + use skype && python-single-r1_pkg_setup + + enewgroup bitlbee + enewuser bitlbee -1 -1 /var/lib/bitlbee bitlbee +} + +src_prepare() { + sed -i \ + -e "s@/usr/local/sbin/bitlbee@/usr/sbin/bitlbee@" \ + -e "s/nobody/bitlbee/" \ + -e "s/}/ disable = yes\n}/" \ + doc/bitlbee.xinetd || die "sed failed in xinetd" + + sed -i \ + -e "s@mozilla-nss@nss@g" \ + configure || die "sed failed in configure" + + use skype && python_fix_shebang protocols/skype/skyped.py + + [[ ${PV} != "9999" ]] && epatch "${FILESDIR}"/${PN}-3.2.1-configure.patch + epatch "${FILESDIR}"/${PN}-service-user-bitlbee.patch + epatch_user +} + +src_configure() { + # setup plugins, protocol, ipv6 and debug + myconf="--jabber=$(usex xmpp 1 0)" + for flag in debug ipv6 plugins ${IUSE_PROTOCOLS/xmpp/} ; do + myconf="${myconf} --${flag}=$(usex ${flag} 1 0)" + done + + # set otr + if use otr && use plugins ; then + myconf="${myconf} --otr=plugin" + else + if use otr ; then + ewarn "OTR support has been disabled automatically because it" + ewarn "requires the plugins USE flag." + fi + myconf="${myconf} --otr=0" + fi + + # setup ssl use flags + if use gnutls ; then + myconf="${myconf} --ssl=gnutls" + einfo "Using gnutls for SSL support" + else + ewarn "Only gnutls is officially supported by upstream." + if use nss ; then + myconf="${myconf} --ssl=nss" + einfo "Using nss for SSL support" + else + myconf="${myconf} --ssl=openssl" + einfo "Using openssl for SSL support" + fi + fi + + # set event handler + if use libevent ; then + myconf="${myconf} --events=libevent" + else + myconf="${myconf} --events=glib" + fi + + # NOTE: bitlbee's configure script is not an autotool creation, + # so that is why we don't use econf. + ./configure \ + --prefix=/usr --datadir=/usr/share/bitlbee \ + --etcdir=/etc/bitlbee --plugindir=/usr/$(get_libdir)/bitlbee \ + --systemdsystemunitdir=$(systemd_get_unitdir) \ + --doc=1 --strip=0 ${myconf} || die "econf failed" + + sed -i \ + -e "/^EFLAGS/s:=:&${LDFLAGS} :" \ + Makefile.settings || die "sed failed" +} + +src_install() { + emake install install-etc install-doc install-dev install-systemd DESTDIR="${D}" + + keepdir /var/lib/bitlbee + fperms 700 /var/lib/bitlbee + fowners bitlbee:bitlbee /var/lib/bitlbee + + dodoc doc/{AUTHORS,CHANGES,CREDITS,FAQ,README} + + if use skype ; then + newdoc protocols/skype/NEWS NEWS-skype + newdoc protocols/skype/README README-skype + fi + + if use xinetd ; then + insinto /etc/xinetd.d + newins doc/bitlbee.xinetd bitlbee + fi + + newinitd "${FILESDIR}"/bitlbee.initd-r1 bitlbee + newconfd "${FILESDIR}"/bitlbee.confd-r1 bitlbee + + exeinto /usr/share/bitlbee + doexe utils/{convert_purple.py,bitlbee-ctl.pl} +} + +pkg_postinst() { + chown -R bitlbee:bitlbee "${ROOT}"/var/lib/bitlbee + [[ -d "${ROOT}"/var/run/bitlbee ]] && + chown -R bitlbee:bitlbee "${ROOT}"/var/run/bitlbee + + if [[ -z ${REPLACING_VERSIONS} ]]; then + einfo + elog "The bitlbee init script will now attempt to stop all processes owned by the" + elog "bitlbee user, including per-client forks." + elog + elog "Tell the init script not to touch anything besides the main bitlbee process" + elog "by changing the BITLBEE_STOP_ALL variable in" + elog " /etc/conf.d/bitlbee" + einfo + fi +} diff --git a/net-im/bitlbee/bitlbee-9999.ebuild b/net-im/bitlbee/bitlbee-9999.ebuild index dceb0c2..62ab9c3 100644 --- a/net-im/bitlbee/bitlbee-9999.ebuild +++ b/net-im/bitlbee/bitlbee-9999.ebuild @@ -20,8 +20,9 @@ HOMEPAGE="http://www.bitlbee.org/" LICENSE="GPL-2" SLOT="0" -IUSE="debug gnutls ipv6 +xmpp libevent msn nss +oscar otr +plugins purple selinux - skype ssl test twitter +yahoo xinetd libressl" +IUSE_PROTOCOLS="xmpp msn oscar purple skype twitter yahoo" +IUSE="debug +gnutls ipv6 libevent libressl nss otr +plugins selinux test xinetd + ${IUSE_PROTOCOLS}" COMMON_DEPEND=" >=dev-libs/glib-2.16 @@ -31,7 +32,10 @@ COMMON_DEPEND=" gnutls? ( net-libs/gnutls:= ) !gnutls? ( nss? ( dev-libs/nss ) - !nss? ( ssl? ( !libressl? ( dev-libs/openssl:0= ) libressl? ( dev-libs/libressl:= ) ) ) + !nss? ( + libressl? ( dev-libs/libressl:= ) + !libressl? ( dev-libs/openssl:0= ) + ) ) " DEPEND="${COMMON_DEPEND} @@ -48,21 +52,19 @@ RDEPEND="${COMMON_DEPEND} ) xinetd? ( sys-apps/xinetd )" -REQUIRED_USE="|| ( purple xmpp msn oscar yahoo ) - msn? ( || ( gnutls nss ssl ) ) - xmpp? ( !nss )" - -pkg_setup() { - if use xmpp && ! use gnutls && ! use ssl ; then - einfo - elog "You have enabled support for Jabber but do not have SSL" - elog "support enabled. This *will* prevent bitlbee from being" - elog "able to connect to SSL enabled Jabber servers. If you need to" - elog "connect to Jabber over SSL, enable ONE of the following use" - elog "flags: gnutls or ssl" - einfo +pkg_pretend() { + if [[ -z "${I_KNOW_WHAT_I_AM_DOING}" ]]; then + local chat_enabled + for flag in "${IUSE_PROTOCOLS}"; do + use $flag && chat_enabled=1 + done + if [[ -z "${chat_enabled}" ]]; then + die "Please enable at least one chat protocol." + fi fi +} +pkg_setup() { use skype && python-single-r1_pkg_setup enewgroup bitlbee @@ -83,18 +85,15 @@ src_prepare() { use skype && python_fix_shebang protocols/skype/skyped.py [[ ${PV} != "9999" ]] && epatch "${FILESDIR}"/${PN}-3.2.1-configure.patch + epatch "${FILESDIR}"/${PN}-service-user-bitlbee.patch epatch_user } src_configure() { # setup plugins, protocol, ipv6 and debug - use xmpp && myconf="${myconf} --jabber=1" - for flag in debug ipv6 msn oscar plugins purple skype twitter yahoo ; do - if use ${flag} ; then - myconf="${myconf} --${flag}=1" - else - myconf="${myconf} --${flag}=0" - fi + myconf="--jabber=$(usex xmpp 1 0)" + for flag in debug ipv6 plugins ${IUSE_PROTOCOLS/xmpp/} ; do + myconf="${myconf} --${flag}=$(usex ${flag} 1 0)" done # set otr @@ -112,15 +111,15 @@ src_configure() { if use gnutls ; then myconf="${myconf} --ssl=gnutls" einfo "Using gnutls for SSL support" - elif use ssl ; then - myconf="${myconf} --ssl=openssl" - einfo "Using openssl for SSL support" - elif use nss ; then - myconf="${myconf} --ssl=nss" - einfo "Using nss for SSL support" else - myconf="${myconf} --ssl=bogus" - einfo "You will not have any encryption support enabled." + ewarn "Only gnutls is officially supported by upstream." + if use nss ; then + myconf="${myconf} --ssl=nss" + einfo "Using nss for SSL support" + else + myconf="${myconf} --ssl=openssl" + einfo "Using openssl for SSL support" + fi fi # set event handler diff --git a/net-im/bitlbee/files/bitlbee-service-user-bitlbee.patch b/net-im/bitlbee/files/bitlbee-service-user-bitlbee.patch new file mode 100644 index 0000000..07d58f4 --- /dev/null +++ b/net-im/bitlbee/files/bitlbee-service-user-bitlbee.patch @@ -0,0 +1,10 @@ +--- a/init/bitlbee.service.in ++++ b/init/bitlbee.service.in +@@ -4,6 +4,7 @@ + + [Service] + ExecStart=@sbindir@bitlbee -F -n ++User=bitlbee + + [Install] + WantedBy=multi-user.target diff --git a/net-im/bitlbee/metadata.xml b/net-im/bitlbee/metadata.xml index 88806b5..14d6116 100644 --- a/net-im/bitlbee/metadata.xml +++ b/net-im/bitlbee/metadata.xml @@ -2,6 +2,10 @@ + alex_y_xu@yahoo.ca + Alex Xu + + wired@gentoo.org Alex Alexander @@ -9,6 +13,10 @@ radhermit@gentoo.org Tim Harder + + proxy-maint@gentoo.org + Proxy Maintainers + Use libevent for event handling Use NSS for SSL support in MSN and Jabber -- 2.8.1