# Contributor: Ɓukasz Jendrysik <scadu@yandex.com>
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Leonardo Arena <rnalrd@alpinelinux.org>
pkgname=freeradius
pkgver=2.2.6
pkgrel=1
pkgdesc="RADIUS (Remote Authentication Dial-In User Service) server"
url="http://freeradius.org/"
arch="all"
license="GPL"
depends="freeradius-radclient freeradius-lib"
makedepends="openssl-dev mariadb-dev postgresql-dev gdbm-dev readline-dev
	bash libtool autoconf automake perl-dev python-dev openldap-dev
	unixodbc-dev linux-pam-dev sqlite-dev linux-headers"
pkggroups="radius"
pkgusers="radius"
install="freeradius.pre-install"
subpackages="$pkgname-doc $pkgname-dev $pkgname-dbg $pkgname-ldap $pkgname-lib
	$pkgname-mssql $pkgname-mysql $pkgname-oracle $pkgname-perl
	$pkgname-postgresql $pkgname-python $pkgname-radclient $pkgname-sqlite
	$pkgname-unixodbc $pkgname-pam $pkgname-webif $pkgname-webif-doc"
source="ftp://ftp.freeradius.org/pub/freeradius/$pkgname-server-$pkgver.tar.gz
	0001-Use-threadsafe-wrapper-for-getpwnam-getgrnam.patch
	0001-use-threadsafe-rad_getgrnam.patch
	fix-tls-test.patch
	freeradius.confd
	freeradius.initd
	"

_builddir="$srcdir"/$pkgname-server-$pkgver

prepare() {
	cd "$_builddir"
        for i in $source; do
                case $i in
                *.patch)
                        msg "Applying $i"
                        patch -p1 -i "$srcdir"/$i || return 1
                        ;;
                esac
        done
	update_config_sub || return 1

	# we dont have libnsl
	sed -i 's/nsl, //g' configure.in || return 1

	# Fix compilation with heimdal >= 1.3.1
	sed -i 's/ -DKRB5_DEPRECATED//' src/modules/rlm_krb5/Makefile.in \
		|| return 1

	# Fix default config
	sed -i 's%run_dir = .*%run_dir = \$\{localstatedir\}/run/radius%' \
		raddb/radiusd.conf.in || return 1
	# disable directive that pulls in freeradius-mysql package
	sed -i 's%$INCLUDE ${confdir}/sql/mysql/ippool-dhcp.conf%#$INCLUDE ${confdir}/sql/mysql/ippool-dhcp.conf%' \
		raddb/modules/dhcp_sqlippool || return 1

	rm -f libtool.m4
	libtoolize --force -c || return 1
	aclocal && ./autogen.sh || return 1
}

build() {
	cd "$_builddir"
	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--mandir=/usr/share/man \
		--infodir=/usr/share/info \
		--localstatedir=/var \
		--libdir=/usr/lib/freeradius \
		--disable-static \
		--enable-shared \
		--disable-ltdl-install \
		--with-system-libtool \
		--with-system-libltdl \
		--with-udpfromto \
		--with-experimental-modules \
                --with-rlm_sql_sqlite \
		--without-rlm_sql_oracle \
		--without-rlm_sql_iodbc \
		--without-rlm_sql_firebird \
		--without-rlm_sql_db2 \
		--without-rlm_ruby \
		--without-rlm_rediswho \
		--without-rlm_redis \
		--without-rlm_krb5 \
		|| return 1

	# * workaround parallel build issue
	# * add -lssl to fix:
	#   radiusd: symbol 'SSL_set_ex_data': can't resolve symbol in lib
	#   '/usr/lib/freeradius/libfreeradius-eap-2.1.10.so'.
	make LDFLAGS="$LDFLAGS -lssl" LIBTOOL="$PWD/libtool" || return 1
}

