# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=ppp
pkgver=2.5.2
pkgrel=0
pkgdesc="A daemon which implements the PPP protocol for dial-up networking"
url="https://ppp.samba.org/"
arch="all"
license="BSD-3-Clause AND BSD-4-Clause AND BSD-4-Clause-Shortened AND GPL-2.0-or-later AND HPND AND LGPL-2.0-or-later AND Public-Domain AND RSA-MD"
# for compatibility reasons the 'ppp' package is an empty meta package
# that pulls in all except -dev and -doc subpackages
depends="
	$pkgname-chat
	$pkgname-radius
	$pkgname-atm
	$pkgname-pppoe
	$pkgname-l2tp
	$pkgname-winbind
	$pkgname-passwordfd
	$pkgname-minconn
	$pkgname-daemon
	"
makedepends="
	autoconf
	automake
	bsd-compat-headers
	libpcap-dev
	libtool
	linux-headers
	openssl-dev>3
	"
subpackages="
	$pkgname-doc
	$pkgname-dev
	$pkgname-chat
	$pkgname-radius
	$pkgname-atm
	$pkgname-pppoe
	$pkgname-l2tp
	$pkgname-winbind
	$pkgname-passwordfd
	$pkgname-minconn
	$pkgname-openrc
	$pkgname-daemon
	"
source="https://download.samba.org/pub/ppp/ppp-$pkgver.tar.gz
	0011-build-sys-don-t-put-connect-errors-log-to-etc-ppp.patch
	fix-paths.patch
	musl-fix-headers.patch
	ip-down
	ip-up
	pppd.initd
	pppd.confd
	"
builddir="$srcdir"/$pkgname-$pkgver
options="!check"

# secfixes:
#   2.4.9-r6:
#     - CVE-2022-4603
#   2.4.8-r1:
#     - CVE-2020-8597

build() {
	# fix CFLAGS
	# -D_GNU_SOURCE is needed for IPv6 to work apparently
	export CFLAGS="$CFLAGS -D_GNU_SOURCE"
	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--localstatedir=/var \
		--sysconfdir=/etc \
		--with-runtime-dir=/run/ppp \
		--with-logfile-dir=/var/log/ppp \
		--enable-cbcp \
		--enable-microsoft-extensions \
		--enable-multilink \
		--enable-peap \
		--disable-systemd
	make
}

