# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-fs/cifs-utils/cifs-utils-6.1-r1.ebuild,v 1.15 2015/02/20 13:08:25 armin76 Exp $

EAPI=5

inherit eutils linux-info multilib

DESCRIPTION="Tools for Managing Linux CIFS Client Filesystems"
HOMEPAGE="http://wiki.samba.org/index.php/LinuxCIFS_utils"
SRC_URI="ftp://ftp.samba.org/pub/linux-cifs/${PN}/${P}.tar.bz2"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="*"
IUSE="+acl +ads +caps +caps-ng creds"

DEPEND="!net-fs/mount-cifs
	!<net-fs/samba-3.6_rc1
	ads? (
		sys-apps/keyutils
		sys-libs/talloc
		virtual/krb5
	)
	caps? ( !caps-ng? ( sys-libs/libcap ) )
	caps? ( caps-ng? ( sys-libs/libcap-ng ) )
	creds? ( sys-apps/keyutils )"
PDEPEND="${DEPEND}
	acl? ( || (
		=net-fs/samba-3.6*[winbind]
		>=net-fs/samba-4.0.0_alpha1
	) )
"

REQUIRED_USE="acl? ( ads )"

DOCS="doc/linux-cifs-client-guide.odt"

pkg_setup() {
	linux-info_pkg_setup

	if ! linux_config_exists || ! linux_chkconfig_present CIFS; then
		ewarn "You must enable CIFS support in your kernel config, "
		ewarn "to be able to mount samba shares. You can find it at"
		ewarn
		ewarn "  File systems"
		ewarn "	Network File Systems"
		ewarn "			CIFS support"
		ewarn
		ewarn "and recompile your kernel ..."
	fi
}

src_prepare() {
	# Do not rely on hardcoded path to systemd-ask-password, bug #478538
	epatch "${FILESDIR}/${P}-hardcoded-path.patch"
}

src_configure() {
	ROOTSBINDIR="${EPREFIX}"/sbin \
	econf \
		$(use_enable acl cifsacl cifsidmap) \
		$(use_enable ads cifsupcall) \
		$(use caps && use_with !caps-ng libcap || echo --without-libcap) \
		$(use caps && use_with caps-ng libcap-ng || echo --without-libcap-ng) \
		$(use_enable creds cifscreds)
}

src_install() {
	default

	# remove empty directories
	find "${ED}" -type d -print0 | xargs --null rmdir \
		--ignore-fail-on-non-empty &>/dev/null

	if use acl ; then
		dodir /etc/cifs-utils
		dosym /usr/$(get_libdir)/cifs-utils/idmapwb.so \
			/etc/cifs-utils/idmap-plugin
		dodir /etc/request-key.d
		echo 'create cifs.idmap * * /usr/sbin/cifs.idmap %k' \
			> "${ED}/etc/request-key.d/cifs.idmap.conf"
	fi

	if use ads ; then
		dodir /etc/request-key.d
		echo 'create dns_resolver * * /usr/sbin/cifs.upcall %k' \
			> "${ED}/etc/request-key.d/cifs.upcall.conf"
	fi
}

pkg_postinst() {
	# Inform about set-user-ID bit of mount.cifs
	ewarn "setuid use flag was dropped due to multiple security implications"
	ewarn "such as CVE-2009-2948, CVE-2011-3585 and CVE-2012-1586"
	ewarn "You are free to set setuid flags by yourself"

	# Inform about upcall usage
	if use acl ; then
		einfo "The cifs.idmap utility has been enabled by creating the"
		einfo "configuration file /etc/request-key.d/cifs.idmap.conf"
		einfo "This enables you to get and set CIFS acls."
	fi

	if use ads ; then
		einfo "The cifs.upcall utility has been enabled by creating the"
		einfo "configuration file /etc/request-key.d/cifs.upcall.conf"
		einfo "This enables you to mount DFS shares."
	fi
}