package() {
	cd "$_builddir"
	install -d -m0750 -o root -g radius "$pkgdir"/etc/raddb
	install -d -m0750 -o radius -g radius "$pkgdir"/var/run/radius
	install -d -m0750 -o radius -g radius "$pkgdir"/var/log/radius
	install -d -m0750 -o radius -g radius "$pkgdir"/var/log/radius/radacct

	make -j1 R="$pkgdir" LIBTOOL="$PWD/libtool" install
	chown -R root:radius "$pkgdir"/etc/raddb/*
	rm -f "$pkgdir/usr/sbin/rc.radiusd"
	install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/radiusd
	install -m644 -D "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/radiusd
	install -m644 -D scripts/logrotate.freeradius \
		"$pkgdir"/etc/logrotate.d/$pkgname
	find $pkgdir -iname *.la -delete
}

ldap() {
	depends="freeradius"
	mkdir -p $subpkgdir/etc/raddb
	mv $pkgdir/etc/raddb/ldap.attrmap $subpkgdir/etc/raddb || return 1
	mkdir -p $subpkgdir/etc/raddb/modules
	mv $pkgdir/etc/raddb/modules/ldap $subpkgdir/etc/raddb/modules \
		|| return 1
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_ldap* $subpkgdir/usr/lib/freeradius \
		|| return 1
}

lib() {
	replaces="freeradius"
	depends=""
	mkdir -p $subpkgdir/usr/lib/freeradius $subpkgdir/etc/raddb \
	 $subpkgdir/usr/share || return 1
	mv $pkgdir/usr/lib/freeradius/libfreeradius-*.so \
	 $subpkgdir/usr/lib/freeradius || return 1
	mv $pkgdir/etc/raddb/dictionary $subpkgdir/etc/raddb/dictionary \
		|| return 1
	mv $pkgdir/usr/share/freeradius $subpkgdir/usr/share/freeradius \
		|| return 1
}

mysql() {
	depends="freeradius"
	mkdir -p $subpkgdir/etc/raddb/sql
	mv $pkgdir/etc/raddb/sql/mysql $subpkgdir/etc/raddb/sql || return 1
	mv $pkgdir/etc/raddb/sql/ndb $subpkgdir/etc/raddb/sql || return 1
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_sql_mysql* \
		$subpkgdir/usr/lib/freeradius || return 1
}

mssql() {
	depends="freeradius"
	arch="noarch"
	mkdir -p $subpkgdir/etc/raddb/sql
	mv $pkgdir/etc/raddb/sql/mssql $subpkgdir/etc/raddb/sql || return 1
}

oracle() {
	depends="freeradius"
	arch="noarch"
	mkdir -p $subpkgdir/etc/raddb/sql
	mv $pkgdir/etc/raddb/sql/oracle $subpkgdir/etc/raddb/sql || return 1
}

perl() {
	depends="freeradius perl"
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_perl* $subpkgdir/usr/lib/freeradius \
		|| return 1
	mkdir -p $subpkgdir/usr/bin
	mv $pkgdir/usr/sbin/checkrad $subpkgdir/usr/bin/checkrad || return 1
	mkdir -p $subpkgdir/etc/raddb/modules
	mv $pkgdir/etc/raddb/modules/perl $subpkgdir/etc/raddb/modules/perl \
		|| return 1
}

postgresql() {
	depends="freeradius"
	mkdir -p $subpkgdir/etc/raddb/sql
	mv $pkgdir/etc/raddb/sql/postgresql $subpkgdir/etc/raddb/sql || return 1
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_sql_postgresql* \
		$subpkgdir/usr/lib/freeradius || return 1
}

python() {
	depends="freeradius python"
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_python* \
		$subpkgdir/usr/lib/freeradius || return 1
}

radclient() {
	depends=""
	mkdir -p $subpkgdir/usr/bin
	mv $pkgdir/usr/bin/radclient $subpkgdir/usr/bin/radclient || return 1
}

sqlite() {
	depends="freeradius"
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_sql_sqlite* \
		$subpkgdir/usr/lib/freeradius || return 1
}

unixodbc() {
	depends="freeradius"
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_sql_unixodbc* \
		$subpkgdir/usr/lib/freeradius || return 1
}

pam() {
	depends="freeradius"
	mkdir -p $subpkgdir/usr/lib/freeradius
	mv $pkgdir/usr/lib/freeradius/rlm_pam* $subpkgdir/usr/lib/freeradius \
		|| return 1
}

webif() {
	depends="php"
	pkgdesc="Dialupadmin interface for FreeRADIUS"
	arch="noarch"
	mkdir -p $subpkgdir/usr/share/webapps/dialupadmin
	mkdir -p $subpkgdir/usr/share/doc/freeradius/dialupadmin
	mkdir -p $subpkgdir/etc/raddb/dialupadmin
	for dir in bin htdocs html lib sql;
	do
		mv $_builddir/dialup_admin/$dir \
		 $subpkgdir/usr/share/webapps/dialupadmin || return 1
	done
	mkdir -p $subpkgdir-doc/usr/share/doc/freeradius/dialupadmin
	mv $_builddir/dialup_admin/doc/* \
	 $subpkgdir-doc/usr/share/doc/freeradius/dialupadmin || return 1
	mv $_builddir/dialup_admin/README \
	 $subpkgdir-doc/usr/share/doc/freeradius/dialupadmin || return 1
	mv $_builddir/dialup_admin/conf/* $subpkgdir/etc/raddb/dialupadmin \
		|| return 1
	for file in $(ls $subpkgdir/usr/share/webapps/dialupadmin/bin)
	do
		sed -i "s|/usr/local/dialup_admin/conf|/etc/raddb/dialupadmin|g" \
		 $subpkgdir/usr/share/webapps/dialupadmin/bin/$file
		sed -i "s|/data/local/dialupadmin/conf|/etc/raddb/dialupadmin|g" \
		 $subpkgdir/usr/share/webapps/dialupadmin/bin/$file
	done
}

md5sums="3d1af22fccef74dbc06785ab1abdfd1f  freeradius-server-2.2.6.tar.gz
f28735060b63d88875783817bcd95586  0001-Use-threadsafe-wrapper-for-getpwnam-getgrnam.patch
aa00c3ed02b53021113b2e145d312ee4  0001-use-threadsafe-rad_getgrnam.patch
b6bcdba16c65503be4265126cf4d2eee  fix-tls-test.patch
fc6693f3df5a0694610110287a28568a  freeradius.confd
a623d0ad09b7cef0796be82c51086536  freeradius.initd"
sha256sums="f0941f4757ace0a46b9dec11245c9e5b3addbb93a45141179638e3687b56be13  freeradius-server-2.2.6.tar.gz
115ae559fc5c8a638c5ebb510cb58478df66ceeb61a6768584e592e4a1fbc9d4  0001-Use-threadsafe-wrapper-for-getpwnam-getgrnam.patch
8f2dd61e5f90c83198fa26f66bca54394b17cafbb8d2bbb97e948b4f55d1f071  0001-use-threadsafe-rad_getgrnam.patch
38455012b9fc322a7bfdec66e4f8aafeb679d0142eddfba31114aadfd8195b41  fix-tls-test.patch
2d5b3e1af1299373182f2c8021bdf45c29db5d82b0a077b965a16ded32cb6292  freeradius.confd
03c89204b9467416b87e4add70c6d12fe730e9444a54404c03f76d7f881ac458  freeradius.initd"
sha512sums="0b2dcefa8607ae88b9cb1f21aaaa7c43d553ea2951dc2163b297560a68729e09820b329e47872355020ac9a987bcebbf8e1e2616f75b1089b706bbd0e296e6fc  freeradius-server-2.2.6.tar.gz
4fb99b6a0f22cb844382139d448e24cc1b698452e30c1b0f06674a6fbd21463bcece2f2f4121618f9c7c57c8eb882eee35511b4dcea6e2a0904e27e5f2a6a679  0001-Use-threadsafe-wrapper-for-getpwnam-getgrnam.patch
dfe522350a2d45bf81c362ee87c57021149f196d4d45b8567911a1bd74e6b11b5172042a36e02f651157854251c08e846330e5d862767427ad7850ac6eac4f96  0001-use-threadsafe-rad_getgrnam.patch
77ee33a3c2059fb07841255fefc577f4e04680f4a1968d320a17f1d2769ddb671c36639dadbba0a1b1faaa31b1fb0c900313c375a209e67c41d75ebf9bef9d8f  fix-tls-test.patch
e248159c0a44f722e405c51c8015d9ad672e42ad0d38ca28f8a051ff911aa4d3e630b9bd4543e9d610940bc4ae50c022594e219ce341b36abe85c572acad418b  freeradius.confd
6377c6ec0d060c2006ab16e28c416d60b6e4897c4ecc4b321f5b281010aaffb06e80b10c45403d46cdfacb1b75046dc49986977e8072ffca5a2440f82ae1b28f  freeradius.initd"