package() {
	make DESTDIR="$pkgdir" install
	install -D -m755 "$srcdir"/ip-up "$pkgdir"/etc/ppp/ip-up
	install -D -m755 "$srcdir"/ip-down "$pkgdir"/etc/ppp/ip-down
	install -D -m755 "$srcdir"/pppd.initd "$pkgdir"/etc/init.d/pppd
	install -D -m644 "$srcdir"/pppd.confd "$pkgdir"/etc/conf.d/pppd

	mkdir -p "$pkgdir"/var/log/ppp/

	# busybox ifup/ifdown needs pon/poff
	install -D -m644 scripts/pon.1 "$pkgdir"/usr/share/man/man1/pon.1
	install -D -m755 scripts/pon "$pkgdir"/usr/bin/pon
	install -D -m755 scripts/poff "$pkgdir"/usr/bin/poff

	install -d "$pkgdir"/usr/share/doc/ppp
	for i in scripts/*; do
		case $i in
		pon|poff|*.1|Makefile*) continue;
		esac
		if [ -f "$i" ]; then
			cp $i "$pkgdir"/usr/share/doc/ppp/
		fi
	done
	install -d "$pkgdir"/etc/ppp/peers
}

atm() {
	pkgdesc="pppd plugin to implement PPPoATM protocol"
	depends="ppp-daemon"
	license="GPL-2.0-or-later AND LGPL-2.0-or-later"
	_mv usr/lib/pppd/$pkgver/pppoatm.so 755
}

minconn() {
	pkgdesc="pppd plugin to implement a 'minconnect' option"
	depends="ppp-daemon"
	license="BSD-4-Clause"
	_mv usr/lib/pppd/$pkgver/minconn.so 755
}

winbind() {
	pkgdesc="WINBIND plugin for pppd"
	depends="ppp-daemon"
	license="GPL-2.0-or-later"
	_mv usr/lib/pppd/$pkgver/winbind.so 755
}

passwordfd() {
	pkgdesc="pppd plugin let's you pass the password via a file descriptor"
	depends="ppp-daemon"
	_mv usr/lib/pppd/$pkgver/passwordfd.so 755
}

chat() {
	pkgdesc="a program for automatic ppp session establishment"
	depends=
	license="Public-Domain"
	_mv usr/sbin/chat 755
}

l2tp() {
	pkgdesc="pppd plugin to implement PPPoL2TP protocol"
	depends="ppp-daemon"
	license="GPL-2.0-or-later"
	_mv usr/lib/pppd/$pkgver/openl2tp.so 755
	_mv usr/lib/pppd/$pkgver/pppol2tp.so 755
}

pppoe() {
	pkgdesc="pppd plugin for kernel-mode PPPoE on Linux"
	depends="ppp-daemon"
	license="GPL-2.0-or-later"
	_mv usr/lib/pppd/$pkgver/pppoe.so 755
	_mv usr/sbin/pppoe-discovery 755
}

radius() {
	pkgdesc="RADIUS plugin for pppd"
	depends="ppp-daemon"
	license="GPL-2.0-or-later AND HPND"
	_mv usr/lib/pppd/$pkgver/radius.so 755
	_mv usr/lib/pppd/$pkgver/radattr.so 755
	_mv usr/lib/pppd/$pkgver/radrealms.so 755
	install -d "$subpkgdir"/etc/radiusclient
	cp -r "$builddir"/pppd/plugins/radius/etc/* "$subpkgdir"/etc/radiusclient
	mv "$subpkgdir"/etc/radiusclient/radiusclient.conf.in "$subpkgdir"/etc/radiusclient/radiusclient.conf
	sed -i "s:@pkgsysconfdir@:/etc/radiusclient:g" "$subpkgdir"/etc/radiusclient/radiusclient.conf
	sed -i "s:@sbindir@:/usr/sbin:g" "$subpkgdir"/etc/radiusclient/radiusclient.conf
}

_mv() {
	install -m $2 -D "$pkgdir"/$1 "$subpkgdir"/$1
	rm "$pkgdir"/$1
}

daemon() {
	pkgdesc="A daemon which implements the PPP protocol"
	depends=
	license="BSD-3-Clause AND BSD-4-Clause AND BSD-4-Clause-Shortened AND GPL-2.0-or-later AND LGPL-2.0-or-later AND Public-Domain AND RSA-MD"
	mkdir -p "$subpkgdir"
	mv "$pkgdir"/* "$subpkgdir"/
}

openrc() {
	default_openrc
	install_if="ppp-daemon=$pkgver-r$pkgrel openrc"
}

sha512sums="
2c49d411818632a750f52b187c0ee421e9fcc1530c717abacce61e76aa8b296ce09fb142bc202696c0e0ac5570dd12ee649267921b756b6572ae514ce961d1e6  ppp-2.5.2.tar.gz
3d2c9113ed2350e66192a49d4b3c25268ef542825a2324ddfb65263bb8b2082db18ed9e8d28c1ce65c3ec5805b6a73cba2c4dbae402f02b6123684f527baba97  0011-build-sys-don-t-put-connect-errors-log-to-etc-ppp.patch
f8ad85423ccf19a6cea66e9debea81dc1842bf499b279b77c058cc2ff10aae7f48c3430a63050b97c4f535f5dcca449261fc7476f90cb2d30dfca9359490d6bd  fix-paths.patch
8efb0750fb64cc6cbb3e5fce4a79e842db3c7fd08c3c1899cda4201a80f9ec7a4c88d88be833579b9470c1d851f01fbf2cd82b51912ebc4f05bbb168f6e73bc3  musl-fix-headers.patch
160260bd2a788beaac395eadb38efbfd1e0e1a458fe151555acacf2c4f3a12381d644672c664f9793db6e3459a4f05a54e3ff6d407b0d37e8014b15bd0f11bcc  ip-down
8258c95a6b6e8e94d6001b5cd3a99bd3270f29ba0f2e5050a26c8d5f1b67eead8d039e71ce86a784d45e620047b0a2bb14b258d80a9ea62084ba588a4c2e2d84  ip-up
845d99cefd9e3ebfd4ff61dbf86d5bc1a698abbf204fed5a577fbc873e378c6d5d35712331b97dfd9fa37d1f7157a034f2584521f3a28ec18b883ab8d420e028  pppd.initd
9ffc7c98662491694f305bd4b2e245acef0a6b36d31a8b6b8d7aea742c350369b780285745b111529373a4b5b7fe46f4673efd60b4a3250030d33204a30f5b8c  pppd.confd
"
