summaryrefslogtreecommitdiff
path: root/net-dialup
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-04 05:48:38 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-04 05:48:38 -0500
commitbfd9c39e4712ebdb442d4ca0673061faed1e70e1 (patch)
tree0d7a74b4463ee387f9cf9368ceb1b757f694f72a /net-dialup
parentf716a9fe6455d39eef01e718aae68dae61c19704 (diff)
downloadbaldeagleos-repo-bfd9c39e4712ebdb442d4ca0673061faed1e70e1.tar.gz
baldeagleos-repo-bfd9c39e4712ebdb442d4ca0673061faed1e70e1.tar.xz
baldeagleos-repo-bfd9c39e4712ebdb442d4ca0673061faed1e70e1.zip
Revert "Adding metadata"
This reverts commit f716a9fe6455d39eef01e718aae68dae61c19704.
Diffstat (limited to 'net-dialup')
-rw-r--r--net-dialup/accel-ppp/Manifest2
-rw-r--r--net-dialup/accel-ppp/accel-ppp-1.12.0_p20230609.ebuild113
-rw-r--r--net-dialup/accel-ppp/accel-ppp-1.14.0-r2.ebuild109
-rw-r--r--net-dialup/accel-ppp/accel-ppp-1.14.0.ebuild108
-rw-r--r--net-dialup/accel-ppp/accel-ppp-9999.ebuild109
-rw-r--r--net-dialup/accel-ppp/files/accel-ppp-1.11.1-socklen.patch18
-rw-r--r--net-dialup/accel-ppp/files/accel-ppp.confd17
-rw-r--r--net-dialup/accel-ppp/files/accel-ppp.initd44
-rw-r--r--net-dialup/accel-ppp/metadata.xml14
-rw-r--r--net-dialup/atinout/Manifest1
-rw-r--r--net-dialup/atinout/atinout-0.9.1-r1.ebuild25
-rw-r--r--net-dialup/atinout/files/0001-make-gcc-happy-by-adding-fallthrough-comment.patch25
-rw-r--r--net-dialup/atinout/files/0002-do-not-rely-on-CR-in-modem-output.patch84
-rw-r--r--net-dialup/atinout/files/0003-patch-makefile.patch40
-rw-r--r--net-dialup/atinout/metadata.xml8
-rw-r--r--net-dialup/cutecom/Manifest1
-rw-r--r--net-dialup/cutecom/cutecom-0.60.0_rc1-r1.ebuild28
-rw-r--r--net-dialup/cutecom/metadata.xml12
-rw-r--r--net-dialup/dial/Manifest1
-rw-r--r--net-dialup/dial/dial-1.2-r2.ebuild27
-rw-r--r--net-dialup/dial/files/dial-1.2-gcc3.3.patch13
-rw-r--r--net-dialup/dial/files/dial-1.2-rename-configure.ac.patch12
-rw-r--r--net-dialup/dial/metadata.xml8
-rw-r--r--net-dialup/dwun/Manifest1
-rw-r--r--net-dialup/dwun/dwun-0.96e-r6.ebuild58
-rw-r--r--net-dialup/dwun/files/dwun22
-rw-r--r--net-dialup/dwun/files/dwun-0.96e-fno-common.patch41
-rw-r--r--net-dialup/dwun/files/dwun-0.96e-implicit-function-declarations.patch14
-rw-r--r--net-dialup/dwun/files/dwun-0.96e-rename-configure.patch9
-rw-r--r--net-dialup/dwun/files/dwun-0.96e-respect-AR.patch11
-rw-r--r--net-dialup/dwun/metadata.xml8
-rw-r--r--net-dialup/freeradius-client/Manifest1
-rw-r--r--net-dialup/freeradius-client/files/freeradius-client-1.1.7-ar-configure.in.patch10
-rw-r--r--net-dialup/freeradius-client/files/freeradius-client-1.1.7-configure-clang16.patch17
-rw-r--r--net-dialup/freeradius-client/freeradius-client-1.1.8.ebuild62
-rw-r--r--net-dialup/freeradius-client/metadata.xml26
-rw-r--r--net-dialup/freeradius/Manifest2
-rw-r--r--net-dialup/freeradius/files/cb.patch21
-rw-r--r--net-dialup/freeradius/files/freeradius-3.2.1-tls.patch91
-rw-r--r--net-dialup/freeradius/files/mppe_keys_c.patch12
-rw-r--r--net-dialup/freeradius/files/patch-src_main_cb_c12
-rw-r--r--net-dialup/freeradius/files/radius.conf-r416
-rw-r--r--net-dialup/freeradius/files/radius.conf-r518
-rw-r--r--net-dialup/freeradius/files/radius.conf-r622
-rw-r--r--net-dialup/freeradius/files/radius.init-r331
-rw-r--r--net-dialup/freeradius/files/radius.init-r431
-rw-r--r--net-dialup/freeradius/files/rlm_eap_fast.patch21
-rw-r--r--net-dialup/freeradius/freeradius-3.2.7.ebuild291
-rw-r--r--net-dialup/freeradius/freeradius-3.2.8.ebuild293
-rw-r--r--net-dialup/freeradius/metadata.xml27
-rw-r--r--net-dialup/isdn-firmware/Manifest1
-rw-r--r--net-dialup/isdn-firmware/isdn-firmware-2011.8.29.8.37.ebuild30
-rw-r--r--net-dialup/isdn-firmware/metadata.xml5
-rw-r--r--net-dialup/kpnadsl4linux/Manifest1
-rw-r--r--net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-Makefile.patch25
-rw-r--r--net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-fno-common.patch13
-rw-r--r--net-dialup/kpnadsl4linux/files/kpnadsl4linux-config100
-rw-r--r--net-dialup/kpnadsl4linux/kpnadsl4linux-1.11.ebuild49
-rw-r--r--net-dialup/kpnadsl4linux/metadata.xml5
-rw-r--r--net-dialup/linux-atm/Manifest1
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-c99-musl.patch113
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-fix-booleans.patch42
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-fix-formatting.patch192
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-headers.patch30
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-linux-5.2-SIOCGSTAMP.patch41
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-linux-headers-5.19.patch24
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-remove-bad-define.patch31
-rw-r--r--net-dialup/linux-atm/files/linux-atm-2.5.2-socklen-types.patch182
-rw-r--r--net-dialup/linux-atm/linux-atm-2.5.2-r1.ebuild49
-rw-r--r--net-dialup/linux-atm/linux-atm-2.5.2-r2.ebuild48
-rw-r--r--net-dialup/linux-atm/metadata.xml8
-rw-r--r--net-dialup/lrzsz/Manifest2
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-AR.patch10
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.12.patch28
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.13.patch12
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-c23.patch79
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-c99.patch27
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-configure-clang16.patch13
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-disable-nls.patch25
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-fix-integer-overflow.patch23
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.20.patch23
-rw-r--r--net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.22.patch48
-rw-r--r--net-dialup/lrzsz/files/lrzsz-autotools.patch264
-rw-r--r--net-dialup/lrzsz/files/lrzsz-implicit-decl.patch21
-rw-r--r--net-dialup/lrzsz/lrzsz-0.12.20-r10.ebuild80
-rw-r--r--net-dialup/lrzsz/metadata.xml11
-rw-r--r--net-dialup/metadata.xml34
-rw-r--r--net-dialup/mgetty/Manifest1
-rw-r--r--net-dialup/mgetty/files/mgetty-1.1.36-callback.patch26
-rw-r--r--net-dialup/mgetty/files/mgetty-1.1.36-tmpfile.patch33
-rw-r--r--net-dialup/mgetty/files/mgetty-1.1.37-nofax.patch110
-rw-r--r--net-dialup/mgetty/files/mgetty-1.1.37-qa-fixes.patch175
-rw-r--r--net-dialup/mgetty/files/mgetty-1.2.1-Lucent.c.patch16
-rw-r--r--net-dialup/mgetty/files/mgetty-1.2.1-aarch64.patch11
-rw-r--r--net-dialup/mgetty/files/mgetty-1.2.1-gentoo.patch154
-rw-r--r--net-dialup/mgetty/files/mgetty-1.2.1-riscv64.patch11
-rw-r--r--net-dialup/mgetty/files/mgetty.service12
-rw-r--r--net-dialup/mgetty/metadata.xml17
-rw-r--r--net-dialup/mgetty/mgetty-1.2.1-r4.ebuild185
-rw-r--r--net-dialup/mingetty/Manifest1
-rw-r--r--net-dialup/mingetty/files/mingetty-1.08-check_chroot_chdir_nice.patch36
-rw-r--r--net-dialup/mingetty/files/mingetty-1.08-utf8.patch156
-rw-r--r--net-dialup/mingetty/metadata.xml14
-rw-r--r--net-dialup/mingetty/mingetty-1.08-r3.ebuild33
-rw-r--r--net-dialup/minicom/Manifest1
-rw-r--r--net-dialup/minicom/files/minicom-2.8-gentoo-runscript.patch42
-rw-r--r--net-dialup/minicom/files/minicom-2.9-update-gettext.patch13
-rw-r--r--net-dialup/minicom/files/minirc.dfl1
-rw-r--r--net-dialup/minicom/metadata.xml16
-rw-r--r--net-dialup/minicom/minicom-2.11.1.ebuild60
-rw-r--r--net-dialup/minimodem/Manifest1
-rw-r--r--net-dialup/minimodem/metadata.xml22
-rw-r--r--net-dialup/minimodem/minimodem-0.24-r2.ebuild36
-rw-r--r--net-dialup/minimodem/minimodem-9999-r1.ebuild35
-rw-r--r--net-dialup/moserial/Manifest1
-rw-r--r--net-dialup/moserial/metadata.xml11
-rw-r--r--net-dialup/moserial/moserial-3.0.21.ebuild24
-rw-r--r--net-dialup/mwavem/Manifest1
-rw-r--r--net-dialup/mwavem/files/mwave-dev-handler11
-rw-r--r--net-dialup/mwavem/files/mwave.devfs2
-rw-r--r--net-dialup/mwavem/files/mwave.modules1
-rw-r--r--net-dialup/mwavem/files/mwavem-2.0-C23.patch128
-rw-r--r--net-dialup/mwavem/files/mwavem-2.0-ar.patch10
-rw-r--r--net-dialup/mwavem/files/mwavem-2.0-fno-common.patch22
-rw-r--r--net-dialup/mwavem/files/mwavem-2.0-gentoo.patch24
-rw-r--r--net-dialup/mwavem/files/mwavem-2.0-glibc-2.10.patch40
-rw-r--r--net-dialup/mwavem/files/mwavem-2.0-pthread.patch14
-rw-r--r--net-dialup/mwavem/metadata.xml5
-rw-r--r--net-dialup/mwavem/mwavem-2.0-r3.ebuild57
-rw-r--r--net-dialup/neocon/Manifest1
-rw-r--r--net-dialup/neocon/metadata.xml5
-rw-r--r--net-dialup/neocon/neocon-20110228-r1.ebuild23
-rw-r--r--net-dialup/picocom/Manifest3
-rw-r--r--net-dialup/picocom/metadata.xml13
-rw-r--r--net-dialup/picocom/picocom-2024.07-r1.ebuild43
-rw-r--r--net-dialup/picocom/picocom-3.1.ebuild29
-rw-r--r--net-dialup/ppp-scripts/Manifest1
-rw-r--r--net-dialup/ppp-scripts/metadata.xml5
-rw-r--r--net-dialup/ppp-scripts/ppp-scripts-0.ebuild27
-rw-r--r--net-dialup/ppp/Manifest2
-rw-r--r--net-dialup/ppp/files/README.mpls15
-rw-r--r--net-dialup/ppp/files/modules.ppp10
-rw-r--r--net-dialup/ppp/files/pppd.tmpfiles2
-rw-r--r--net-dialup/ppp/files/pppd.tmpfiles-r11
-rw-r--r--net-dialup/ppp/metadata.xml28
-rw-r--r--net-dialup/ppp/ppp-2.5.2.ebuild116
-rw-r--r--net-dialup/ppp/ppp-2.5.3.ebuild116
-rw-r--r--net-dialup/pppconfig/Manifest1
-rw-r--r--net-dialup/pppconfig/files/pppconfig9
-rw-r--r--net-dialup/pppconfig/metadata.xml5
-rw-r--r--net-dialup/pppconfig/pppconfig-2.3.25.ebuild56
-rw-r--r--net-dialup/pptpclient/Manifest2
-rw-r--r--net-dialup/pptpclient/files/pptp_fe.pl370
-rw-r--r--net-dialup/pptpclient/files/xpptp_fe.pl255
-rw-r--r--net-dialup/pptpclient/metadata.xml8
-rw-r--r--net-dialup/pptpclient/pptpclient-1.10.0.ebuild48
-rw-r--r--net-dialup/radiusclient-ng/Manifest1
-rw-r--r--net-dialup/radiusclient-ng/files/radiusclient-ng-0.5.6-cross-compile.patch73
-rw-r--r--net-dialup/radiusclient-ng/metadata.xml10
-rw-r--r--net-dialup/radiusclient-ng/radiusclient-ng-0.5.6-r2.ebuild50
-rw-r--r--net-dialup/rp-l2tp/Manifest1
-rw-r--r--net-dialup/rp-l2tp/files/rp-l2tp-0.4-build.patch68
-rw-r--r--net-dialup/rp-l2tp/files/rp-l2tp-0.4-clang16-build-fix.patch11
-rw-r--r--net-dialup/rp-l2tp/files/rp-l2tp-0.4-flags.patch54
-rw-r--r--net-dialup/rp-l2tp/files/rp-l2tp-0.4-gentoo.patch233
-rw-r--r--net-dialup/rp-l2tp/files/rp-l2tp-0.4-parallel-build.patch12
-rw-r--r--net-dialup/rp-l2tp/files/rp-l2tpd-init19
-rw-r--r--net-dialup/rp-l2tp/metadata.xml8
-rw-r--r--net-dialup/rp-l2tp/rp-l2tp-0.4-r5.ebuild43
-rw-r--r--net-dialup/rp-pppoe/Manifest1
-rw-r--r--net-dialup/rp-pppoe/files/pppoe-server.confd10
-rw-r--r--net-dialup/rp-pppoe/files/pppoe-server.initd9
-rw-r--r--net-dialup/rp-pppoe/files/rp-pppoe-4.0-ar_environment.patch81
-rw-r--r--net-dialup/rp-pppoe/metadata.xml8
-rw-r--r--net-dialup/rp-pppoe/rp-pppoe-4.0.ebuild60
-rw-r--r--net-dialup/rp-pppoe/rp-pppoe-9999.ebuild56
-rw-r--r--net-dialup/sercd/Manifest1
-rw-r--r--net-dialup/sercd/files/sercd.confd23
-rw-r--r--net-dialup/sercd/files/sercd.initd24
-rw-r--r--net-dialup/sercd/files/sercd.xinetd15
-rw-r--r--net-dialup/sercd/metadata.xml10
-rw-r--r--net-dialup/sercd/sercd-3.0.0-r3.ebuild28
-rw-r--r--net-dialup/speedtouch-usb/Manifest1
-rw-r--r--net-dialup/speedtouch-usb/files/README253
-rw-r--r--net-dialup/speedtouch-usb/metadata.xml5
-rw-r--r--net-dialup/speedtouch-usb/speedtouch-usb-3.0.1.2-r4.ebuild75
-rw-r--r--net-dialup/syncterm/Manifest1
-rw-r--r--net-dialup/syncterm/files/syncterm-1.1_disable-parallel-build.patch16
-rw-r--r--net-dialup/syncterm/files/syncterm-1.1_do-not-strip-3rdp-test.patch40
-rw-r--r--net-dialup/syncterm/files/syncterm-1.1_respect-toolchain-variables.patch89
-rw-r--r--net-dialup/syncterm/files/syncterm-1.1_use-sched-yield-instead-of-pthread-yield.patch41
-rw-r--r--net-dialup/syncterm/metadata.xml18
-rw-r--r--net-dialup/syncterm/syncterm-1.1.ebuild54
-rw-r--r--net-dialup/syncterm/syncterm-9999.ebuild44
-rw-r--r--net-dialup/tcpser/Manifest1
-rw-r--r--net-dialup/tcpser/files/tcpser-1.1.4_dont-hardcode-cflags-and-ldflags.patch17
-rw-r--r--net-dialup/tcpser/metadata.xml22
-rw-r--r--net-dialup/tcpser/tcpser-1.1.4.ebuild27
-rw-r--r--net-dialup/tio/Manifest1
-rw-r--r--net-dialup/tio/metadata.xml16
-rw-r--r--net-dialup/tio/tio-3.9.ebuild33
-rw-r--r--net-dialup/xl2tpd/Manifest4
-rw-r--r--net-dialup/xl2tpd/files/xl2tpd-1.3.18-r1-close-calls-when-pppd-terminates.patch51
-rw-r--r--net-dialup/xl2tpd/files/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch116
-rw-r--r--net-dialup/xl2tpd/files/xl2tpd-1.3.18-r3-Fix-compiling-with-C23.patch37
-rw-r--r--net-dialup/xl2tpd/files/xl2tpd-init-r111
-rw-r--r--net-dialup/xl2tpd/files/xl2tpd.conf1
-rw-r--r--net-dialup/xl2tpd/files/xl2tpd.service12
-rw-r--r--net-dialup/xl2tpd/metadata.xml16
-rw-r--r--net-dialup/xl2tpd/xl2tpd-1.3.18-r2.ebuild69
-rw-r--r--net-dialup/xl2tpd/xl2tpd-1.3.18-r3.ebuild70
-rw-r--r--net-dialup/xl2tpd/xl2tpd-1.3.20.ebuild73
212 files changed, 8563 insertions, 0 deletions
diff --git a/net-dialup/accel-ppp/Manifest b/net-dialup/accel-ppp/Manifest
new file mode 100644
index 000000000000..16264b9170ac
--- /dev/null
+++ b/net-dialup/accel-ppp/Manifest
@@ -0,0 +1,2 @@
+DIST accel-ppp-1.12.0_p20230609.tar.bz2 1679570 BLAKE2B 3af713135f755215dc6cd4484ca02f182a17c5240b0b6edf2627412391396ccc1de41dc0098b10e2359ea6d9737c6ff177dc753209a50bdc6989103332453d93 SHA512 c78b8accf74e0f047a9c07b1259f18c7cba3a4e5ecdc594bb4fde4bbbc7b33eeac28265da879bdb17f935628f58f0828eebac0e08ec8ca079ac95911e3851ac2
+DIST accel-ppp-1.14.0.tar.gz 1925929 BLAKE2B 44cc701a534f2eaa7fa4c579fdde895c2df7389108959e9bd5b7dc4406fedc6bb3fbc148b817c4605e071a09571923a3a3b0d9a8ad11b01392b412810afe7059 SHA512 58c75ec94eb197540ea2d2c4b03befbbaf040af6df7c002588f092b6cebfe40299e503875d669f2f1cff5ba14f3357fe3205fa56f4aee3337eb3dc85ae7e8e98
diff --git a/net-dialup/accel-ppp/accel-ppp-1.12.0_p20230609.ebuild b/net-dialup/accel-ppp/accel-ppp-1.12.0_p20230609.ebuild
new file mode 100644
index 000000000000..aba4ff70eaf6
--- /dev/null
+++ b/net-dialup/accel-ppp/accel-ppp-1.12.0_p20230609.ebuild
@@ -0,0 +1,113 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+MODULES_OPTIONAL_IUSE="ipoe"
+inherit cmake flag-o-matic linux-mod-r1 lua-single
+
+DESCRIPTION="High performance PPTP, PPPoE and L2TP server"
+HOMEPAGE="https://sourceforge.net/projects/accel-ppp/"
+SRC_URI="https://dev.gentoo.org/~pinkbyte/distfiles/snapshots/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug doc libtomcrypt lua postgres radius shaper snmp valgrind"
+
+RDEPEND="!libtomcrypt? ( dev-libs/openssl:0= )
+ libtomcrypt? ( dev-libs/libtomcrypt:0= )
+ lua? ( ${LUA_DEPS} )
+ postgres? ( dev-db/postgresql:* )
+ snmp? ( net-analyzer/net-snmp )
+ dev-libs/libpcre"
+DEPEND="${RDEPEND}
+ valgrind? ( dev-debug/valgrind )"
+PDEPEND="net-dialup/ppp-scripts"
+
+DOCS=( README )
+
+CONFIG_CHECK="~L2TP ~PPPOE ~PPTP"
+
+REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )
+ valgrind? ( debug )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.11.1-socklen.patch"
+)
+
+S="${WORKDIR}"
+
+pkg_setup() {
+ linux-mod-r1_pkg_setup
+ set_arch_to_kernel
+ use lua && lua-single_pkg_setup
+}
+
+src_prepare() {
+ sed -i -e "/mkdir/d" \
+ -e "s: RENAME accel-ppp.conf.dist::" accel-pppd/CMakeLists.txt || die 'sed on accel-pppd/CMakeLists.txt failed'
+
+ # Do not install kernel modules like that - breaks sandbox!
+ sed -i -e '/modules_install/d' \
+ drivers/ipoe/CMakeLists.txt \
+ drivers/vlan_mon/CMakeLists.txt || die
+
+ # Fix version
+ sed -i -e "s/1.11/${PV}/" drivers/ipoe/ipoe.c || die
+ sed -i -e "s/1.11/${PV}/" drivers/vlan_mon/vlan_mon.c || die
+
+ # Bug #549918
+ append-ldflags -Wl,-z,lazy
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local libdir="$(get_libdir)"
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc"
+ -DCMAKE_INSTALL_LOCALSTATEDIR="${EPREFIX}/var"
+ -DLIB_SUFFIX="${libdir#lib}"
+ -DBUILD_IPOE_DRIVER="$(usex ipoe)"
+ -DBUILD_PPTP_DRIVER=no
+ -DBUILD_VLAN_MON_DRIVER="$(usex ipoe)"
+ -DCRYPTO="$(usex libtomcrypt TOMCRYPT OPENSSL)"
+ -DLOG_PGSQL="$(usex postgres)"
+ -DLUA="$(usex lua TRUE FALSE)"
+ -DMEMDEBUG="$(usex debug)"
+ -DNETSNMP="$(usex snmp)"
+ -DRADIUS="$(usex radius)"
+ -DSHAPER="$(usex shaper)"
+ $(use debug && echo "-DVALGRIND=$(usex valgrind)")
+ )
+ cmake_src_configure
+}
+
+src_compile() {
+ local modlist=( ipoe=accel-ppp:drivers/ipoe vlan_mon=accel-ppp:drivers/vlan_mon )
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ linux-mod-r1_src_compile
+ cmake_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ cmake_src_install
+
+ use doc && dodoc -r rfc
+
+ if use snmp; then
+ insinto /usr/share/snmp/mibs
+ doins accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt
+ fi
+
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}d
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}d
+
+ keepdir /var/lib/accel-ppp
+ keepdir /var/log/accel-ppp
+}
diff --git a/net-dialup/accel-ppp/accel-ppp-1.14.0-r2.ebuild b/net-dialup/accel-ppp/accel-ppp-1.14.0-r2.ebuild
new file mode 100644
index 000000000000..37a7dd5c9d40
--- /dev/null
+++ b/net-dialup/accel-ppp/accel-ppp-1.14.0-r2.ebuild
@@ -0,0 +1,109 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+MODULES_OPTIONAL_IUSE="ipoe"
+inherit cmake flag-o-matic linux-mod-r1 lua-single
+
+DESCRIPTION="High performance PPTP/L2TP/SSTP/PPPoE/IPoE server"
+HOMEPAGE="https://accel-ppp.org/"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/accel-ppp/accel-ppp.git"
+else
+ SRC_URI="https://github.com/accel-ppp/accel-ppp/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="debug doc lua postgres radius shaper snmp valgrind"
+
+RDEPEND="
+ dev-libs/libpcre2
+ dev-libs/openssl:0=
+ lua? ( ${LUA_DEPS} )
+ postgres? ( dev-db/postgresql:* )
+ snmp? ( net-analyzer/net-snmp )
+"
+DEPEND="${RDEPEND}
+ valgrind? ( dev-debug/valgrind )"
+PDEPEND="net-dialup/ppp-scripts"
+
+DOCS=( README )
+
+CONFIG_CHECK="~L2TP ~PPPOE ~PPTP"
+
+REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )
+ valgrind? ( debug )"
+
+pkg_setup() {
+ linux-mod-r1_pkg_setup
+ set_arch_to_kernel
+ use lua && lua-single_pkg_setup
+}
+
+src_configure() {
+ append-ldflags -Wl,-z,lazy # Bug #549918
+ local libdir="$(get_libdir)"
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc"
+ -DCMAKE_INSTALL_LOCALSTATEDIR="${EPREFIX}/var"
+ -DLIB_SUFFIX="${libdir#lib}"
+ # modules handled by linux-mod
+ -DBUILD_IPOE_DRIVER=no
+ -DBUILD_PPTP_DRIVER=no
+ -DBUILD_VLAN_MON_DRIVER=no
+ -DCRYPTO_LIBRARY=OPENSSL
+ -DLOG_PGSQL="$(usex postgres)"
+ -DLUA="$(usex lua TRUE FALSE)"
+ -DMEMDEBUG="$(usex debug)"
+ -DNETSNMP="$(usex snmp)"
+ -DRADIUS="$(usex radius)"
+ -DSHAPER="$(usex shaper)"
+ $(use debug && echo "-DVALGRIND=$(usex valgrind)")
+ )
+ cmake_src_configure
+}
+
+build_modules() {
+ local mod modlist
+ for mod in ipoe vlan_mon; do
+ # see bug #971394
+ ln -s "${BUILD_DIR}"/version.h drivers/${mod} || die
+ local modlist+=( ${mod}=accel-ppp:drivers/${mod} )
+ done
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ linux-mod-r1_src_compile
+}
+
+src_compile() {
+ use ipoe && build_modules
+ cmake_src_compile
+
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ cmake_src_install
+
+ use doc && dodoc -r rfc
+
+ if use snmp; then
+ insinto /usr/share/snmp/mibs
+ doins accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt
+ fi
+
+ mv "${ED}"/etc/accel-ppp.conf{.dist,} || die
+
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}d
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}d
+
+ keepdir /var/lib/accel-ppp
+ keepdir /var/log/accel-ppp
+}
diff --git a/net-dialup/accel-ppp/accel-ppp-1.14.0.ebuild b/net-dialup/accel-ppp/accel-ppp-1.14.0.ebuild
new file mode 100644
index 000000000000..83bc16b7098b
--- /dev/null
+++ b/net-dialup/accel-ppp/accel-ppp-1.14.0.ebuild
@@ -0,0 +1,108 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+MODULES_OPTIONAL_IUSE="ipoe"
+inherit cmake flag-o-matic linux-mod-r1 lua-single
+
+DESCRIPTION="High performance PPTP/L2TP/SSTP/PPPoE/IPoE server"
+HOMEPAGE="https://accel-ppp.org/"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/accel-ppp/accel-ppp.git"
+else
+ SRC_URI="https://github.com/accel-ppp/accel-ppp/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="debug doc libtomcrypt lua postgres radius shaper snmp valgrind"
+
+RDEPEND="!libtomcrypt? ( dev-libs/openssl:0= )
+ libtomcrypt? ( dev-libs/libtomcrypt:0= )
+ lua? ( ${LUA_DEPS} )
+ postgres? ( dev-db/postgresql:* )
+ snmp? ( net-analyzer/net-snmp )
+ dev-libs/libpcre"
+DEPEND="${RDEPEND}
+ valgrind? ( dev-debug/valgrind )"
+PDEPEND="net-dialup/ppp-scripts"
+
+DOCS=( README )
+
+CONFIG_CHECK="~L2TP ~PPPOE ~PPTP"
+
+REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )
+ valgrind? ( debug )"
+
+pkg_setup() {
+ linux-mod-r1_pkg_setup
+ set_arch_to_kernel
+ use lua && lua-single_pkg_setup
+}
+
+src_prepare() {
+ sed -i -e "/mkdir/d" \
+ -e "s: RENAME accel-ppp.conf.dist::" accel-pppd/CMakeLists.txt || die 'sed on accel-pppd/CMakeLists.txt failed'
+
+ # Do not install kernel modules like that - breaks sandbox!
+ sed -i -e '/modules_install/d' \
+ drivers/ipoe/CMakeLists.txt \
+ drivers/vlan_mon/CMakeLists.txt || die
+
+ append-ldflags -Wl,-z,lazy # Bug #549918
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local libdir="$(get_libdir)"
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc"
+ -DCMAKE_INSTALL_LOCALSTATEDIR="${EPREFIX}/var"
+ -DLIB_SUFFIX="${libdir#lib}"
+ -DBUILD_IPOE_DRIVER="$(usex ipoe)"
+ -DBUILD_PPTP_DRIVER=no
+ -DBUILD_VLAN_MON_DRIVER="$(usex ipoe)"
+ -DCRYPTO="$(usex libtomcrypt TOMCRYPT OPENSSL)"
+ -DLOG_PGSQL="$(usex postgres)"
+ -DLUA="$(usex lua TRUE FALSE)"
+ -DMEMDEBUG="$(usex debug)"
+ -DNETSNMP="$(usex snmp)"
+ -DRADIUS="$(usex radius)"
+ -DSHAPER="$(usex shaper)"
+ $(use debug && echo "-DVALGRIND=$(usex valgrind)")
+ )
+ cmake_src_configure
+}
+
+src_compile() {
+ local modlist=( ipoe=accel-ppp:drivers/ipoe vlan_mon=accel-ppp:drivers/vlan_mon )
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ linux-mod-r1_src_compile
+ cmake_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ cmake_src_install
+
+ use doc && dodoc -r rfc
+
+ if use snmp; then
+ insinto /usr/share/snmp/mibs
+ doins accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt
+ fi
+
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}d
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}d
+
+ keepdir /var/lib/accel-ppp
+ keepdir /var/log/accel-ppp
+}
diff --git a/net-dialup/accel-ppp/accel-ppp-9999.ebuild b/net-dialup/accel-ppp/accel-ppp-9999.ebuild
new file mode 100644
index 000000000000..37a7dd5c9d40
--- /dev/null
+++ b/net-dialup/accel-ppp/accel-ppp-9999.ebuild
@@ -0,0 +1,109 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+MODULES_OPTIONAL_IUSE="ipoe"
+inherit cmake flag-o-matic linux-mod-r1 lua-single
+
+DESCRIPTION="High performance PPTP/L2TP/SSTP/PPPoE/IPoE server"
+HOMEPAGE="https://accel-ppp.org/"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/accel-ppp/accel-ppp.git"
+else
+ SRC_URI="https://github.com/accel-ppp/accel-ppp/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="debug doc lua postgres radius shaper snmp valgrind"
+
+RDEPEND="
+ dev-libs/libpcre2
+ dev-libs/openssl:0=
+ lua? ( ${LUA_DEPS} )
+ postgres? ( dev-db/postgresql:* )
+ snmp? ( net-analyzer/net-snmp )
+"
+DEPEND="${RDEPEND}
+ valgrind? ( dev-debug/valgrind )"
+PDEPEND="net-dialup/ppp-scripts"
+
+DOCS=( README )
+
+CONFIG_CHECK="~L2TP ~PPPOE ~PPTP"
+
+REQUIRED_USE="lua? ( ${LUA_REQUIRED_USE} )
+ valgrind? ( debug )"
+
+pkg_setup() {
+ linux-mod-r1_pkg_setup
+ set_arch_to_kernel
+ use lua && lua-single_pkg_setup
+}
+
+src_configure() {
+ append-ldflags -Wl,-z,lazy # Bug #549918
+ local libdir="$(get_libdir)"
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_SYSCONFDIR="${EPREFIX}/etc"
+ -DCMAKE_INSTALL_LOCALSTATEDIR="${EPREFIX}/var"
+ -DLIB_SUFFIX="${libdir#lib}"
+ # modules handled by linux-mod
+ -DBUILD_IPOE_DRIVER=no
+ -DBUILD_PPTP_DRIVER=no
+ -DBUILD_VLAN_MON_DRIVER=no
+ -DCRYPTO_LIBRARY=OPENSSL
+ -DLOG_PGSQL="$(usex postgres)"
+ -DLUA="$(usex lua TRUE FALSE)"
+ -DMEMDEBUG="$(usex debug)"
+ -DNETSNMP="$(usex snmp)"
+ -DRADIUS="$(usex radius)"
+ -DSHAPER="$(usex shaper)"
+ $(use debug && echo "-DVALGRIND=$(usex valgrind)")
+ )
+ cmake_src_configure
+}
+
+build_modules() {
+ local mod modlist
+ for mod in ipoe vlan_mon; do
+ # see bug #971394
+ ln -s "${BUILD_DIR}"/version.h drivers/${mod} || die
+ local modlist+=( ${mod}=accel-ppp:drivers/${mod} )
+ done
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ linux-mod-r1_src_compile
+}
+
+src_compile() {
+ use ipoe && build_modules
+ cmake_src_compile
+
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ cmake_src_install
+
+ use doc && dodoc -r rfc
+
+ if use snmp; then
+ insinto /usr/share/snmp/mibs
+ doins accel-pppd/extra/net-snmp/ACCEL-PPP-MIB.txt
+ fi
+
+ mv "${ED}"/etc/accel-ppp.conf{.dist,} || die
+
+ newinitd "${FILESDIR}"/${PN}.initd ${PN}d
+ newconfd "${FILESDIR}"/${PN}.confd ${PN}d
+
+ keepdir /var/lib/accel-ppp
+ keepdir /var/log/accel-ppp
+}
diff --git a/net-dialup/accel-ppp/files/accel-ppp-1.11.1-socklen.patch b/net-dialup/accel-ppp/files/accel-ppp-1.11.1-socklen.patch
new file mode 100644
index 000000000000..79f76cae98a3
--- /dev/null
+++ b/net-dialup/accel-ppp/files/accel-ppp-1.11.1-socklen.patch
@@ -0,0 +1,18 @@
+commit 68008248259dfaa2fde91f8697db889971056bb3
+Author: lmwangi <lmwangi@gmail.com>
+Date: Tue Jun 7 13:55:04 2016 +0300
+
+ fix build issue where socketlen is not found
+
+diff --git a/accel-pppd/logs/log_pgsql.c b/accel-pppd/logs/log_pgsql.c
+index e4b5a9e..78fa72d 100644
+--- a/accel-pppd/logs/log_pgsql.c
++++ b/accel-pppd/logs/log_pgsql.c
+@@ -1,6 +1,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <sys/socket.h>
+
+ #include <postgresql/libpq-fe.h>
+
diff --git a/net-dialup/accel-ppp/files/accel-ppp.confd b/net-dialup/accel-ppp/files/accel-ppp.confd
new file mode 100644
index 000000000000..7a4d2d3712bd
--- /dev/null
+++ b/net-dialup/accel-ppp/files/accel-ppp.confd
@@ -0,0 +1,17 @@
+# Config file for accel-pppd
+
+# Pid file
+ACCEL_PPPD_PID="/run/accel-ppp/accel-pppd.pid"
+
+# Directory for radius attributes
+RADATTR_DIR="/run/radattr"
+
+# Daemon options
+ACCEL_PPPD_OPTS="-d -c /etc/accel-ppp.conf"
+
+# Set type of shutdown for accel-ppp daemon
+# Default is 'hard' shutdown due to freezes
+# when using upstream default('soft') with
+# hundreds of sessions.
+# Uncomment and set different mode if you wish
+#SHUTDOWN_MODE="hard"
diff --git a/net-dialup/accel-ppp/files/accel-ppp.initd b/net-dialup/accel-ppp/files/accel-ppp.initd
new file mode 100644
index 000000000000..357ae424edc9
--- /dev/null
+++ b/net-dialup/accel-ppp/files/accel-ppp.initd
@@ -0,0 +1,44 @@
+#!/sbin/openrc-run
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+extra_started_commands="reload"
+
+depend() {
+ need net
+}
+
+start_pre() {
+ # Create directory for PID file
+ checkpath -d -q "$(dirname ${ACCEL_PPPD_PID})"
+ # Create default directory for radius attributes
+ checkpath -d -q "${RADATTR_DIR}"
+}
+
+start() {
+ ebegin "Starting accel-pppd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/accel-pppd -- ${ACCEL_PPPD_OPTS} -p ${ACCEL_PPPD_PID}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping accel-pppd"
+ accel-cmd shutdown ${SHUTDOWN_MODE:-hard}
+ [ $? -ne 0 ] && kill -9 $(pidof accel-pppd)
+ PID="$(cat ${ACCEL_PPPD_PID})"
+ while [ -n "${PID}" -a -d "/proc/${PID}" ]; do
+ sleep 1
+ done
+ rm -f ${ACCEL_PPPD_PID}
+ eend 0
+}
+
+reload() {
+ if [ ! -f ${ACCEL_PPPD_PID} ]; then
+ eerror "accel-pppd isn't running"
+ return 1
+ fi
+ ebegin "Reloading configuration"
+ start-stop-daemon --signal USR1 --pidfile ${ACCEL_PPPD_PID}
+ eend $?
+}
diff --git a/net-dialup/accel-ppp/metadata.xml b/net-dialup/accel-ppp/metadata.xml
new file mode 100644
index 000000000000..80bea16c3f2f
--- /dev/null
+++ b/net-dialup/accel-ppp/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <use>
+ <flag name="ipoe">Build IPoE kernel module</flag>
+ <flag name="libtomcrypt">Support crypto algorithms through <pkg>dev-libs/libtomcrypt</pkg> instead of <pkg>dev-libs/openssl</pkg></flag>
+ <flag name="shaper">Support for traffic shaping</flag>
+ </use>
+ <upstream>
+ <changelog>https://github.com/accel-ppp/accel-ppp/blob/master/CHANGELOG.md</changelog>
+ <remote-id type="github">accel-ppp/accel-ppp</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/atinout/Manifest b/net-dialup/atinout/Manifest
new file mode 100644
index 000000000000..71e1a00a7a5e
--- /dev/null
+++ b/net-dialup/atinout/Manifest
@@ -0,0 +1 @@
+DIST atinout-0.9.1.tar.gz 24117 BLAKE2B b8d7f120d010d12f8acf620ddeb697c2e63d5b33711c2e717ba378f3a97fbc3ab8dafeceb2782779e33defc072923a2be21020e0826f9909f4707528baead926 SHA512 ae25b2c4f3e2a9b861a7fc7d8e469d0d9d7a230281266393ce8547abca7e2368a709db3293ca31c00d5599b1de12ae9c8cd2bc0beefce53fa30012b6a2d7764b
diff --git a/net-dialup/atinout/atinout-0.9.1-r1.ebuild b/net-dialup/atinout/atinout-0.9.1-r1.ebuild
new file mode 100644
index 000000000000..1d89db87056b
--- /dev/null
+++ b/net-dialup/atinout/atinout-0.9.1-r1.ebuild
@@ -0,0 +1,25 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+DESCRIPTION="AT commands as input are sent to modem and responses given as output"
+HOMEPAGE="https://atinout.sourceforge.net/index.html"
+SRC_URI="https://netix.dl.sourceforge.net/project/atinout/v0.9.1/${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+PATCHES=(
+ "${FILESDIR}"/0001-make-gcc-happy-by-adding-fallthrough-comment.patch
+ "${FILESDIR}"/0002-do-not-rely-on-CR-in-modem-output.patch
+ "${FILESDIR}"/0003-patch-makefile.patch
+)
+
+src_compile() {
+ tc-export CC
+ emake
+}
diff --git a/net-dialup/atinout/files/0001-make-gcc-happy-by-adding-fallthrough-comment.patch b/net-dialup/atinout/files/0001-make-gcc-happy-by-adding-fallthrough-comment.patch
new file mode 100644
index 000000000000..ce7800fe0b95
--- /dev/null
+++ b/net-dialup/atinout/files/0001-make-gcc-happy-by-adding-fallthrough-comment.patch
@@ -0,0 +1,25 @@
+From ca2e04f8b069d269172f0d55d3716a809537f696 Mon Sep 17 00:00:00 2001
+From: Beralt Meppelink <b.meppelink@riwo.eu>
+Date: Fri, 27 Oct 2017 09:12:18 +0200
+Subject: [PATCH 1/2] make gcc happy by adding fallthrough comment
+
+---
+ atinout.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/atinout.c b/atinout.c
+index d04f300..924b5bc 100644
+--- a/atinout.c
++++ b/atinout.c
+@@ -150,7 +150,7 @@ static bool is_final_result(const char * const response)
+ if (strcmp(&response[1], "K\r\n") == 0) {
+ return true;
+ }
+- /* no break */
++ // fallthrough
+ default:
+ return false;
+ }
+--
+2.23.0
+
diff --git a/net-dialup/atinout/files/0002-do-not-rely-on-CR-in-modem-output.patch b/net-dialup/atinout/files/0002-do-not-rely-on-CR-in-modem-output.patch
new file mode 100644
index 000000000000..593dc853812d
--- /dev/null
+++ b/net-dialup/atinout/files/0002-do-not-rely-on-CR-in-modem-output.patch
@@ -0,0 +1,84 @@
+From 65dae46181119867cd8e93ca5b33d3b0cf3df08c Mon Sep 17 00:00:00 2001
+From: Beralt Meppelink <b.meppelink@riwo.eu>
+Date: Fri, 27 Oct 2017 10:42:50 +0200
+Subject: [PATCH 2/2] do not rely on CR in modem output
+
+---
+ atinout.c | 24 +++++++++++-------------
+ 1 file changed, 11 insertions(+), 13 deletions(-)
+
+diff --git a/atinout.c b/atinout.c
+index 924b5bc..4cd7689 100644
+--- a/atinout.c
++++ b/atinout.c
+@@ -34,7 +34,6 @@
+
+ #define MAX_LINE_LENGTH (4 * 1024)
+ static char buf[MAX_LINE_LENGTH];
+-static char buf2[MAX_LINE_LENGTH];
+
+ static struct option long_options[] = {
+ {"help", no_argument, NULL, 'h'},
+@@ -125,36 +124,36 @@ static bool is_final_result(const char * const response)
+ }
+ return false;
+ case 'B':
+- if (strcmp(&response[1], "USY\r\n") == 0) {
++ if (strcmp(&response[1], "USY\n") == 0) {
+ return true;
+- }
++ }
++
+ return false;
+
+ case 'E':
+- if (strcmp(&response[1], "RROR\r\n") == 0) {
++ if (strcmp(&response[1], "RROR\n") == 0) {
+ return true;
+ }
+ return false;
+ case 'N':
+- if (strcmp(&response[1], "O ANSWER\r\n") == 0) {
++ if (strcmp(&response[1], "O ANSWER\n") == 0) {
+ return true;
+ }
+- if (strcmp(&response[1], "O CARRIER\r\n") == 0) {
++ if (strcmp(&response[1], "O CARRIER\n") == 0) {
+ return true;
+ }
+- if (strcmp(&response[1], "O DIALTONE\r\n") == 0) {
++ if (strcmp(&response[1], "O DIALTONE\n") == 0) {
+ return true;
+ }
+ return false;
+ case 'O':
+- if (strcmp(&response[1], "K\r\n") == 0) {
++ if (strcmp(&response[1], "K\n") == 0) {
+ return true;
+ }
+ // fallthrough
+ default:
+ return false;
+ }
+-
+ }
+
+ int main(int argc, char *argv[])
+@@ -248,11 +247,10 @@ int main(int argc, char *argv[])
+ fprintf(stderr, "EOF from modem\n");
+ return EXIT_FAILURE;
+ }
+- strcpy(buf2, line);
+- strip_cr(buf2);
+- res = fputs(buf2, output);
++ strip_cr(line);
++ res = fputs(line, output);
+ if (res < 0) {
+- fprintf(stderr, "failed to write '%s' to output file (res = %d)\n", buf2, res);
++ fprintf(stderr, "failed to write '%s' to output file (res = %d)\n", line, res);
+ return EXIT_FAILURE;
+ }
+ } while (! is_final_result(line));
+--
+2.23.0
+
diff --git a/net-dialup/atinout/files/0003-patch-makefile.patch b/net-dialup/atinout/files/0003-patch-makefile.patch
new file mode 100644
index 000000000000..871a61efe86d
--- /dev/null
+++ b/net-dialup/atinout/files/0003-patch-makefile.patch
@@ -0,0 +1,40 @@
+From 404fb66abd5db4ef4b824ec67c56887773c99962 Mon Sep 17 00:00:00 2001
+From: Marco Scardovi <marco@scardovi.com>
+Date: Sun, 27 Jun 2021 18:21:15 +0200
+Subject: [PATCH] patch makefile
+
+Signed-off-by: Marco Scardovi <marco@scardovi.com>
+---
+ Makefile | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 1daa431..bb27d0b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,17 +1,15 @@
+ VERSION = 0.9.1
+
+-PREFIX = /usr
++PREFIX ?= /usr
+
+-CC = gcc
+-CFLAGS = -W -Wall -Wextra -Werror \
+- -DVERSION=\"$(VERSION)\" \
+- -g
+-LDFLAGS =
++CC ?= gcc
++CFLAGS ?= -W -Wall -Wextra -Werror -g
++LDFLAGS ?=
+
+ all: atinout
+
+ atinout: atinout.c
+- $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $^
++ $(CC) -o $@ $(CFLAGS) $(CPPFLAGS) -DVERSION=\"$(VERSION)\" $(LDFLAGS) $^
+
+ clean:
+ rm -f atinout
+--
+2.32.0
+
diff --git a/net-dialup/atinout/metadata.xml b/net-dialup/atinout/metadata.xml
new file mode 100644
index 000000000000..21afb5edd70a
--- /dev/null
+++ b/net-dialup/atinout/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="sourceforge">atinout</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/cutecom/Manifest b/net-dialup/cutecom/Manifest
new file mode 100644
index 000000000000..84390342677e
--- /dev/null
+++ b/net-dialup/cutecom/Manifest
@@ -0,0 +1 @@
+DIST cutecom-v0.60.0-RC1.tar.bz2 1291319 BLAKE2B 8d73a51916d8d3f103ba6215d0bf2865337aa82f95d12be512001abd845cac08f9c9b6fb9022574aff42fef958c90676ae0828d1597879c798bd1ffe4bec68ba SHA512 92a210ab846f452287693add8db52833fd83814f59a2be8de304278dbc711b2a5dc0fdaadf877a588ad023849370151788d1ea678ba777fe0a4a600429669151
diff --git a/net-dialup/cutecom/cutecom-0.60.0_rc1-r1.ebuild b/net-dialup/cutecom/cutecom-0.60.0_rc1-r1.ebuild
new file mode 100644
index 000000000000..da2e9afe8dfa
--- /dev/null
+++ b/net-dialup/cutecom/cutecom-0.60.0_rc1-r1.ebuild
@@ -0,0 +1,28 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake desktop xdg
+
+MY_PV=${PV/_rc/-RC}
+
+DESCRIPTION="Serial terminal, like minicom, written in Qt"
+HOMEPAGE="https://gitlab.com/cutecom/cutecom"
+SRC_URI="https://gitlab.com/cutecom/cutecom/-/archive/v${MY_PV}/cutecom-v${MY_PV}.tar.bz2"
+S="${WORKDIR}/cutecom-v${MY_PV}"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="amd64 ~arm64 x86"
+
+DEPEND="
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtserialport:6"
+RDEPEND="${DEPEND}
+ net-dialup/lrzsz"
+
+src_install() {
+ cmake_src_install
+ doicon "distribution/${PN}.png"
+}
diff --git a/net-dialup/cutecom/metadata.xml b/net-dialup/cutecom/metadata.xml
new file mode 100644
index 000000000000..4d60d1402818
--- /dev/null
+++ b/net-dialup/cutecom/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>bkohler@gentoo.org</email>
+ <name>Ben Kohler</name>
+ </maintainer>
+ <longdescription>CuteCom is a graphical serial terminal, like minicom. It is aimed mainly at hardware developers or other people who need a terminal to talk to their devices.</longdescription>
+ <upstream>
+ <remote-id type="gitlab">cutecom/cutecom</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/dial/Manifest b/net-dialup/dial/Manifest
new file mode 100644
index 000000000000..ae16ac673f0d
--- /dev/null
+++ b/net-dialup/dial/Manifest
@@ -0,0 +1 @@
+DIST dial-1.2.tar.gz 48400 BLAKE2B fc51e04d73e0ab1d1d4921f3707ba7827f0a2ec1aad39a835d364d1bada7cb2032ef9a025c7e717545a55801fb8e957e6fd02fe1650d9325c3d9377cd465d9c8 SHA512 de24bc0c23c2e0daf305b7808a203dde97811d96c034b9a326dea3aec1a97538475a1ef56f4b4efba762c866d294e0e29dcbc16aa3779d5e74cab1aea8131957
diff --git a/net-dialup/dial/dial-1.2-r2.ebuild b/net-dialup/dial/dial-1.2-r2.ebuild
new file mode 100644
index 000000000000..9ff829f99715
--- /dev/null
+++ b/net-dialup/dial/dial-1.2-r2.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="A simple client for DWUN"
+HOMEPAGE="http://dwun.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/dwun/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 x86"
+
+RDEPEND="net-dialup/dwun"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-gcc3.3.patch
+ "${FILESDIR}"/${P}-rename-configure.ac.patch
+)
+
+src_prepare() {
+ default
+
+ eautoreconf
+}
diff --git a/net-dialup/dial/files/dial-1.2-gcc3.3.patch b/net-dialup/dial/files/dial-1.2-gcc3.3.patch
new file mode 100644
index 000000000000..18cacbf4916e
--- /dev/null
+++ b/net-dialup/dial/files/dial-1.2-gcc3.3.patch
@@ -0,0 +1,13 @@
+diff -ur dial-1.2.orig/src/dial.c dial-1.2/src/dial.c
+--- dial-1.2.orig/src/dial.c 2003-11-28 13:24:13.000000000 +1300
++++ dial-1.2/src/dial.c 2003-11-28 13:25:12.000000000 +1300
+@@ -162,8 +162,7 @@
+ snprintf(rcfile, MAXPATHLEN, "%s/.dialrc", home);
+ #else
+ if (strlen(home) + strlen("/.dialrc") + 1 > MAXPATHLEN) {
+- fprintf(stderr, "$HOME environment variable too
+- long\n");
++ fprintf(stderr, "$HOME environment variable too long\n");
+ return 1;
+ }
+ sprintf(rcfile, "%s/.dialrc", home);
diff --git a/net-dialup/dial/files/dial-1.2-rename-configure.ac.patch b/net-dialup/dial/files/dial-1.2-rename-configure.ac.patch
new file mode 100644
index 000000000000..e4436427e529
--- /dev/null
+++ b/net-dialup/dial/files/dial-1.2-rename-configure.ac.patch
@@ -0,0 +1,12 @@
+--- a/configure.in
++++ b/configure.in
+@@ -1,5 +1,5 @@
+ dnl Process this file with autoconf to produce a configure script.
+-AC_INIT(configure.in)
++AC_INIT(configure.ac)
+ AM_INIT_AUTOMAKE(dial, 1.2)
+ AM_CONFIG_HEADER(config.h)
+
+--
+2.37.3
+
diff --git a/net-dialup/dial/metadata.xml b/net-dialup/dial/metadata.xml
new file mode 100644
index 000000000000..71d315101d66
--- /dev/null
+++ b/net-dialup/dial/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="sourceforge">dwun</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/dwun/Manifest b/net-dialup/dwun/Manifest
new file mode 100644
index 000000000000..51dd3c6f0a64
--- /dev/null
+++ b/net-dialup/dwun/Manifest
@@ -0,0 +1 @@
+DIST dwun-0.96e.tar.gz 147960 BLAKE2B 2f1a414d629ff7d0c4f35c37b803819f141385225f151b8d6cb2ef0ad53aaa22067d974f085c5d239bb42c0faa1e8330a7ca1dba83a6c78cd24f802d78223663 SHA512 6763acd60192f18ffd81edd4f4e18ccfb8c5ac3882db96f9b7d2d032e9a0c61cb843094222744525a9927981c8cc7a603fd0aa1e1d4309d3f7fab21fec028115
diff --git a/net-dialup/dwun/dwun-0.96e-r6.ebuild b/net-dialup/dwun/dwun-0.96e-r6.ebuild
new file mode 100644
index 000000000000..2acd33a674c2
--- /dev/null
+++ b/net-dialup/dwun/dwun-0.96e-r6.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="Dialer Without a Useful Name (DWUN)"
+HOMEPAGE="http://dwun.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="MIT GPL-2" # GPL-2 only for init script
+SLOT="0"
+KEYWORDS="~amd64 x86"
+
+RDEPEND="virtual/libcrypt:="
+DEPEND="${RDEPEND}"
+
+DOCS=( AUTHORS ChangeLog QUICKSTART README TODO UPGRADING )
+
+PATCHES=(
+ "${FILESDIR}"/${P}-fno-common.patch
+ "${FILESDIR}"/${P}-rename-configure.patch
+ "${FILESDIR}"/${P}-implicit-function-declarations.patch
+ "${FILESDIR}"/${P}-respect-AR.patch
+)
+
+src_prepare() {
+ default
+
+ sed -i -e "s:TODO QUICKSTART README UPGRADING ChangeLog COPYING AUTHORS::" Makefile.in || die
+
+ eautoreconf
+}
+
+src_configure() {
+ tc-export CC
+
+ econf --with-docdir="share/doc/${PF}"
+}
+
+src_install() {
+ default
+
+ insinto /etc
+ newins doc/examples/complete-rcfile dwunrc
+ newins debian/dwunauth dwunauth
+ newinitd "${FILESDIR}/dwun" dwun
+}
+
+pkg_postinst() {
+ elog
+ elog 'Make sure you have "net-dialup/ppp" merged if you intend to use dwun'
+ elog "to control a standard PPP network link."
+ elog "See /usr/share/doc/${P}/QUICKSTART for instructions on"
+ elog "configuring dwun."
+ elog
+}
diff --git a/net-dialup/dwun/files/dwun b/net-dialup/dwun/files/dwun
new file mode 100644
index 000000000000..8584844fa1fb
--- /dev/null
+++ b/net-dialup/dwun/files/dwun
@@ -0,0 +1,22 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need net
+}
+
+DAEMON=/usr/sbin/dwun
+PIDFILE="/run/${SVCNAME}.pid"
+
+start() {
+ ebegin "Starting ${SVCNAME}"
+ start-stop-daemon --start --pidfile ${PIDFILE} --startas ${DAEMON}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ${SVCNAME}"
+ start-stop-daemon --stop --signal 1 --pidfile ${PIDFILE}
+ eend $?
+}
diff --git a/net-dialup/dwun/files/dwun-0.96e-fno-common.patch b/net-dialup/dwun/files/dwun-0.96e-fno-common.patch
new file mode 100644
index 000000000000..c84c027e42d5
--- /dev/null
+++ b/net-dialup/dwun/files/dwun-0.96e-fno-common.patch
@@ -0,0 +1,41 @@
+--- a/src/main.c
++++ b/src/main.c
+@@ -37,11 +37,11 @@
+ /* extern'ed in main.h */
+ struct settings set;
+ char *error_messages;
++enum MYLOG_OPTIONS MYLOG_OPTIONS = MYLOG_STDERR;
+
+ int main(int argc, char *argv[])
+ {
+ char orig_work_dir[MAXPATHLEN];
+- MYLOG_OPTIONS = MYLOG_STDERR;
+ umask(022); /* -rw-r--r- */
+
+ if (!(error_messages = xmalloc(MAX_LOG_LENGTH)))
+--- a/src/shared.h
++++ b/src/shared.h
+@@ -56,10 +56,11 @@
+ char *external; /* named pipe (optional) */
+ };
+
+-enum {
++enum MYLOG_OPTIONS {
+ MYLOG_STDERR,
+ MYLOG_STDERR_DATEPID,
+ MYLOG_SYSLOG
+-} MYLOG_OPTIONS;
++};
++extern enum MYLOG_OPTIONS MYLOG_OPTIONS;
+
+ #endif
+--- a/src/util.c
++++ b/src/util.c
+@@ -26,6 +26,7 @@
+ #include "util.h"
+ #include "child.h"
+ #include "main.h"
++#include "shared.h"
+
+ static bool create_file(char *file, int options);
+ static void print_date_pid(void);
diff --git a/net-dialup/dwun/files/dwun-0.96e-implicit-function-declarations.patch b/net-dialup/dwun/files/dwun-0.96e-implicit-function-declarations.patch
new file mode 100644
index 000000000000..11248396f145
--- /dev/null
+++ b/net-dialup/dwun/files/dwun-0.96e-implicit-function-declarations.patch
@@ -0,0 +1,14 @@
+Needed for asprintf.
+
+https://bugs.gentoo.org/870676
+--- a/configure.in
++++ b/configure.in
+@@ -8,6 +8,8 @@ AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_PROG_INSTALL
+
++AC_USE_SYSTEM_EXTENSIONS
++
+ dnl Checks for libraries.
+ AC_CHECK_LIB(crypt, crypt)
+ AC_CHECK_LIB(nsl, gethostbyname)
diff --git a/net-dialup/dwun/files/dwun-0.96e-rename-configure.patch b/net-dialup/dwun/files/dwun-0.96e-rename-configure.patch
new file mode 100644
index 000000000000..9a0a843d6efa
--- /dev/null
+++ b/net-dialup/dwun/files/dwun-0.96e-rename-configure.patch
@@ -0,0 +1,9 @@
+--- a/configure.in
++++ b/configure.in
+@@ -1,5 +1,5 @@
+ dnl Process this file with autoconf to produce a configure script.
+-AC_INIT(configure.in)
++AC_INIT(configure.ac)
+ AM_INIT_AUTOMAKE(dwun, 0.96e)
+ AM_CONFIG_HEADER(config.h)
+
diff --git a/net-dialup/dwun/files/dwun-0.96e-respect-AR.patch b/net-dialup/dwun/files/dwun-0.96e-respect-AR.patch
new file mode 100644
index 000000000000..b0b3a707e858
--- /dev/null
+++ b/net-dialup/dwun/files/dwun-0.96e-respect-AR.patch
@@ -0,0 +1,11 @@
+https://bugs.gentoo.org/724968
+--- a/configure.in
++++ b/configure.in
+@@ -7,6 +7,7 @@ dnl Checks for programs.
+ AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_PROG_INSTALL
++AM_PROG_AR
+
+ AC_USE_SYSTEM_EXTENSIONS
+
diff --git a/net-dialup/dwun/metadata.xml b/net-dialup/dwun/metadata.xml
new file mode 100644
index 000000000000..71d315101d66
--- /dev/null
+++ b/net-dialup/dwun/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="sourceforge">dwun</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/freeradius-client/Manifest b/net-dialup/freeradius-client/Manifest
new file mode 100644
index 000000000000..823dfeba0735
--- /dev/null
+++ b/net-dialup/freeradius-client/Manifest
@@ -0,0 +1 @@
+DIST freeradius-client-1.1.8.tar.gz 439294 BLAKE2B 2b0d26dbe8b341ddaa683109fb9f3cb5f8a016ea76d2b85e8c89fcd54d9595ab49602da6c5cdfe95e89dab9264c1eb898670042abf806edfe398a179d4ce3065 SHA512 b79511f11a66f4288735e02dab2e7f8ecb1f5e8b2ee66e3e8e207a9f900572c64db6c1e1ad9ab7c7255d412549c88ba77f229687fc6d9ec9ac1b1d0807682525
diff --git a/net-dialup/freeradius-client/files/freeradius-client-1.1.7-ar-configure.in.patch b/net-dialup/freeradius-client/files/freeradius-client-1.1.7-ar-configure.in.patch
new file mode 100644
index 000000000000..07d477bcc901
--- /dev/null
+++ b/net-dialup/freeradius-client/files/freeradius-client-1.1.7-ar-configure.in.patch
@@ -0,0 +1,10 @@
+--- a/configure.in 2020-07-08 19:20:38.180447370 +0200
++++ b/configure.in 2020-07-08 19:21:00.840479965 +0200
+@@ -33,6 +33,6 @@
+
+ dnl Needed for normal compile
+-AC_PATH_PROG(AR, ar)
++AM_PROG_AR
+ AM_PROG_LIBTOOL
+
+ dnl HAVE_SHADOW_PASSWORDS
diff --git a/net-dialup/freeradius-client/files/freeradius-client-1.1.7-configure-clang16.patch b/net-dialup/freeradius-client/files/freeradius-client-1.1.7-configure-clang16.patch
new file mode 100644
index 000000000000..58cf78c6ff23
--- /dev/null
+++ b/net-dialup/freeradius-client/files/freeradius-client-1.1.7-configure-clang16.patch
@@ -0,0 +1,17 @@
+https://src.fedoraproject.org/rpms/freeradius-client/c/12ee8b567ce2a1b6637ad01e5806a15eeef410cc?branch=rawhide
+
+Add return type to main for autoconf check for C99 compliance.
+https://github.com/FreeRADIUS/freeradius-client/issues/113
+
+--- a/configure.in
++++ b/configure.in
+@@ -212,7 +212,7 @@ then
+ AC_TRY_RUN([
+ #include <sys/utsname.h>
+
+- main(int argc, char **argv)
++ int main(int argc, char **argv)
+ {
+ struct utsname uts;
+ uts.domainname[0] = '\0';
+
diff --git a/net-dialup/freeradius-client/freeradius-client-1.1.8.ebuild b/net-dialup/freeradius-client/freeradius-client-1.1.8.ebuild
new file mode 100644
index 000000000000..4f6aac1be907
--- /dev/null
+++ b/net-dialup/freeradius-client/freeradius-client-1.1.8.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic
+
+DESCRIPTION="FreeRADIUS Client framework"
+HOMEPAGE="https://wiki.freeradius.org/project/Radiusclient"
+SRC_URI="https://github.com/FreeRADIUS/freeradius-client/archive/refs/tags/release_${PV//[.]/_}.tar.gz -> ${PF}.tar.gz"
+
+S="${WORKDIR}/${PN}-release_${PV//[.]/_}"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ppc ppc64 ~riscv ~sparc x86"
+IUSE="shadow static-libs"
+
+DEPEND="
+ !net-dialup/radiusclient-ng
+ virtual/libcrypt:=
+"
+RDEPEND="${DEPEND}"
+
+DOCS=(
+ BUGS doc/{ChangeLog,login.example,release-method.txt,instop.html}
+ README.{radexample,rst}
+)
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.1.7-ar-configure.in.patch"
+ "${FILESDIR}/${PN}-1.1.7-configure-clang16.patch"
+)
+
+src_prepare() {
+ default
+ mv configure.in configure.ac || die \
+ "Renaming configure.in to configure.ac failed"
+
+ eautoreconf
+}
+
+src_configure() {
+ # -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/927175
+ # https://github.com/FreeRADIUS/freeradius-client/issues/128
+ filter-lto
+
+ local myeconfargs=(
+ $(use_enable shadow)
+ --with-secure-path
+ )
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ default
+ newdoc doc/README README.login.example
+
+ use static-libs || \
+ find "${ED}" \( -name '*.a' -o name '*.la' \) -delete
+}
diff --git a/net-dialup/freeradius-client/metadata.xml b/net-dialup/freeradius-client/metadata.xml
new file mode 100644
index 000000000000..b4d9a8614775
--- /dev/null
+++ b/net-dialup/freeradius-client/metadata.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>alarig@swordarmor.fr</email>
+ <name>Alarig Le Lay</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <longdescription>
+ FreeRADIUS Client is a framework and library for writing RADIUS Clients
+ which additionally includes radlogin, a flexible RADIUS aware login
+ replacement, a command line program to send RADIUS accounting records, a
+ utility allowing to send RADIUS AAA requests from command line or from
+ shell scripts and a utility to query the status of a (Merit) RADIUS
+ server.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">FreeRADIUS/freeradius-client</remote-id>
+ </upstream>
+ <use>
+ <flag name="shadow">Enable shadow password support</flag>
+ </use>
+</pkgmetadata>
diff --git a/net-dialup/freeradius/Manifest b/net-dialup/freeradius/Manifest
new file mode 100644
index 000000000000..68b5c2da2a13
--- /dev/null
+++ b/net-dialup/freeradius/Manifest
@@ -0,0 +1,2 @@
+DIST freeradius-server-3.2.7.tar.bz2 3517595 BLAKE2B cd523fbc01e82d87f0944926612223ee2acafc008f0f50447c35263b5dcdd36c8f00c54dde1102a3987b45a7e67426c99a7aee692cf59983c80ead111a2188dd SHA512 c4a13471844ab4ce041db1567e2827370433725beadfbf425d2522b0bf9a4def8ebd41d3c4f45ad350dacdf86bc5bf3952d519d84672c7dde25a12005a009ae5
+DIST freeradius-server-3.2.8.tar.bz2 3671952 BLAKE2B 6266c00c68cbb02de65f88d976453fdcdda552d7554199030640f9bcd60f208afaf75aaac8fbf0a2eea0022eb23ad7b809cb910d48618261ea9f52100732c469 SHA512 31db199c3847bfdb80b726e16cece0d660bd741fae0fca8ba96aaaee30972c657438c4e1fdaa7ef070f84d8b7889a8da8db1defc542b0c0e18f247156f17e0ae
diff --git a/net-dialup/freeradius/files/cb.patch b/net-dialup/freeradius/files/cb.patch
new file mode 100644
index 000000000000..81517944867c
--- /dev/null
+++ b/net-dialup/freeradius/files/cb.patch
@@ -0,0 +1,21 @@
+Index: src/main/cb.c
+--- src/main/cb.c.orig
++++ src/main/cb.c
+@@ -64,7 +64,7 @@ void cbtls_info(SSL const *s, int where, int ret)
+ /*
+ * After a ClientHello, list all the proposed ciphers from the client
+ */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ if (SSL_get_state(s) == TLS_ST_SR_CLNT_HELLO) {
+ int i;
+ int num_ciphers;
+@@ -192,7 +192,7 @@ void cbtls_msg(int write_p, int msg_version, int conte
+ state->info.alert_level = 0x00;
+ state->info.alert_description = 0x00;
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ } else if (content_type == SSL3_RT_INNER_CONTENT_TYPE && buf[0] == SSL3_RT_APPLICATION_DATA) {
+ /* let tls_ack_handler set application_data */
+ state->info.content_type = SSL3_RT_HANDSHAKE;
diff --git a/net-dialup/freeradius/files/freeradius-3.2.1-tls.patch b/net-dialup/freeradius/files/freeradius-3.2.1-tls.patch
new file mode 100644
index 000000000000..27bed5e956e6
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-3.2.1-tls.patch
@@ -0,0 +1,91 @@
+Index: src/main/tls.c
+--- src/main/tls.c.orig
++++ src/main/tls.c
+@@ -688,7 +688,7 @@ tls_session_t *tls_new_session(TALLOC_CTX *ctx, fr_tls
+ /*
+ * Swap empty store with the old one.
+ */
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ conf->old_x509_store = SSL_CTX_get_cert_store(conf->ctx);
+ /* Bump refcnt so the store is kept allocated till next store replacement */
+ X509_STORE_up_ref(conf->old_x509_store);
+@@ -1427,7 +1427,7 @@ void tls_session_information(tls_session_t *tls_sessio
+ if ((SSL_version(tls_session->ssl) > tls_session->conf->max_version) &&
+ (rad_debug_lvl > 0)) {
+ WARN("TLS 1.3 has been negotiated even though it was disabled. This is an OpenSSL Bug.");
+- WARN("Please set: cipher_list = \"DEFAULT@SECLEVEL=1\" in the tls {...} section.");
++ WARN("Setting cipher_list in the tls {...} section might help.");
+ }
+ #endif
+ break;
+@@ -2034,7 +2034,7 @@ done:
+ return 0;
+ }
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static SSL_SESSION *cbtls_get_session(SSL *ssl, unsigned char *data, int len, int *copy)
+ #else
+ static SSL_SESSION *cbtls_get_session(SSL *ssl, const unsigned char *data, int len, int *copy)
+@@ -2418,7 +2418,7 @@ static int cbtls_cache_refresh(SSL *ssl, SSL_SESSION *
+ return 0;
+ }
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static SSL_SESSION *cbtls_cache_load(SSL *ssl, unsigned char *data, int len, int *copy)
+ #else
+ static SSL_SESSION *cbtls_cache_load(SSL *ssl, const unsigned char *data, int len, int *copy)
+@@ -2954,7 +2954,7 @@ int cbtls_verify(int ok, X509_STORE_CTX *ctx)
+ char cn_str[1024];
+ char buf[64];
+ X509 *client_cert;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ const STACK_OF(X509_EXTENSION) *ext_list;
+ #else
+ STACK_OF(X509_EXTENSION) *ext_list;
+@@ -3182,7 +3182,7 @@ int cbtls_verify(int ok, X509_STORE_CTX *ctx)
+ }
+
+ if (lookup == 0) {
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ ext_list = X509_get0_extensions(client_cert);
+ #else
+ X509_CINF *client_inf;
+@@ -3235,7 +3235,7 @@ int cbtls_verify(int ok, X509_STORE_CTX *ctx)
+ value[0] = '0';
+ value[1] = 'x';
+ const unsigned char *srcp;
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ const ASN1_STRING *srcasn1p;
+ srcasn1p = X509_EXTENSION_get_data(ext);
+ srcp = ASN1_STRING_get0_data(srcasn1p);
+@@ -4253,7 +4253,7 @@ post_ca:
+ }
+ }
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER) /* SSL_CTX_set1_sigalgs_list */
+ if (conf->sigalgs_list) {
+ char *list;
+
+@@ -4272,6 +4272,7 @@ post_ca:
+ * Because saying "use TLS 1.1" isn't enough. We have to
+ * send it flowers and cake.
+ */
++#ifndef LIBRESSL_VERSION_NUMBER /* No support for DEFAULT@SECLEVEL=n */
+ if (min_version <= TLS1_1_VERSION) {
+ #if OPENSSL_VERSION_NUMBER >= 0x10101000L
+ int seclevel = SSL_CTX_get_security_level(ctx);
+@@ -4297,6 +4298,7 @@ post_ca:
+ }
+ #endif
+ }
++#endif
+
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ if (conf->disable_tlsv1) {
diff --git a/net-dialup/freeradius/files/mppe_keys_c.patch b/net-dialup/freeradius/files/mppe_keys_c.patch
new file mode 100644
index 000000000000..47ceb3488081
--- /dev/null
+++ b/net-dialup/freeradius/files/mppe_keys_c.patch
@@ -0,0 +1,12 @@
+diff -urN freeradius-server-3.2.4.orig/src/modules/rlm_eap/libeap/mppe_keys.c freeradius-server-3.2.4/src/modules/rlm_eap/libeap/mppe_keys.c
+--- freeradius-server-3.2.4.orig/src/modules/rlm_eap/libeap/mppe_keys.c 2024-05-31 20:14:54.237017045 +0200
++++ freeradius-server-3.2.4/src/modules/rlm_eap/libeap/mppe_keys.c 2024-05-31 20:17:14.077027116 +0200
+@@ -34,7 +34,7 @@
+ #include <openssl/provider.h>
+ #endif
+
+-#if OPENSSL_VERSION_NUMBER >= 0x10101000L
++#if OPENSSL_VERSION_NUMBER >= 0x10101000L && !defined(LIBRESSL_VERSION_NUMBER)
+ #include <openssl/kdf.h>
+
+ void TLS_PRF(SSL *ssl,
diff --git a/net-dialup/freeradius/files/patch-src_main_cb_c b/net-dialup/freeradius/files/patch-src_main_cb_c
new file mode 100644
index 000000000000..2ee57c03c29c
--- /dev/null
+++ b/net-dialup/freeradius/files/patch-src_main_cb_c
@@ -0,0 +1,12 @@
+Index: src/main/cb.c
+--- src/main/cb.c.orig
++++ src/main/cb.c
+@@ -122,7 +122,7 @@ void cbtls_info(SSL const *s, int where, int ret)
+ return;
+ }
+ RERROR("(TLS) %s - %s: Error in %s", conf->name, role, state);
+-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
+ if (RDEBUG_ENABLED3 && (SSL_get_state(s) == TLS_ST_SR_CLNT_HELLO)) goto report_ciphers;
+ #endif
+ }
diff --git a/net-dialup/freeradius/files/radius.conf-r4 b/net-dialup/freeradius/files/radius.conf-r4
new file mode 100644
index 000000000000..a5760d29f7b9
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.conf-r4
@@ -0,0 +1,16 @@
+# Config file for /etc/init.d/radiusd
+
+# see man pages for radiusd run `radiusd -h`
+# for valid cmdline options
+#RADIUSD_OPTS=""
+
+# Change this value if you change it in /etc/raddb/radiusd.conf
+pidfile=/var/run/radiusd/radiusd.pid
+
+# Change these values if you change them in /etc/raddb/radiusd.conf
+RADIUSD_USER=radius
+RADIUSD_GROUP=radius
+
+# If you set up logging to syslog in /etc/raddb/radiusd.conf, you want
+# to uncomment the following line.
+#rc_use="logger"
diff --git a/net-dialup/freeradius/files/radius.conf-r5 b/net-dialup/freeradius/files/radius.conf-r5
new file mode 100644
index 000000000000..7114c32ef923
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.conf-r5
@@ -0,0 +1,18 @@
+# Config file for /etc/init.d/radiusd
+
+# see man pages for radiusd run `radiusd -h`
+# for valid cmdline options
+#RADIUSD_OPTS=""
+
+# Change this value if you change it in /etc/raddb/radiusd.conf
+pidfile=/var/run/radiusd/radiusd.pid
+
+# Change these values if you change them in /etc/raddb/radiusd.conf
+RADIUSD_USER=radius
+RADIUSD_GROUP=radius
+
+RADIUSD_LOGPATH=/var/log/radius
+
+# If you set up logging to syslog in /etc/raddb/radiusd.conf, you want
+# to uncomment the following line.
+#rc_use="logger"
diff --git a/net-dialup/freeradius/files/radius.conf-r6 b/net-dialup/freeradius/files/radius.conf-r6
new file mode 100644
index 000000000000..50d2a1ce1f14
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.conf-r6
@@ -0,0 +1,22 @@
+# Config file for /etc/init.d/radiusd
+
+# see man pages for radiusd run `radiusd -h`
+# for valid cmdline options
+#RADIUSD_OPTS=""
+
+# Change this value if you change it in /etc/raddb/radiusd.conf
+pidfile=/run/radiusd/radiusd.pid
+
+# Change these values if you change them in /etc/raddb/radiusd.conf
+RADIUSD_USER=radius
+RADIUSD_GROUP=radius
+
+RADIUSD_LOGPATH=/var/log/radius
+
+# If you set up logging to syslog in /etc/raddb/radiusd.conf, you want
+# to uncomment the following line.
+#rc_use="logger"
+
+# If you use ldap, start the ldap server prior to FreeRADIUS to avoid
+# startup crashes.
+#rc_use="ldap"
diff --git a/net-dialup/freeradius/files/radius.init-r3 b/net-dialup/freeradius/files/radius.init-r3
new file mode 100644
index 000000000000..b4d7c380aeba
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.init-r3
@@ -0,0 +1,31 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command=/usr/sbin/radiusd
+command_args="${RADIUSD_OPTS}"
+pidfile="${pidfile:-/run/radiusd/radiusd.pid}"
+extra_started_commands="reload"
+
+depend() {
+ need localmount
+ use dns
+}
+
+start_pre() {
+ if [ ! -f /etc/raddb/radiusd.conf ] ; then
+ eerror "No /etc/raddb/radiusd.conf file exists!"
+ return 1
+ fi
+
+ checkpath -m0750 -o "${RADIUSD_USER:-root}:${RADIUSD_GROUP:-root}" -d \
+ $(dirname ${pidfile}) /var/log/radius
+ checkpath -m0750 -o "${RADIUSD_USER:-root}:${RADIUSD_GROUP:-root}" -d \
+ $(dirname ${pidfile}) /run/radiusd
+}
+
+reload() {
+ ebegin "Reloading radiusd"
+ kill -HUP $(cat ${pidfile})
+ eend $?
+}
diff --git a/net-dialup/freeradius/files/radius.init-r4 b/net-dialup/freeradius/files/radius.init-r4
new file mode 100644
index 000000000000..dee1842e5cbf
--- /dev/null
+++ b/net-dialup/freeradius/files/radius.init-r4
@@ -0,0 +1,31 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command=/usr/sbin/radiusd
+command_args="${RADIUSD_OPTS}"
+pidfile="${pidfile:-/run/radiusd/radiusd.pid}"
+extra_started_commands="reload"
+
+depend() {
+ need localmount
+ use dns
+}
+
+start_pre() {
+ if [ ! -f /etc/raddb/radiusd.conf ] ; then
+ eerror "No /etc/raddb/radiusd.conf file exists!"
+ return 1
+ fi
+
+ checkpath -m0750 -o "${RADIUSD_USER:-root}:${RADIUSD_GROUP:-root}" -d \
+ $(dirname ${pidfile}) "${RADIUSD_LOGPATH:-/var/log/radius}"
+ checkpath -m0750 -o "${RADIUSD_USER:-root}:${RADIUSD_GROUP:-root}" -d \
+ $(dirname ${pidfile}) /run/radiusd
+}
+
+reload() {
+ ebegin "Reloading radiusd"
+ kill -HUP $(cat ${pidfile})
+ eend $?
+}
diff --git a/net-dialup/freeradius/files/rlm_eap_fast.patch b/net-dialup/freeradius/files/rlm_eap_fast.patch
new file mode 100644
index 000000000000..b6e6cebbc7e4
--- /dev/null
+++ b/net-dialup/freeradius/files/rlm_eap_fast.patch
@@ -0,0 +1,21 @@
+Index: src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c
+--- src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c.orig
++++ src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c
+@@ -200,7 +200,7 @@ static void eap_fast_session_ticket(tls_session_t *tls
+ }
+
+ // hostap:src/crypto/tls_openssl.c:tls_sess_sec_cb()
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ static int _session_secret(SSL *s, void *secret, int *secret_len,
+ UNUSED STACK_OF(SSL_CIPHER) *peer_ciphers,
+ UNUSED SSL_CIPHER **cipher, void *arg)
+@@ -224,7 +224,7 @@ static int _session_secret(SSL *s, void *secret, int *
+
+ RDEBUG("processing PAC-Opaque");
+
+-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ eap_fast_session_ticket(tls_session, s->s3->client_random, s->s3->server_random, secret, secret_len);
+ #else
+ uint8_t client_random[SSL3_RANDOM_SIZE];
diff --git a/net-dialup/freeradius/freeradius-3.2.7.ebuild b/net-dialup/freeradius/freeradius-3.2.7.ebuild
new file mode 100644
index 000000000000..49372f077f3c
--- /dev/null
+++ b/net-dialup/freeradius/freeradius-3.2.7.ebuild
@@ -0,0 +1,291 @@
+# Copyright 2021-2025 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+AUTOTOOLS_DEPEND=">=dev-build/autoconf-2.69"
+inherit autotools pam python-single-r1 systemd
+
+MY_PN=${PN}-server
+MY_P=${MY_PN}-${PV}
+MY_PV=$(ver_rs 1- "_")
+
+DESCRIPTION="Highly configurable free RADIUS server"
+HOMEPAGE="https://freeradius.org/"
+SRC_URI="https://github.com/FreeRADIUS/freeradius-server/releases/download/release_${MY_PV}/${MY_P}.tar.bz2"
+S="${WORKDIR}"/${MY_P}
+
+KEYWORDS="amd64 ~arm arm64 ~ppc ~ppc64 ~sparc x86"
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="
+ debug firebird iodbc kerberos ldap memcached mysql mongodb odbc oracle pam
+ postgres python readline redis samba sqlite ssl systemd
+"
+RESTRICT="test firebird? ( bindist )"
+
+# TODO: rlm_mschap works with both samba library or without. I need to avoid
+# linking of samba library if -samba is used.
+
+# TODO: unconditional json-c for now as automagic dep despite efforts to stop it
+# ditto libpcap. Can restore USE=rest, USE=pcap if/when fixed.
+
+RDEPEND="acct-group/radius
+ acct-user/radius
+ !net-dialup/cistronradius
+ dev-libs/libltdl
+ dev-libs/libpcre
+ dev-libs/json-c:=
+ dev-lang/perl:=
+ net-libs/libpcap
+ net-misc/curl
+ sys-libs/gdbm:=
+ sys-libs/libcap
+ sys-libs/talloc
+ virtual/libcrypt:=
+ firebird? ( dev-db/firebird )
+ iodbc? ( dev-db/libiodbc )
+ kerberos? ( virtual/krb5 )
+ ldap? ( net-nds/openldap:= )
+ memcached? ( dev-libs/libmemcached )
+ mysql? ( dev-db/mysql-connector-c:= )
+ mongodb? ( >=dev-libs/mongo-c-driver-1.13.0-r1 )
+ odbc? ( dev-db/unixODBC )
+ oracle? ( dev-db/oracle-instantclient[sdk] )
+ pam? ( sys-libs/pam )
+ postgres? ( dev-db/postgresql:= )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline:= )
+ redis? ( dev-libs/hiredis:= )
+ samba? ( net-fs/samba )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? (
+ >=dev-libs/openssl-1.0.2:=
+
+ )
+ systemd? ( sys-apps/systemd:= )"
+DEPEND="${RDEPEND}"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+# bug #721040
+QA_SONAME="usr/lib.*/libfreeradius-.*.so"
+
+PATCHES=(
+ "${FILESDIR}"/mppe_keys_c.patch
+)
+
+pkg_setup() {
+ if use python ; then
+ python-single-r1_pkg_setup
+ export PYTHONBIN="${EPYTHON}"
+ fi
+}
+
+src_prepare() {
+ # Most of the configuration options do not appear as ./configure
+ # switches. Instead it identifies the directories that are available
+ # and run through them. These might check for the presence of
+ # various libraries, in which case they are not built. To avoid
+ # automagic dependencies, we just remove all the modules that we're
+ # not interested in using.
+
+
+ eapply_user
+ default
+
+ use ssl || { rm -r src/modules/rlm_eap/types/rlm_eap_{tls,ttls,peap} || die ; }
+ use ldap || { rm -r src/modules/rlm_ldap || die ; }
+ use kerberos || { rm -r src/modules/rlm_krb5 || die ; }
+ use memcached || { rm -r src/modules/rlm_cache/drivers/rlm_cache_memcached || die ; }
+ use pam || { rm -r src/modules/rlm_pam || die ; }
+
+ # Drop support for python2
+ rm -r src/modules/rlm_python || die
+
+ use python || { rm -r src/modules/rlm_python3 || die ; }
+ use redis || { rm -r src/modules/rlm_redis{,who} || die ; }
+ # Do not install ruby rlm module, bug #483108
+ rm -r src/modules/rlm_ruby || die
+
+ # These are all things we don't have in portage/I don't want to deal
+ # with myself.
+ #
+ # Requires TNCS library
+ rm -r src/modules/rlm_eap/types/rlm_eap_tnc || die
+ # Requires libeap-ikev2
+ rm -r src/modules/rlm_eap/types/rlm_eap_ikev2 || die
+ # Requires some membership.h
+ rm -r src/modules/rlm_opendirectory || die
+ # ?
+ rm -r src/modules/rlm_sql/drivers/rlm_sql_{db2,freetds} || die
+
+ # SQL drivers that are not part of experimental are loaded from a
+ # file, so we have to remove them from the file itself when we
+ # remove them.
+ usesqldriver() {
+ local flag=$1
+ local driver=rlm_sql_${2:-${flag}}
+
+ if ! use ${flag} ; then
+ rm -r src/modules/rlm_sql/drivers/${driver} || die
+ sed -i -e /${driver}/d src/modules/rlm_sql/stable || die
+ fi
+ }
+
+ sed -i \
+ -e 's:^#\tuser = :\tuser = :g' \
+ -e 's:^#\tgroup = :\tgroup = :g' \
+ -e 's:/var/run/radiusd:/run/radiusd:g' \
+ -e '/^run_dir/s:${localstatedir}::g' \
+ raddb/radiusd.conf.in || die
+
+ # - Verbosity
+ # - B uild shared libraries using jlibtool -shared
+ sed -i \
+ -e 's|--silent ||g' \
+ -e 's:--mode=\(compile\|link\):& -shared:g' \
+ scripts/libtool.mk || die
+
+ # Crude measure to stop jlibtool from running ranlib and ar
+ sed -i \
+ -e '/LIBRARIAN/s|".*"|"true"|g' \
+ -e '/RANLIB/s|".*"|"true"|g' \
+ scripts/jlibtool.c || die
+
+ usesqldriver mysql
+ usesqldriver postgres postgresql
+ usesqldriver firebird
+ usesqldriver iodbc
+ usesqldriver odbc unixodbc
+ usesqldriver oracle
+ usesqldriver sqlite
+ usesqldriver mongodb mongo
+
+ eautoreconf
+}
+
+src_configure() {
+ # Do not try to enable static with static-libs; upstream is a
+ # massacre of libtool best practices so you also have to make sure
+ # to --enable-shared explicitly.
+ local myeconfargs=(
+ --enable-shared
+ --disable-static
+ --disable-ltdl-install
+ --disable-silent-rules
+ --with-system-libtool
+ --with-system-libltdl
+
+ --enable-strict-dependencies
+ --without-rlm_couchbase
+ --without-rlm_securid
+ --without-rlm_unbound
+ --without-rlm_idn
+
+ # Our OpenSSL should be patched. Avoid false-positive failures.
+ --disable-openssl-version-check
+ --with-ascend-binary
+ --with-udpfromto
+ --with-dhcp
+ --with-pcre
+ --with-iodbc-include-dir=/usr/include/iodbc
+ --with-experimental-modules
+ --with-docdir=/usr/share/doc/${PF}
+ --with-logdir=/var/log/radius
+ $(use_enable debug developer)
+ $(use_with ldap edir)
+ $(use_with redis rlm_cache_redis)
+ $(use_with redis rlm_redis)
+ $(use_with redis rlm_rediswho)
+ $(use_with ssl openssl)
+ $(use_with systemd systemd)
+ )
+
+ # bug #77613
+ if has_version app-crypt/heimdal ; then
+ myeconfargs+=( --enable-heimdal-krb5 )
+ fi
+
+ if use python ; then
+ myeconfargs+=(
+ --with-rlm-python3-bin=${EPYTHON}
+ --with-rlm-python3-config-bin=${EPYTHON}-config
+ )
+ fi
+
+ if ! use readline ; then
+ export ac_cv_lib_readline=no
+ fi
+
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ # Verbose, do not generate certificates
+ emake \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS=''
+}
+
+src_install() {
+ dodir /etc
+ diropts -m0750 -o root -g radius
+ dodir /etc/raddb
+ diropts -m0750 -o radius -g radius
+ dodir /var/log/radius
+ keepdir /var/log/radius/radacct
+ diropts
+
+ # - Verbose, do not install certificates
+ # - Parallel install fails (bug #509498)
+ emake -j1 \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS='' \
+ R="${D}" \
+ install
+
+ if use pam ; then
+ pamd_mimic_system radiusd auth account password session
+ fi
+
+ # bug #711756
+ fowners -R radius:radius /etc/raddb
+ fowners -R radius:radius /var/log/radius
+
+ dodoc CREDITS
+
+ rm "${ED}"/usr/sbin/rc.radiusd || die
+
+ newinitd "${FILESDIR}"/radius.init-r4 radiusd
+ newconfd "${FILESDIR}"/radius.conf-r6 radiusd
+
+ if ! use systemd ; then
+ # If systemd builtin is not enabled we need use Type=Simple
+ # as systemd .service
+ sed -i -e 's:^Type=.*::g' \
+ -e 's:^WatchdogSec=.*::g' -e 's:^NotifyAccess=all.*::g' \
+ "${S}"/debian/freeradius.service
+ fi
+ systemd_dounit "${S}"/debian/freeradius.service
+
+ find "${ED}" \( -name "*.a" -o -name "*.la" \) -delete || die
+}
+
+pkg_config() {
+ if use ssl ; then
+ cd "${ROOT}"/etc/raddb/certs || die
+ ./bootstrap || die "Error while running ./bootstrap script."
+ chown root:radius "${ROOT}"/etc/raddb/certs || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/ca.pem || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/server.{key,crt,pem} || die
+ fi
+}
+
+pkg_preinst() {
+ if ! has_version ${CATEGORY}/${PN} && use ssl ; then
+ elog "You have to run \`emerge --config =${CATEGORY}/${PF}\` to be able"
+ elog "to start the radiusd service."
+ fi
+}
diff --git a/net-dialup/freeradius/freeradius-3.2.8.ebuild b/net-dialup/freeradius/freeradius-3.2.8.ebuild
new file mode 100644
index 000000000000..6b23bd216ff3
--- /dev/null
+++ b/net-dialup/freeradius/freeradius-3.2.8.ebuild
@@ -0,0 +1,293 @@
+# Copyright 2021-2026 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+AUTOTOOLS_DEPEND=">=dev-build/autoconf-2.69"
+inherit autotools pam python-single-r1 systemd
+
+MY_PN=${PN}-server
+MY_P=${MY_PN}-${PV}
+MY_PV=$(ver_rs 1- "_")
+
+DESCRIPTION="Highly configurable free RADIUS server"
+HOMEPAGE="https://freeradius.org/"
+SRC_URI="https://github.com/FreeRADIUS/freeradius-server/releases/download/release_${MY_PV}/${MY_P}.tar.bz2"
+S="${WORKDIR}"/${MY_P}
+
+KEYWORDS="amd64 ~arm arm64 ~ppc ~ppc64 ~sparc x86"
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="
+ debug firebird iodbc kafka kerberos ldap memcached mysql mongodb odbc oracle pam
+ postgres python readline redis samba sqlite ssl systemd
+"
+RESTRICT="test firebird? ( bindist )"
+
+# TODO: rlm_mschap works with both samba library or without. I need to avoid
+# linking of samba library if -samba is used.
+
+# TODO: unconditional json-c for now as automagic dep despite efforts to stop it
+# ditto libpcap. Can restore USE=rest, USE=pcap if/when fixed.
+
+RDEPEND="acct-group/radius
+ acct-user/radius
+ !net-dialup/cistronradius
+ dev-libs/libltdl
+ dev-libs/libpcre
+ dev-libs/json-c:=
+ dev-lang/perl:=
+ net-libs/libpcap
+ net-misc/curl
+ sys-libs/gdbm:=
+ sys-libs/libcap
+ sys-libs/talloc
+ virtual/libcrypt:=
+ firebird? ( dev-db/firebird )
+ iodbc? ( dev-db/libiodbc )
+ kafka? ( dev-libs/librdkafka:= )
+ kerberos? ( virtual/krb5 )
+ ldap? ( net-nds/openldap:= )
+ memcached? ( dev-libs/libmemcached )
+ mysql? ( dev-db/mysql-connector-c:= )
+ mongodb? ( >=dev-libs/mongo-c-driver-1.13.0-r1 )
+ odbc? ( dev-db/unixODBC )
+ oracle? ( dev-db/oracle-instantclient[sdk] )
+ pam? ( sys-libs/pam )
+ postgres? ( dev-db/postgresql:= )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline:= )
+ redis? ( dev-libs/hiredis:= )
+ samba? ( net-fs/samba )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? (
+ >=dev-libs/openssl-1.0.2:=
+
+ )
+ systemd? ( sys-apps/systemd:= )"
+DEPEND="${RDEPEND}"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+# bug #721040
+QA_SONAME="usr/lib.*/libfreeradius-.*.so"
+
+PATCHES=(
+ "${FILESDIR}"/mppe_keys_c.patch
+)
+
+pkg_setup() {
+ if use python ; then
+ python-single-r1_pkg_setup
+ export PYTHONBIN="${EPYTHON}"
+ fi
+}
+
+src_prepare() {
+ # Most of the configuration options do not appear as ./configure
+ # switches. Instead it identifies the directories that are available
+ # and run through them. These might check for the presence of
+ # various libraries, in which case they are not built. To avoid
+ # automagic dependencies, we just remove all the modules that we're
+ # not interested in using.
+
+
+ eapply_user
+ default
+
+ use ssl || { rm -r src/modules/rlm_eap/types/rlm_eap_{tls,ttls,peap} || die ; }
+ use ldap || { rm -r src/modules/rlm_ldap || die ; }
+ use kerberos || { rm -r src/modules/rlm_krb5 || die ; }
+ use memcached || { rm -r src/modules/rlm_cache/drivers/rlm_cache_memcached || die ; }
+ use pam || { rm -r src/modules/rlm_pam || die ; }
+
+ # Drop support for python2
+ rm -r src/modules/rlm_python || die
+
+ use python || { rm -r src/modules/rlm_python3 || die ; }
+ use redis || { rm -r src/modules/rlm_redis{,who} || die ; }
+ # Do not install ruby rlm module, bug #483108
+ rm -r src/modules/rlm_ruby || die
+
+ # These are all things we don't have in portage/I don't want to deal
+ # with myself.
+ #
+ # Requires TNCS library
+ rm -r src/modules/rlm_eap/types/rlm_eap_tnc || die
+ # Requires libeap-ikev2
+ rm -r src/modules/rlm_eap/types/rlm_eap_ikev2 || die
+ # Requires some membership.h
+ rm -r src/modules/rlm_opendirectory || die
+ # ?
+ rm -r src/modules/rlm_sql/drivers/rlm_sql_{db2,freetds} || die
+
+ # SQL drivers that are not part of experimental are loaded from a
+ # file, so we have to remove them from the file itself when we
+ # remove them.
+ usesqldriver() {
+ local flag=$1
+ local driver=rlm_sql_${2:-${flag}}
+
+ if ! use ${flag} ; then
+ rm -r src/modules/rlm_sql/drivers/${driver} || die
+ sed -i -e /${driver}/d src/modules/rlm_sql/stable || die
+ fi
+ }
+
+ sed -i \
+ -e 's:^#\tuser = :\tuser = :g' \
+ -e 's:^#\tgroup = :\tgroup = :g' \
+ -e 's:/var/run/radiusd:/run/radiusd:g' \
+ -e '/^run_dir/s:${localstatedir}::g' \
+ raddb/radiusd.conf.in || die
+
+ # - Verbosity
+ # - B uild shared libraries using jlibtool -shared
+ sed -i \
+ -e 's|--silent ||g' \
+ -e 's:--mode=\(compile\|link\):& -shared:g' \
+ scripts/libtool.mk || die
+
+ # Crude measure to stop jlibtool from running ranlib and ar
+ sed -i \
+ -e '/LIBRARIAN/s|".*"|"true"|g' \
+ -e '/RANLIB/s|".*"|"true"|g' \
+ scripts/jlibtool.c || die
+
+ usesqldriver mysql
+ usesqldriver postgres postgresql
+ usesqldriver firebird
+ usesqldriver iodbc
+ usesqldriver odbc unixodbc
+ usesqldriver oracle
+ usesqldriver sqlite
+ usesqldriver mongodb mongo
+
+ eautoreconf
+}
+
+src_configure() {
+ # Do not try to enable static with static-libs; upstream is a
+ # massacre of libtool best practices so you also have to make sure
+ # to --enable-shared explicitly.
+ local myeconfargs=(
+ --enable-shared
+ --disable-static
+ --disable-ltdl-install
+ --disable-silent-rules
+ --with-system-libtool
+ --with-system-libltdl
+
+ --enable-strict-dependencies
+ --without-rlm_couchbase
+ --without-rlm_securid
+ --without-rlm_unbound
+ --without-rlm_idn
+
+ # Our OpenSSL should be patched. Avoid false-positive failures.
+ --disable-openssl-version-check
+ --with-ascend-binary
+ --with-udpfromto
+ --with-dhcp
+ --with-pcre
+ --with-iodbc-include-dir=/usr/include/iodbc
+ --with-experimental-modules
+ --with-docdir=/usr/share/doc/${PF}
+ --with-logdir=/var/log/radius
+ $(use_enable debug developer)
+ $(use_with kafka rlm_kafka)
+ $(use_with ldap edir)
+ $(use_with redis rlm_cache_redis)
+ $(use_with redis rlm_redis)
+ $(use_with redis rlm_rediswho)
+ $(use_with ssl openssl)
+ $(use_with systemd systemd)
+ )
+
+ # bug #77613
+ if has_version app-crypt/heimdal ; then
+ myeconfargs+=( --enable-heimdal-krb5 )
+ fi
+
+ if use python ; then
+ myeconfargs+=(
+ --with-rlm-python3-bin=${EPYTHON}
+ --with-rlm-python3-config-bin=${EPYTHON}-config
+ )
+ fi
+
+ if ! use readline ; then
+ export ac_cv_lib_readline=no
+ fi
+
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ # Verbose, do not generate certificates
+ emake \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS=''
+}
+
+src_install() {
+ dodir /etc
+ diropts -m0750 -o root -g radius
+ dodir /etc/raddb
+ diropts -m0750 -o radius -g radius
+ dodir /var/log/radius
+ keepdir /var/log/radius/radacct
+ diropts
+
+ # - Verbose, do not install certificates
+ # - Parallel install fails (bug #509498)
+ emake -j1 \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS='' \
+ R="${D}" \
+ install
+
+ if use pam ; then
+ pamd_mimic_system radiusd auth account password session
+ fi
+
+ # bug #711756
+ fowners -R radius:radius /etc/raddb
+ fowners -R radius:radius /var/log/radius
+
+ dodoc CREDITS
+
+ rm "${ED}"/usr/sbin/rc.radiusd || die
+
+ newinitd "${FILESDIR}"/radius.init-r4 radiusd
+ newconfd "${FILESDIR}"/radius.conf-r6 radiusd
+
+ if ! use systemd ; then
+ # If systemd builtin is not enabled we need use Type=Simple
+ # as systemd .service
+ sed -i -e 's:^Type=.*::g' \
+ -e 's:^WatchdogSec=.*::g' -e 's:^NotifyAccess=all.*::g' \
+ "${S}"/debian/freeradius.service
+ fi
+ systemd_dounit "${S}"/debian/freeradius.service
+
+ find "${ED}" \( -name "*.a" -o -name "*.la" \) -delete || die
+}
+
+pkg_config() {
+ if use ssl ; then
+ cd "${ROOT}"/etc/raddb/certs || die
+ ./bootstrap || die "Error while running ./bootstrap script."
+ chown root:radius "${ROOT}"/etc/raddb/certs || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/ca.pem || die
+ chown root:radius "${ROOT}"/etc/raddb/certs/server.{key,crt,pem} || die
+ fi
+}
+
+pkg_preinst() {
+ if ! has_version ${CATEGORY}/${PN} && use ssl ; then
+ elog "You have to run \`emerge --config =${CATEGORY}/${PF}\` to be able"
+ elog "to start the radiusd service."
+ fi
+}
diff --git a/net-dialup/freeradius/metadata.xml b/net-dialup/freeradius/metadata.xml
new file mode 100644
index 000000000000..dc2309397907
--- /dev/null
+++ b/net-dialup/freeradius/metadata.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>dev@liguros.net</email>
+ <name>Development</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>geaaru@gmail.com</email>
+ <name>Daniele Rondina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:freeradius:freeradius</remote-id>
+ </upstream>
+ <use>
+ <flag name="memcached">Include <pkg>dev-libs/libmemcached</pkg> in caching drivers</flag>
+ <flag name="pcap">Build the RADIUS sniffer which requires <pkg>net-libs/libpcap</pkg>.</flag>
+ <flag name="rest">Include support for sending and receiving HTTP requests</flag>
+ <flag name="redis">Include support for Redis database</flag>
+ <flag name="mongodb">Include support for MongoDB database</flag>
+ </use>
+ <origin>ports</origin>
+</pkgmetadata> \ No newline at end of file
diff --git a/net-dialup/isdn-firmware/Manifest b/net-dialup/isdn-firmware/Manifest
new file mode 100644
index 000000000000..f6fe688dbb05
--- /dev/null
+++ b/net-dialup/isdn-firmware/Manifest
@@ -0,0 +1 @@
+DIST i4lfirm-2011.8.29-lp152.8.37.x86_64.rpm 1274484 BLAKE2B 63a698adadeb0fe9e11533cf56d2cd026552e599e0e47dbe07694558af07aedfe51d626c4894c6b0cb59d49e85486de6d408405047be39eb1086361b4129f7eb SHA512 fac70bbe8983cfb02f53880c04e317f52a33b2972fd657b5dd375cb4924cf61efe8da8cb35448d39fc628599da35fa24f3b1275a0f76c1421bbaeab1e17713f9
diff --git a/net-dialup/isdn-firmware/isdn-firmware-2011.8.29.8.37.ebuild b/net-dialup/isdn-firmware/isdn-firmware-2011.8.29.8.37.ebuild
new file mode 100644
index 000000000000..8f425c6b48c3
--- /dev/null
+++ b/net-dialup/isdn-firmware/isdn-firmware-2011.8.29.8.37.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+RPM_COMPRESS_TYPE=xz
+inherit rpm
+
+MY_PN="i4lfirm"
+MY_PV="$(ver_cut 1-3)"
+MY_PP="lp152.$(ver_cut 4-)"
+MY_P="${MY_PN}-${MY_PV}-${MY_PP}"
+
+DESCRIPTION="ISDN firmware for active ISDN cards (AVM, Eicon, etc.)"
+HOMEPAGE="https://www.isdn4linux.de/"
+SRC_URI="https://rsync.opensuse.org/distribution/leap/15.2/repo/oss/x86_64/${MY_P}.x86_64.rpm"
+S="${WORKDIR}/lib/firmware/isdn"
+
+LICENSE="freedist" #446158
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+
+# Bug #827318
+BDEPEND="app-arch/xz-utils[extra-filters(+)]"
+
+src_install() {
+ insinto $(get_libdir)/firmware
+ insopts -m 0644
+ doins *
+}
diff --git a/net-dialup/isdn-firmware/metadata.xml b/net-dialup/isdn-firmware/metadata.xml
new file mode 100644
index 000000000000..115e9d64a669
--- /dev/null
+++ b/net-dialup/isdn-firmware/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/kpnadsl4linux/Manifest b/net-dialup/kpnadsl4linux/Manifest
new file mode 100644
index 000000000000..1dd270146b76
--- /dev/null
+++ b/net-dialup/kpnadsl4linux/Manifest
@@ -0,0 +1 @@
+DIST kpnadsl4linux-1.11.tar.gz 15068 BLAKE2B 2199414df46df750ce5df12f44eadee29114e3b8211283a39bca26b0d2f697609aeaf3f022679fa165971b1182e175e8e15c17e7afd0315feca75a3302252e5a SHA512 050c879aff115169e6cb0f0bf081a8172a3f4735f7231d1e5d1f245b34a1b522691e7640d146eac3c894a17c2901e59f1f942f7be5a2eed5ce1eb8c96bfef201
diff --git a/net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-Makefile.patch b/net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-Makefile.patch
new file mode 100644
index 000000000000..051dffe47fc5
--- /dev/null
+++ b/net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-Makefile.patch
@@ -0,0 +1,25 @@
+--- a/Makefile
++++ b/Makefile
+@@ -1,18 +1,18 @@
+ # Makefile for ADSL4Linux 1.11 Gentoo Edition
+
+ all: adsl
+
+ adsl: adsl.o adslstatus.o adslstatus.h adsl.h
+- gcc adsl.o adslstatus.o -o adsl
++ $(CC) $(LDFLAGS) adsl.o adslstatus.o -o adsl $(LIBS)
+
+ adsl.o: adsl.c adsl.h
+- gcc -c adsl.c
++ $(CC) $(CPPFLAGS) $(CFLAGS) -c adsl.c
+
+ adslstatus: adslstatus.o adslstatus.h adsl.h
+- gcc adslstatus.o -o adslstatus
++ $(CC) $(LDFLAGS) adslstatus.o -o adslstatus $(LIBS)
+
+ adslstatus.o: adslstatus.c adslstatus.h adsl.h
+- gcc -c adslstatus.c
++ $(CC) $(CPPFLAGS) $(CFLAGS) -c adslstatus.c
+
+ clean:
+ rm adsl *.o
diff --git a/net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-fno-common.patch b/net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-fno-common.patch
new file mode 100644
index 000000000000..586b517822fe
--- /dev/null
+++ b/net-dialup/kpnadsl4linux/files/kpnadsl4linux-1.11-fno-common.patch
@@ -0,0 +1,13 @@
+--- a/adslstatus.c
++++ b/adslstatus.c
+@@ -40,8 +40,8 @@ version 0.13 moved logging to /var/log/kpnadsl4linux (by Sam Besselink <sambesse
+ #define FOURGB 4294967296.0
+
+ /* global variables */
+-time_t tmNow;
+-uid_t uid;
++extern time_t tmNow;
++extern uid_t uid;
+ char pppBuf[256]; /* textbuffer containing ppp0 info */
+ struct stat st; /* contains filestatus of STATFILE */
+ double received, sent ;
diff --git a/net-dialup/kpnadsl4linux/files/kpnadsl4linux-config b/net-dialup/kpnadsl4linux/files/kpnadsl4linux-config
new file mode 100644
index 000000000000..439528e14f4a
--- /dev/null
+++ b/net-dialup/kpnadsl4linux/files/kpnadsl4linux-config
@@ -0,0 +1,100 @@
+#/bin/bash
+
+# This script is to be distributed on the Gentoo liveCD's under the terms or the GNU General Public License version 2 or later
+# Copyright 2002 Sam Besselink (sambesselink@planet.nl)
+# This script does some configuration needed before it's possible to make a succesful pptp tunnel.
+
+a4lvarconfig() {
+ # Get username, password and 'phonenumber' (pc1/pc2/pc3/...)
+ echo "What's your username? (ie. myname@subscription-form)"; read USERNAME;
+ echo ""
+ echo "What's your password?"; read PAWD;
+ echo ""
+ echo "If you have a subscription with multiple ip addresses, please specify your 'pc-number'? (ie. pc3) Press"\
+ "ENTER if you have no idea what I'm talking about."; read PCNUMBER;
+ echo ""
+ if [ -z ${PCNUMBER} ]; then PCNUMBER=pc1; else :; fi;
+ echo "Are these, in order, your username, password and pc-number?";
+ echo "username: ${USERNAME}";
+ echo "password: ${PAWD}";
+ echo "pc-number: ${PCNUMBER}";
+ # Ask whether settings are correct and act accordingly.
+ CHECK="Yes No";
+ select CHCKCHCK in ${CHECK}; do
+ if [ ${CHCKCHCK} = "Yes" ];
+ # Get username etc. again if last try was incorrect.
+ then adslconfigins;
+ # Else go to the next step.
+ else echo ""; echo ""; echo ""; a4lvarconfig;
+ fi
+ done
+}
+
+adslconfigins() {
+ if [ -d /etc/ppp/peers ]; then :; else mkdir /etc/ppp/peers; fi
+ cd /etc/ppp/peers
+
+ # Save your settings to a file.
+ echo "idle 0" > .adsl
+ echo "noauth" >> .adsl
+ echo "user ${USERNAME}" >> .adsl
+ echo "usepeerdns" >> .adsl
+ echo "defaultroute" >> .adsl
+ echo "linkname mxstream" >> .adsl
+ echo 'pty "/usr/sbin/pptp 10.0.0.138 --nolaunchpppd --phone '"${PCNUMBER}"'"' >> .adsl
+ if [ -e adsl ]; then mv .adsl ._cfg0000_adsl; else mv .adsl adsl; fi
+ chmod 644 adsl
+ pap-secretsins;
+}
+
+pap-secretsins() {
+ if [ -d /etc/ppp/peers ]; then :; else mkdir /etc/ppp/peers; fi
+ cd /etc/ppp
+ # Save the 'secret' (password) in the secrets file.
+ echo "# Secrets for authentication using PAP" > .pap-secrets
+ echo "# client server secret ip-addresses" >> .pap-secrets
+ echo "${USERNAME} * "'"'"${PAWD}"'"'" *" >> .pap-secrets
+ if [ -e pap-secrets ]; then mv .pap-secrets ._cfg0000_pap-secrets; else mv .pap-secrets pap-secrets; fi
+ loggingadsl;
+}
+
+loggingadsl() {
+ # Crontab Logging
+ echo "Trying to install logging..."
+ local TESTER="root test -x /usr/sbin/adsl && /usr/sbin/adsl update"
+ local STRING1="/5 * * * * ${TESTER}"
+ # Check if /etc/crontab exists
+ if [ -e /etc/crontab ]; then \
+ # If cron works install, else don't.
+ if [ `grep -c "/5 \* \* \* \* ${TESTER}" /etc/crontab` != "0" ]; then echo "Not adding string for crontab";
+ else echo -e '\n# 5-minute ADSL log update' >> /etc/crontab;
+ echo -e "${STRING1}" >> /etc/crontab;
+ echo "Added to crontab: a 5 minute log update";
+ fi;
+ else echo "/etc/crontab doesn't exist!"
+ fi;
+
+ # ip-down.local logging
+ local TEST=""
+ local TEST2="^/usr/sbin/adsl stoplog$"
+ local STRING2="/usr/sbin/adsl stoplog"
+ if [ -e /etc/ppp/ip-down.local ]; then :; else touch /etc/ppp/ip-down.local; fi
+ local test=`grep -c "${TEST2}" /etc/ppp/ip-down.local`
+ # If there already is such a string, don't do anything, else add it.
+ if [ "${TEST}" != "0" ]; then echo "Not adding string for log in /etc/ppp/ip-down.local";
+ else echo -e '\n# ADSL log save' >> /etc/ppp/ip-down.local;
+ echo -e "${STRING2}" >> /etc/ppp/ip-down.local;
+ echo "Added to ip-down.local: log save";
+ fi;
+
+ echo "Configuration is done!"
+ echo "If you want you can check/tweak your settings by editting /etc/ppp/pap-secrets"
+ echo "and /etc/ppp/peers/adsl. Enjoy!"
+ echo -e "\e[33;01m* IMPORTANT:\e[00;00m files in /etc _MAY_ need updating.";
+ echo -e "\e[33;01m*\e[00;00m Type \e[32;01memerge --help config \e[00;00mto learn how to update config files.";
+
+ exit;
+}
+
+# Start the configuring
+a4lvarconfig;
diff --git a/net-dialup/kpnadsl4linux/kpnadsl4linux-1.11.ebuild b/net-dialup/kpnadsl4linux/kpnadsl4linux-1.11.ebuild
new file mode 100644
index 000000000000..988a1e9b2bee
--- /dev/null
+++ b/net-dialup/kpnadsl4linux/kpnadsl4linux-1.11.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+DESCRIPTION="ADSL4Linux, a PPTP start/stop/etc. program especially for Dutch users"
+HOMEPAGE="http://www.adsl4linux.nl/"
+SRC_URI="http://home.planet.nl/~mcdon001/${P}.tar.gz
+ http://www.adsl4linux.nl/download/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc ppc64 x86"
+
+RDEPEND="
+ net-dialup/ppp
+ net-dialup/pptpclient"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-Makefile.patch
+ "${FILESDIR}"/${P}-fno-common.patch
+)
+
+src_prepare() {
+ tc-export CC
+ default
+
+ sed -i -e 's:* at first:/\0:' adslstatus.c || die
+ sed -i -e 's/runscript/openrc-run/g' init.d.adsl || die
+}
+
+src_install() {
+ dosbin adsl
+ dodoc Changelog modemREADME README
+ newinitd init.d.adsl adsl
+ dosbin "${FILESDIR}/${PN}-config"
+}
+
+pkg_postinst() {
+ if [[ -z ${REPLACING_VERSIONS} ]]; then
+ elog "Do _NOT_ forget to run the following if this is your _FIRST_ install:"
+ elog " kpnadsl4linux-config"
+ elog " etc-update"
+ elog "To start ${P} at boot type:"
+ elog " rc-update add adsl default"
+ fi
+}
diff --git a/net-dialup/kpnadsl4linux/metadata.xml b/net-dialup/kpnadsl4linux/metadata.xml
new file mode 100644
index 000000000000..85e4ed814fa2
--- /dev/null
+++ b/net-dialup/kpnadsl4linux/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/linux-atm/Manifest b/net-dialup/linux-atm/Manifest
new file mode 100644
index 000000000000..36616ee595ac
--- /dev/null
+++ b/net-dialup/linux-atm/Manifest
@@ -0,0 +1 @@
+DIST linux-atm-2.5.2.tar.gz 1082256 BLAKE2B 329aad437a1e6a17fd7d7d2b81c976a76c684aaf127006ed3af1e998a0f52df056747cc84fc13c933dc15c07246f1f00e4ff101ac98ef1dd1bea102830a83625 SHA512 0a50e91513e4e1f882dc6f4792dc032e89497ff745c0eaea0c0c848b0f84e40d19e038e4ab5aa70c1f915c28a9f845340c332ac5c3ae838b8f539466e10a0a08
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-c99-musl.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-c99-musl.patch
new file mode 100644
index 000000000000..7c39bb0482c1
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-c99-musl.patch
@@ -0,0 +1,113 @@
+Author: NHOrus <jy6x2b32pie9@yahoo.com>
+Bug: https://bugs.gentoo.org/897842
+Enabling the system extension that gate some POSIX features
+and fixing missing includes, 32/64 bit confusion, standard
+atexit function instead of non-standard, and function signature
+--- a/configure.in
++++ b/configure.in
+@@ -34,6 +34,7 @@ dnl We have some special PERL scripts wh
+ AC_PATH_PROG(PERL, perl)
+ AC_SUBST(PERL)
+
++AC_USE_SYSTEM_EXTENSIONS
+
+ dnl Check for needed header files
+ AC_CHECK_HEADER(asm/errno.h, ,
+--- a/src/lib/unix.c
++++ b/src/lib/unix.c
+@@ -10,6 +10,7 @@
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <errno.h>
++#include <string.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/socket.h>
+--- a/src/sigd/policy.c
++++ b/src/sigd/policy.c
+@@ -8,6 +8,7 @@
+
+ #include <atm.h>
+ #include <atmd.h>
++#include <string.h>
+
+ #include "proto.h" /* for "pretty" */
+ #include "policy.h"
+--- a/src/sigd/kernel.c
++++ b/src/sigd/kernel.c
+@@ -10,6 +10,7 @@
+ #include <stdio.h>
+ #include <errno.h>
+ #include <assert.h>
++#include <string.h>
+
+ #include <atm.h>
+ #include <linux/atmsvc.h>
+--- a/src/sigd/atmsigd.c
++++ b/src/sigd/atmsigd.c
+@@ -283,12 +283,12 @@ static void setup_signals(void)
+ /* ------------------------------- main ... ------------------------------- */
+
+
+-static void trace_on_exit(int status,void *dummy)
++static void trace_on_exit(void)
+ {
+ char path[PATH_MAX+1];
+ FILE *file;
+
+- if (!status) return;
++// if (!status) return;
+ if (!dump_dir) file = stderr;
+ else {
+ sprintf(path,"atmsigd.%d.trace.exit",getpid());
+@@ -517,7 +517,7 @@ int main(int argc,char **argv)
+ exit(0);
+ }
+ }
+- (void) on_exit(trace_on_exit,NULL);
++ (void) atexit(trace_on_exit);
+ poll_loop();
+ close_all();
+ for (sig = entities; sig; sig = sig->next) stop_saal(&sig->saal);
+--- a/src/led/address.c
++++ b/src/led/address.c
+@@ -33,6 +33,7 @@
+ #include <sys/ioctl.h>
+ #include <unistd.h>
+ #include <errno.h>
++#include <string.h>
+
+ #include <atm.h>
+ #include <linux/atmdev.h>
+--- a/src/led/conn.c
++++ b/src/led/conn.c
+@@ -405,7 +405,7 @@ Conn_t *accept_conn(Conn_t *conn)
+ {
+ Conn_t *new;
+ struct sockaddr_atmsvc addr;
+- size_t len;
++ socklen_t len;
+ int fd;
+ char buff[MAX_ATM_ADDR_LEN+1];
+
+--- a/src/led/display.c
++++ b/src/led/display.c
+@@ -6,6 +6,7 @@
+ #include <config.h>
+ #endif
+
++#include <string.h>
+ #include <atm.h>
+ #include <atmd.h>
+
+--- a/src/mpoad/io.c
++++ b/src/mpoad/io.c
+@@ -16,7 +16,7 @@
+ #include <syscall.h>
+ #include <linux/poll.h>
+ #define SYS_poll 168
+-_syscall3(int,poll,struct pollfd *,ufds,unsigned int,nfds,int,timeout);
++int _syscall3(int, int poll,struct pollfd *,int ufds,unsigned int,int nfds,int,int timeout);
+ #endif
+ #include <atm.h>
+ #include <linux/types.h>
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-fix-booleans.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-fix-booleans.patch
new file mode 100644
index 000000000000..3b563cbcdb19
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-fix-booleans.patch
@@ -0,0 +1,42 @@
+Correct for building with C23, rename `bool` struct member
+https://bugs.gentoo.org/949721
+--- a/src/lane/load.c
++++ b/src/lane/load.c
+@@ -498,8 +498,8 @@
+ break;
+ case BOOLEAN:
+ Debug_unit(&load_unit, "Variable is boolean: %s",
+- g_return.bool==BL_TRUE?"True":"False");
+- set_var_bool(curr_unit, varname, g_return.bool);
++ g_return.boolval==BL_TRUE?"True":"False");
++ set_var_bool(curr_unit, varname, g_return.boolval);
+ break;
+ case INTEGER:
+ Debug_unit(&load_unit, "Variable is integer: %d", g_return.intti);
+--- a/src/lane/load_lex.h
++++ b/src/lane/load_lex.h
+@@ -24,7 +24,7 @@
+ #define END 0
+
+ typedef struct {
+- Bool_t bool;
++ Bool_t boolval;
+ int intti;
+ AtmAddr_t *atmaddress;
+ LaneDestination_t *destaddr;
+--- a/src/lane/load_lex.l
++++ b/src/lane/load_lex.l
+@@ -44,11 +44,11 @@
+ return ATMADDRESS;
+ }
+ True |
+-true {g_return.bool = BL_TRUE;
++true {g_return.boolval = BL_TRUE;
+ return BOOLEAN;
+ }
+ False |
+-false {g_return.bool = BL_FALSE;
++false {g_return.boolval = BL_FALSE;
+ return BOOLEAN;
+ }
+ \#.* {}
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-fix-formatting.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-fix-formatting.patch
new file mode 100644
index 000000000000..00d5d29060e2
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-fix-formatting.patch
@@ -0,0 +1,192 @@
+Changes cherry-picked from
+https://sources.debian.org/patches/linux-atm/1:2.5.1-7/misc/
+https://sources.debian.org/patches/linux-atm/1:2.5.1-7/linux-atm-2.5.2-c99-musl.patch/
+to fix -Werror=format
+Also all changes I did on second pass for printing size_t and friends
+https://bugs.gentoo.org/949721
+--- a/src/ilmid/asn1/asn_int.c
++++ b/src/ilmid/asn1/asn_int.c
+@@ -185,7 +185,7 @@ FILE* f _AND_
+ AsnInt* v _AND_
+ unsigned short int indent)
+ {
+- fprintf(f,"%d", *v);
++ fprintf(f,"%ld", *v);
+ }
+
+
+--- a/src/ilmid/asn1/asn_oid.c
++++ b/src/ilmid/asn1/asn_oid.c
+@@ -127,7 +127,7 @@ unsigned short int indent)
+ if (firstArcNum > 2)
+ firstArcNum = 2;
+
+- fprintf(f,"%u %u", firstArcNum, arcNum - (firstArcNum * 40));
++ fprintf(f,"%d %lu", firstArcNum, arcNum - (firstArcNum * 40));
+
+ for (; i < v->octetLen ; )
+ {
+@@ -136,7 +136,7 @@ unsigned short int indent)
+
+ arcNum = (arcNum << 7) + (v->octs[i] & 0x7f);
+ i++;
+- fprintf(f," %u", arcNum);
++ fprintf(f," %lu", arcNum);
+ }
+ fprintf(f,"}");
+
+--- a/src/lib/ans.c
++++ b/src/lib/ans.c
+@@ -41,7 +41,7 @@
+ static int ans(const char *text,int wanted,void *result,int res_len)
+ {
+ unsigned char answer[MAX_ANSWER];
+- unsigned char name[MAX_NAME];
++ char name[MAX_NAME];
+ unsigned char *pos,*data,*found;
+ int answer_len,name_len,data_len,found_len;
+ int questions,answers;
+--- a/src/test/ttcp.c
++++ b/src/test/ttcp.c
+@@ -664,7 +664,7 @@ int no_check = 0;
+ exit(0);
+
+ usage:
+- fprintf(stderr, Usage);
++ fprintf(stderr, "%s", Usage);
+ exit(1);
+ }
+
+Further changes are novel and fix size_t formatting
+--- a/src/arpd/atmarp.c
++++ b/src/arpd/atmarp.c
+@@ -67,7 +67,7 @@
+ }
+ if (req->type == art_query) return query_result(&reply);
+ if (len != sizeof(int)) {
+- fprintf(stderr,"bad read: %d != %d\n",len,sizeof(int));
++ fprintf(stderr,"bad read: %d != %zu\n",len,sizeof(int));
+ exit(1);
+ }
+ if (*(int *) &reply < 0) {
+--- a/src/ilmid/asn1/asn_int.c
++++ b/src/ilmid/asn1/asn_int.c
+@@ -370,5 +370,5 @@
+ UAsnInt* v _AND_
+ unsigned short int indent)
+ {
+- fprintf(f,"%u", *v);
++ fprintf(f,"%lu", *v);
+ }
+--- a/src/lane/mem_lecs.c
++++ b/src/lane/mem_lecs.c
+@@ -77,7 +77,7 @@
+ free(tmp->start);
+ free(tmp);
+ } else {
+- printf("Trying to free memory by %s, allocated by %s, size %d\n",
++ printf("Trying to free memory by %s, allocated by %s, size %zu\n",
+ unit, tmp->unit, tmp->size);
+ }
+ }
+@@ -89,6 +89,6 @@
+
+ printf("Dumping memory allocation\n");
+ for (tmp=memlist;tmp;tmp=tmp->next)
+- printf("%s : %d bytes from %p\n", tmp->unit, tmp->size, tmp->start);
++ printf("%s : %zu bytes from %p\n", tmp->unit, tmp->size, tmp->start);
+ printf("-------------------------\n");
+ }
+--- a/src/maint/atmaddr.c
++++ b/src/maint/atmaddr.c
+@@ -97,7 +97,7 @@
+ }
+ if (cmd != ATM_GETADDR) return 0;
+ if (req.length % sizeof(*addr)) {
+- fprintf(stderr,"internal error: len %d %% %d\n",req.length,
++ fprintf(stderr,"internal error: len %d %% %zu\n",req.length,
+ sizeof(*addr));
+ return 1;
+ }
+--- a/src/maint/atmtcp.c
++++ b/src/maint/atmtcp.c
+@@ -579,7 +579,7 @@
+ exit(1);
+ }
+ if (wrote != sizeof(stream)) {
+- fprintf(stderr,"short write (%d < %d)\n",wrote,sizeof(stream));
++ fprintf(stderr,"short write (%d < %zu)\n",wrote,sizeof(stream));
+ exit(1);
+ }
+ wrote = write(fd,data,size);
+--- a/src/mpoad/lecs.c
++++ b/src/mpoad/lecs.c
+@@ -157,7 +157,7 @@
+ /* Sampo-Add: end */
+ }
+ if (end_of_tlvs - tlvs != 0)
+- printf("mpcd: lecs.c: get_reply: ignoring %d bytes of trailing TLV carbage\n",
++ printf("mpcd: lecs.c: get_reply: ignoring %ld bytes of trailing TLV carbage\n",
+ end_of_tlvs - tlvs);
+ return 1;
+ }
+--- a/src/switch/swc.c
++++ b/src/switch/swc.c
+@@ -28,7 +28,7 @@
+ exit(1);
+ }
+ if (size != sizeof(*msg)) {
+- fprintf(stderr,"bad write: %d != %d\n",size,sizeof(*msg));
++ fprintf(stderr,"bad write: %d != %zu\n",size,sizeof(*msg));
+ exit(1);
+ }
+ size = read(s,msg,sizeof(*msg));
+@@ -37,7 +37,7 @@
+ exit(1);
+ }
+ if (size != sizeof(*msg)) {
+- fprintf(stderr,"bad read: %d != %d\n",size,sizeof(*msg));
++ fprintf(stderr,"bad read: %d != %zu\n",size,sizeof(*msg));
+ exit(1);
+ }
+ }
+--- a/src/test/isp.c
++++ b/src/test/isp.c
+@@ -37,7 +37,7 @@
+ wrote = write(sock,msg,sizeof(*msg));
+ if (wrote == sizeof(*msg)) return;
+ if (wrote < 0) perror("write");
+- else fprintf(stderr,"bad write: %d != %d\n",wrote,sizeof(*msg));
++ else fprintf(stderr,"bad write: %d != %zu\n",wrote,sizeof(*msg));
+ exit(1);
+ }
+
+@@ -49,7 +49,7 @@
+ got = read(sock,msg,sizeof(*msg));
+ if (got == sizeof(*msg)) return;
+ if (got < 0) perror("read");
+- else fprintf(stderr,"bad read: %d != %d\n",got,sizeof(*msg));
++ else fprintf(stderr,"bad read: %d != %zu\n",got,sizeof(*msg));
+ exit(1);
+ }
+
+--- a/src/test/window.c
++++ b/src/test/window.c
+@@ -180,7 +180,7 @@
+ /* Get a reply */
+ size = read(s2, buffer2, REPLY_SIZE);
+ if (size != REPLY_SIZE) {
+- fprintf(stderr,"Received reply of length %d, should be %d.\n",
++ fprintf(stderr,"Received reply of length %zd, should be %d.\n",
+ size,REPLY_SIZE);
+ }
+ #endif
+@@ -264,7 +264,7 @@
+ }
+
+ } else {
+- fprintf(stderr,"Received message of length %d, should be %d.\n",
++ fprintf(stderr,"Received message of length %zd, should be %d.\n",
+ size,PINGPONG_SIZE);
+ }
+ }
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-headers.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-headers.patch
new file mode 100644
index 000000000000..edfb38d68b7b
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-headers.patch
@@ -0,0 +1,30 @@
+--- linux-atm/src/maint/hediag.c.orig
++++ linux-atm/src/maint/hediag.c
+@@ -1,5 +1,6 @@
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ #include <unistd.h>
+ #include <sys/ioctl.h>
+ #include <sys/types.h>
+--- linux-atm/src/qgen/ql_y.y
++++ linux-atm/src/qgen/ql_y.y
+@@ -17,6 +17,8 @@
+ static STRUCTURE *structures = NULL;
+ static const char *abort_id; /* indicates abort flag */
+
++void yyerror(const char *s);
++int yylex ( void );
+
+ static NAME_LIST *get_name_list(const char *name)
+ {
+--- linux-atm/src/test/ispl_y.y
++++ linux-atm/src/test/ispl_y.y
+@@ -16,6 +16,7 @@
+
+ static struct atmsvc_msg msg;
+
++int yylex ( void );
+
+ %}
+
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-linux-5.2-SIOCGSTAMP.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-linux-5.2-SIOCGSTAMP.patch
new file mode 100644
index 000000000000..ff91c7f16e06
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-linux-5.2-SIOCGSTAMP.patch
@@ -0,0 +1,41 @@
+Fix build failure against linux-5.2+:
+ https://www.spinics.net/lists/linux-sh/msg53430.html
+
+--- a/src/maint/atmdump.c
++++ b/src/maint/atmdump.c
+@@ -17,6 +17,16 @@
+ #include <netinet/in.h> /* for htonl and ntohl */
+ #include <atm.h>
+
++#ifndef SIOCGSTAMP
++/* linux-5.2+ added support for 64-bit time_t into ioctls
++ that support 'struct timeval' and removed 'SIOCGSTAMP'
++ define.
++
++ Include 'SIOCGSTAMP' wrapper via linux/sockios.h
++ if does not exist.
++ */
++# include <linux/sockios.h>
++#endif
+
+ static const char *pti[] = { "Data SDU 0","Data SDU 1","Data SDU 0, CE",
+ "Data SDU 1, CE","Segment OAM F5","End-to-end OAM F5","Reserved (RM)",
+--- a/src/maint/saaldump.c
++++ b/src/maint/saaldump.c
+@@ -24,6 +24,16 @@
+
+ #define MAX_ITEM 2048 /* longest string emitted by q.dump */
+
++#ifndef SIOCGSTAMP
++/* linux-5.2+ added support for 64-bit time_t into ioctls
++ that support 'struct timeval' and removed 'SIOCGSTAMP'
++ define.
++
++ Include 'SIOCGSTAMP' wrapper via linux/sockios.h
++ if does not exist.
++ */
++# include <linux/sockios.h>
++#endif
+
+ static int interval = 0; /* display absolute time by default */
+ static int quiet = 0; /* decode Q.2931 messages by default */
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-linux-headers-5.19.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-linux-headers-5.19.patch
new file mode 100644
index 000000000000..eeb96f262f2e
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-linux-headers-5.19.patch
@@ -0,0 +1,24 @@
+linux/atm_zatm.h was removed in >=linux-headers-5.19. As the hardware is
+said to be unlikely working on modern systems, just disable its utility
+program to keep the rest building.
+
+See: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=052e1f01bfae8be6
+
+--- a/src/maint/Makefile.am
++++ b/src/maint/Makefile.am
+@@ -1,5 +1,5 @@
+ BOOTPGMS=atmaddr esi
+-SYSPGMS=atmloop atmtcp enitune zntune hediag # nstune
++SYSPGMS=atmloop atmtcp enitune hediag # nstune zntune
+ USRPGMS=atmdiag atmdump sonetdiag saaldump
+
+ INCLUDES=-I$(srcdir)/../q2931 -I$(srcdir)/../saal -I.
+@@ -14,7 +14,7 @@ esi_SOURCES = esi.c
+ atmloop_SOURCES = atmloop.c
+ atmtcp_SOURCES = atmtcp.c
+ enitune_SOURCES = enitune.c
+-zntune_SOURCES = zntune.c
++#zntune_SOURCES = zntune.c
+ #nstune_SOURCES = nstune.c
+
+ atmdiag_SOURCES = atmdiag.c
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-remove-bad-define.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-remove-bad-define.patch
new file mode 100644
index 000000000000..8eb17463bc15
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-remove-bad-define.patch
@@ -0,0 +1,31 @@
+previously was sed -i '/#define _LINUX_NETDEVICE_H/d' src/arpd/*.c in ebuild
+--- a/src/arpd/arp.c
++++ b/src/arpd/arp.c
+@@ -15,7 +15,6 @@
+ #include <sys/types.h>
+ #include <sys/socket.h> /* for linux/if_arp.h */
+ #include <netinet/in.h> /* for ntohs, etc. */
+-#define _LINUX_NETDEVICE_H /* very crude hack for glibc2 */
+ #include <linux/types.h>
+ #include <linux/if_arp.h>
+ #include <linux/if_ether.h>
+--- a/src/arpd/io.c
++++ b/src/arpd/io.c
+@@ -21,7 +21,6 @@
+ #include <atm.h>
+ #include <linux/atmclip.h> /* for CLIP_DEFAULT_IDLETIMER */
+ #include <linux/atmarp.h>
+-#define _LINUX_NETDEVICE_H /* glibc2 */
+ #include <linux/types.h>
+ #include <linux/if_arp.h>
+
+--- a/src/arpd/itf.c
++++ b/src/arpd/itf.c
+@@ -12,7 +12,6 @@
+ #include <sys/types.h>
+ #include <linux/atmclip.h>
+ #include <sys/socket.h>
+-#define _LINUX_NETDEVICE_H /* glibc2 */
+ #include <linux/types.h>
+ #include <linux/if_arp.h>
+
diff --git a/net-dialup/linux-atm/files/linux-atm-2.5.2-socklen-types.patch b/net-dialup/linux-atm/files/linux-atm-2.5.2-socklen-types.patch
new file mode 100644
index 000000000000..f6ae96e6d1e7
--- /dev/null
+++ b/net-dialup/linux-atm/files/linux-atm-2.5.2-socklen-types.patch
@@ -0,0 +1,182 @@
+Correct type used for all calls to socket-related business,
+so the won't throw errors.
+https://bugs.gentoo.org/949721
+--- a/src/arpd/io.c
++++ b/src/arpd/io.c
+@@ -276,7 +276,8 @@
+ struct atm_qos qos;
+ ENTRY *entry;
+ VCC *vcc;
+- int fd,len,size,error;
++ int fd,error;
++ socklen_t len,size;
+
+ len = sizeof(addr);
+ if ((fd = accept(incoming,(struct sockaddr *) &addr,&len)) < 0) {
+@@ -613,7 +614,8 @@
+
+ int get_local(int fd,struct sockaddr_atmsvc *addr)
+ {
+- int length,result;
++ int result;
++ socklen_t length;
+
+ length = sizeof(struct sockaddr_atmsvc);
+ result = getsockname(fd,(struct sockaddr *) addr,&length);
+--- a/src/arpd/table.c
++++ b/src/arpd/table.c
+@@ -101,7 +101,8 @@
+ char addr_buf[MAX_ATM_ADDR_LEN+1];
+ char qos_buf[MAX_ATM_QOS_LEN+1];
+ struct atm_qos qos;
+- int size,sndbuf;
++ int sndbuf;
++ socklen_t size;
+
+ size = sizeof(addr);
+ if (getpeername(vcc->fd,(struct sockaddr *) &addr,&size) < 0) {
+--- a/src/include/atmd.h
++++ b/src/include/atmd.h
+@@ -104,7 +104,7 @@
+ typedef struct {
+ int s; /* socket */
+ struct sockaddr_un addr; /* reply address */
+- int size; /* address size */
++ socklen_t size; /* address size */
+ } UN_CTX;
+
+
+--- a/src/lane/connect_bus.c
++++ b/src/lane/connect_bus.c
+@@ -170,7 +170,8 @@
+ data_handler(const Event_t *event, void *funcdata)
+ {
+ Conn_t *tmp, *newconn;
+- int fd, nbytes;
++ int fd;
++ socklen_t nbytes;
+ static char buffer[BUFSIZE];
+ struct sockaddr_atmsvc addr;
+
+--- a/src/lane/connect.c
++++ b/src/lane/connect.c
+@@ -258,7 +258,8 @@
+ data_handler(const Event_t *event, void *funcdata)
+ {
+ Conn_t *tmp, *newconn;
+- int fd, nbytes;
++ int fd;
++ socklen_t nbytes;
+ static char buffer[BUFSIZE];
+ LaneControl_t *ctmp;
+ struct sockaddr_atmsvc addr;
+--- a/src/lane/lane_atm.c
++++ b/src/lane/lane_atm.c
+@@ -138,7 +138,7 @@
+ struct atm_blli blli;
+ struct atm_qos qos;
+ int fd, ret;
+- int len = sizeof(address);
++ socklen_t len = sizeof(address);
+
+ fd = socket(PF_ATMSVC, SOCK_DGRAM, 0);
+ if (fd <0) {
+--- a/src/lane/lecs.c
++++ b/src/lane/lecs.c
+@@ -119,7 +119,7 @@
+ int just_dump=0;
+ fd_set fds;
+ struct sockaddr_atmsvc client;
+- int len;
++ socklen_t len;
+ unsigned char buffer[P_SIZE];
+
+ while(i!=-1) {
+--- a/src/lib/sdu2cell.c
++++ b/src/lib/sdu2cell.c
+@@ -15,7 +15,8 @@
+ {
+ struct atm_qos qos;
+ int trailer,total,cells;
+- int size,i;
++ int i;
++ socklen_t size;
+
+ size = sizeof(qos);
+ if (getsockopt(s,SOL_AAL,SO_ATMQOS,&qos,&size) < 0) return -1;
+--- a/src/lib/unix.c
++++ b/src/lib/unix.c
+@@ -64,7 +64,7 @@
+ int un_recv_connect(int s,void *buf,int size)
+ {
+ struct sockaddr_un addr;
+- int addr_size;
++ socklen_t addr_size;
+ int len;
+
+ addr_size = sizeof(addr);
+--- a/src/maint/atmtcp.c
++++ b/src/maint/atmtcp.c
+@@ -817,7 +817,8 @@
+ }
+ else if (!strcmp(ARG,"listen") ||
+ (do_background = !strcmp(ARG,"listen-bg"))) {
+- int fd,port,addr_len;
++ int fd,port;
++ socklen_t addr_len;
+ int *fd2 = alloc_t(int);
+
+ if ((fd = socket(PF_INET,SOCK_STREAM,0)) < 0) {
+--- a/src/mpoad/io.c
++++ b/src/mpoad/io.c
+@@ -521,7 +521,8 @@
+ static int accept_conn(int slot)
+ {
+ struct sockaddr_atmsvc sa;
+- int i, new_fd, sa_len;
++ int i, new_fd;
++ socklen_t sa_len;
+
+ sa_len = sizeof(sa);
+ new_fd = accept(fds[slot].fd, (struct sockaddr *)&sa, &sa_len);
+--- a/src/sigd/io.c
++++ b/src/sigd/io.c
+@@ -355,7 +355,7 @@
+ error = 0;
+ if (bind(s,(struct sockaddr *) &addr,sizeof(addr)) < 0) error = errno;
+ else {
+- int size;
++ socklen_t size;
+
+ size = sizeof(addr);
+ if (getsockname(s,(struct sockaddr *) &addr,&size) < 0)
+--- a/src/test/ttcp.c
++++ b/src/test/ttcp.c
+@@ -92,7 +92,8 @@
+ struct sockaddr_atmsvc satm;
+ struct atm_qos qos;
+
+-int domain, fromlen;
++int domain;
++socklen_t fromlen;
+ int fd; /* fd of network socket */
+
+ int buflen = 8 * 1024; /* length of buffer */
+@@ -466,7 +467,7 @@
+
+ {
+ struct sockaddr_atmsvc peer;
+- int peerlen = sizeof(peer);
++ socklen_t peerlen = sizeof(peer);
+ if (getpeername(fd, (struct sockaddr *) &peer,
+ &peerlen) < 0) {
+ err("getpeername");
+@@ -498,7 +499,7 @@
+ /* set socket buffer size */
+ #if defined(SO_SNDBUF) || defined(SO_RCVBUF)
+ if (sockbufsize) {
+- int len;
++ socklen_t len;
+
+ if (trans) {
+ /* set send socket buffer if we are transmitting */
diff --git a/net-dialup/linux-atm/linux-atm-2.5.2-r1.ebuild b/net-dialup/linux-atm/linux-atm-2.5.2-r1.ebuild
new file mode 100644
index 000000000000..26d40245a709
--- /dev/null
+++ b/net-dialup/linux-atm/linux-atm-2.5.2-r1.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic linux-info
+
+DESCRIPTION="Tools for ATM"
+HOMEPAGE="http://linux-atm.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+
+BDEPEND="sys-devel/bison"
+
+RESTRICT="test"
+
+CONFIG_CHECK="~ATM"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-headers.patch
+ "${FILESDIR}"/${P}-linux-5.2-SIOCGSTAMP.patch
+ "${FILESDIR}"/${P}-linux-headers-5.19.patch
+)
+
+src_prepare() {
+ default
+
+ sed -i '/#define _LINUX_NETDEVICE_H/d' \
+ src/arpd/*.c || die "sed command on arpd/*.c files failed"
+
+ eautoreconf
+}
+
+src_configure() {
+ # bug #944120
+ append-cflags -std=gnu17
+ append-flags -fno-strict-aliasing
+ export YACC=bison
+ econf
+}
+
+src_install() {
+ default
+ find "${ED}" -name '*.la' -delete || die
+ dodoc doc/README* doc/atm*
+}
diff --git a/net-dialup/linux-atm/linux-atm-2.5.2-r2.ebuild b/net-dialup/linux-atm/linux-atm-2.5.2-r2.ebuild
new file mode 100644
index 000000000000..068f52d9cc6c
--- /dev/null
+++ b/net-dialup/linux-atm/linux-atm-2.5.2-r2.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic linux-info
+
+DESCRIPTION="Tools for ATM"
+HOMEPAGE="https://linux-atm.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+
+BDEPEND="sys-devel/bison"
+
+RESTRICT="test"
+
+CONFIG_CHECK="~ATM"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-headers.patch
+ "${FILESDIR}"/${P}-linux-5.2-SIOCGSTAMP.patch
+ "${FILESDIR}"/${P}-linux-headers-5.19.patch
+ "${FILESDIR}"/${P}-c99-musl.patch
+ "${FILESDIR}"/${P}-remove-bad-define.patch
+ "${FILESDIR}"/${P}-fix-booleans.patch
+ "${FILESDIR}"/${P}-socklen-types.patch
+ "${FILESDIR}"/${P}-fix-formatting.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ append-flags -fno-strict-aliasing
+ export YACC=bison
+ econf
+}
+
+src_install() {
+ default
+ find "${ED}" -name '*.la' -delete || die
+ dodoc doc/README* doc/atm*
+}
diff --git a/net-dialup/linux-atm/metadata.xml b/net-dialup/linux-atm/metadata.xml
new file mode 100644
index 000000000000..92d8df43c00e
--- /dev/null
+++ b/net-dialup/linux-atm/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="sourceforge">linux-atm</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/lrzsz/Manifest b/net-dialup/lrzsz/Manifest
new file mode 100644
index 000000000000..f0ba33792cdd
--- /dev/null
+++ b/net-dialup/lrzsz/Manifest
@@ -0,0 +1,2 @@
+DIST gettext-0.19.8-runtime-m4.tar.xz 26092 BLAKE2B 671c43cbdc393658c0f9960cf6b743b5126a52ff0a87dbd8a59f6a8c398eecfab7509421d6e01096d73e40f2feb7b2bc229822c4d475d91a703c941134a506b5 SHA512 a5e5a64c7e2bd1a0fa6d426ff72a286027451ff034050541a92ba5a4d7889f925e4674e1df89e0c7e9657329209284995afcb0180a2e441136694556450e4edd
+DIST lrzsz-0.12.20.tar.gz 280938 BLAKE2B 86511ab112da849f5894f18c045f2c8a9dd4c4e97426c1d98c5b91aade6c39e26f4a7e5674e057c9596a240dfd3ef32053fcdc8ee58b33654cf15eec64779b1e SHA512 9bce64036f1f1c65f5910f19802aecaf3dc5ffeab0feeca10fa8d2fe1b83e212391cce23056d22fd0eda52df89e12ede68eb5d22ffcf22f935910d2af7399f12
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-AR.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-AR.patch
new file mode 100644
index 000000000000..fd923d5374a9
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-AR.patch
@@ -0,0 +1,10 @@
+--- a/configure.in
++++ b/configure.in
+@@ -95,6 +95,7 @@ AC_PROG_GCC_TRADITIONAL
+ dnl AC_PROG_INSTALL included in AM_INIT_AUTOMAKE
+ dnl AC_PROG_MAKE_SET included in AM_INIT_AUTOMAKE
+ AC_PROG_RANLIB
++AM_PROG_AR
+ AC_ISC_POSIX
+ AC_USE_SYSTEM_EXTENSIONS
+ AM_GNU_GETTEXT
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.12.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.12.patch
new file mode 100644
index 000000000000..c5ecdee208d0
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.12.patch
@@ -0,0 +1,28 @@
+--- lrzsz-0.12.20/configure.in
++++ lrzsz-0.12.20/configure.in
+@@ -97,7 +97,6 @@
+ AC_ISC_POSIX
+ AC_USE_SYSTEM_EXTENSIONS
+ AM_GNU_GETTEXT
+-AM_C_PROTOTYPES
+ AC_C_CONST
+ AC_C_INLINE
+
+--- lrzsz-0.12.20/lib/Makefile.am
++++ lrzsz-0.12.20/lib/Makefile.am
+@@ -1,5 +1,4 @@
+ noinst_LIBRARIES=libzmodem.a
+-AUTOMAKE_OPTIONS=ansi2knr
+
+ EXTRA_DIST = alloca.c ansi2knr.1 ansi2knr.c \
+ getopt.c getopt1.c mkdir.c mktime.c \
+--- lrzsz-0.12.20/src/Makefile.am
++++ lrzsz-0.12.20/src/Makefile.am
+@@ -7,7 +7,6 @@
+ DISTCLEAN_FILES=lrzszbug
+
+ LDADD = ../lib/libzmodem.a @INTLLIBS@
+-AUTOMAKE_OPTIONS=ansi2knr
+ EXTRA_DIST = ansi2knr.1 ansi2knr.c lrzszbug.in
+ INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl -I$(top_srcdir)/lib
+ #DEFS = -DLOCALEDIR=\"$(localedir)\" -DOS=\"@host_os@\" -DCPU=\"@host_cpu@\"
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.13.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.13.patch
new file mode 100644
index 000000000000..a0d67c9f014f
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-automake-1.13.patch
@@ -0,0 +1,12 @@
+diff -urN lrzsz-0.12.20/configure.in lrzsz-0.12.20-new/configure.in
+--- lrzsz-0.12.20/configure.in 1998-12-30 16:50:07.000000000 +0900
++++ lrzsz-0.12.20-new/configure.in 2013-04-26 18:53:29.020100620 +0900
+@@ -1,7 +1,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(src/crctab.c)
+ AM_INIT_AUTOMAKE(lrzsz, 0.12.20)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS([config.h])
+
+
+ dnl AC_C_CROSS is in AC_PROG_CC since 2.12
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-c23.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-c23.patch
new file mode 100644
index 000000000000..428d9d25165f
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-c23.patch
@@ -0,0 +1,79 @@
+https://bugs.gentoo.org/943880
+
+--- a/lib/error.c
++++ b/lib/error.c
+@@ -73,7 +73,7 @@ extern char *program_name;
+
+ # if HAVE_STRERROR
+ # ifndef strerror /* On some systems, strerror is a macro */
+-char *strerror ();
++char *strerror (int);
+ # endif
+ # else
+ static char *
+--- a/lib/long-options.c
++++ b/lib/long-options.c
+@@ -36,11 +36,11 @@ static struct option const long_options[] =
+ /* Process long options --help and --version, but only if argc == 2.
+ Be careful not to gobble up `--'. */
+ void
+-parse_long_options (argc, argv,version, usage)
+- int argc;
+- char **argv;
+- void (*version)();
+- void (*usage)();
++parse_long_options (
++ int argc,
++ char **argv,
++ void (*version)(void),
++ void (*usage)(int))
+ {
+ int c;
+ int saved_opterr;
+@@ -61,7 +61,7 @@ parse_long_options (argc, argv,version, usage)
+ (*usage) (0);
+
+ case 'v':
+- (*version) (0);
++ (*version) ();
+ /* printf ("%s (%s) %s\n", command_name, package, version_string); */
+ exit (0);
+
+--- a/lib/xstrtol.c
++++ b/lib/xstrtol.c
+@@ -65,17 +65,17 @@ extern int errno;
+ } \
+ while (0)
+
+-__unsigned long int __strtol ();
++__unsigned long int __strtol (const char*, char**, int);
+
+ /* FIXME: comment. */
+
+ strtol_error
+-__xstrtol (s, ptr, base, val, valid_suffixes)
+- const char *s;
+- char **ptr;
+- int base;
+- __unsigned long int *val;
+- const char *valid_suffixes;
++__xstrtol (
++ const char *s,
++ char **ptr,
++ int base,
++ __unsigned long int *val,
++ const char *valid_suffixes)
+ {
+ char *t_ptr;
+ char **p;
+--- a/lib/getopt.h
++++ b/lib/getopt.h
+@@ -101,7 +101,7 @@ struct option
+ errors, only prototype getopt for the GNU C library. */
+ extern int getopt (int argc, char *const *argv, const char *shortopts);
+ #else /* not __GNU_LIBRARY__ */
+-extern int getopt ();
++extern int getopt (int argc, char *const *argv, const char *shortopts);
+ #endif /* __GNU_LIBRARY__ */
+ extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+ const struct option *longopts, int *longind);
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-c99.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-c99.patch
new file mode 100644
index 000000000000..db593179b02e
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-c99.patch
@@ -0,0 +1,27 @@
+https://src.fedoraproject.org/rpms/lrzsz/blob/c23247c9c7604aec31d49ed1b238622835f575e2/f/lrzsz-socklen.patch
+
+Use socklen_t as the length of the socket address (which is a bit of
+an anachronism, considering the rest of the sources). The previous
+code des not work on 64-bit big-endian architectures.
+
+--- a/src/tcp.c
++++ b/src/tcp.c
+@@ -56,7 +56,7 @@ tcp_server (char *buf)
+ struct sockaddr_in s;
+ struct sockaddr_in t;
+ int on=1;
+- size_t len;
++ socklen_t len;
+
+ if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
+ error(1,errno,"socket");
+@@ -91,7 +91,7 @@ tcp_accept (int d)
+ {
+ int so;
+ struct sockaddr_in s;
+- size_t namelen;
++ socklen_t namelen;
+ int num=0;
+
+ namelen = sizeof(s);
+
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-configure-clang16.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-configure-clang16.patch
new file mode 100644
index 000000000000..bda489d11dd4
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-configure-clang16.patch
@@ -0,0 +1,13 @@
+https://bugs.gentoo.org/898970
+--- a/configure.in
++++ b/configure.in
+@@ -186,7 +186,8 @@ AC_CACHE_VAL(lrzsz_cv_sys_ftime_ok,
+ #include <sys/types.h>
+ #include <sys/timeb.h>
+ #include <stdio.h>
+-main ()
++#include <stdlib.h>
++int main (void)
+ {
+ struct timeb s, slast;
+ int c = 0;
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-disable-nls.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-disable-nls.patch
new file mode 100644
index 000000000000..b0f290e71564
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-disable-nls.patch
@@ -0,0 +1,25 @@
+This package does not contain the m4 macros from gettext, so if gettext is not
+installed the macros are lost when running eautoreconf.
+
+Embed the required m4 files and add the directory to configure.ac.
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -5,6 +5,7 @@
+ noinst_SCRIPTS=systype
+ PR=@PACKAGE@-@VERSION@
+ CLEAN_FILES=fastcheck.done
++AC_CONFIG_MACRO_DIR=-I m4
+
+ dist-hook:
+ mkdir $(distdir)/debian
+--- a/configure.in
++++ b/configure.in
+@@ -3,6 +3,7 @@
+ AC_INIT(src/crctab.c)
+ AM_INIT_AUTOMAKE(lrzsz, 0.12.20)
+ AC_CONFIG_HEADERS([config.h])
++AC_CONFIG_MACRO_DIR([m4])
+
+
+ dnl AC_C_CROSS is in AC_PROG_CC since 2.12
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-fix-integer-overflow.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-fix-integer-overflow.patch
new file mode 100644
index 000000000000..771b67dda473
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-fix-integer-overflow.patch
@@ -0,0 +1,23 @@
+https://src.fedoraproject.org/rpms/lrzsz/blob/rawhide/f/lrzsz-0.12.20.patch
+https://bugs.gentoo.org/797247
+
+diff -urN lrzsz-0.12.20/src/zm.c lrzsz-0.12.20.new/src/zm.c
+--- lrzsz-0.12.20/src/zm.c Tue Dec 29 09:48:38 1998
++++ lrzsz-0.12.20.new/src/zm.c Tue Oct 8 12:46:58 2002
+@@ -431,10 +431,12 @@
+ VPRINTF(3,("zsdata: %lu %s", (unsigned long) length,
+ Zendnames[(frameend-ZCRCE)&3]));
+ crc = 0;
+- do {
+- zsendline(*buf); crc = updcrc((0377 & *buf), crc);
+- buf++;
+- } while (--length>0);
++
++ for( ; length; length--) {
++ zsendline(*buf); crc = updcrc((0377 & *buf), crc);
++ buf++;
++ }
++
+ xsendline(ZDLE); xsendline(frameend);
+ crc = updcrc(frameend, crc);
+
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.20.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.20.patch
new file mode 100644
index 000000000000..3c58bd18091a
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.20.patch
@@ -0,0 +1,23 @@
+diff -udr a/configure.in b/configure.in
+--- a/configure.in 1998-12-30 08:50:07.000000000 +0100
++++ b/configure.in 2019-06-01 20:38:54.918650170 +0200
+@@ -1,3 +1,4 @@
++m4_pattern_allow(.*)
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(src/crctab.c)
+ AM_INIT_AUTOMAKE(lrzsz, 0.12.20)
+diff -udr lrzsz-0.12.20.orig/po/Makefile.in.in lrzsz-0.12.20/po/Makefile.in.in
+--- a/po/Makefile.in.in 1998-04-26 15:22:40.000000000 +0200
++++ b/po/Makefile.in.in 2019-06-01 20:48:09.020703542 +0200
+@@ -110,9 +110,9 @@
+ install-data-no: all
+ install-data-yes: all
+ if test -r $(MKINSTALLDIRS); then \
+- $(MKINSTALLDIRS) $(datadir); \
++ $(MKINSTALLDIRS) $(DATADIR); \
+ else \
+- $(top_srcdir)/mkinstalldirs $(datadir); \
++ $(top_srcdir)/mkinstalldirs $(DATADIR); \
+ fi
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
diff --git a/net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.22.patch b/net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.22.patch
new file mode 100644
index 000000000000..016e6dd40262
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-0.12.20-gettext-0.22.patch
@@ -0,0 +1,48 @@
+gettext 0.22 removed BUILD_INCLUDED_LIBINTL and USE_INCLUDED_LIBINTL is 'no'
+
+INSTOBJEXT was deprecated and removed, replace with .mo
+
+Bug: https://bugs.gentoo.org/908861
+
+--- a/intl/Makefile.in
++++ b/intl/Makefile.in
+@@ -81,7 +81,7 @@
+
+ INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
+
+-all: all-@USE_INCLUDED_LIBINTL@
++all: all-no
+
+ all-yes: libintl.$la intlh.inst
+ all-no:
+--- a/configure.in
++++ b/configure.in
+@@ -98,7 +98,7 @@
+ AM_PROG_AR
+ AC_ISC_POSIX
+ AC_USE_SYSTEM_EXTENSIONS
+-AM_GNU_GETTEXT
++AM_GNU_GETTEXT([use-libtool])
+ AC_C_CONST
+ AC_C_INLINE
+
+@@ -264,6 +264,8 @@
+ AC_SUBST(LDFLAGS)
+ AC_SUBST(LIBS)
+
++INTLLIBS="$LIBINTL"
++AC_SUBST(INTLLIBS)
+
+ AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME", [LOCALEDIR])
+ AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
+--- a/po/Makefile.in.in
++++ b/po/Makefile.in.in
+@@ -53,7 +53,7 @@
+
+ CATALOGS = de.gmo
+ CATOBJEXT = @CATOBJEXT@
+-INSTOBJEXT = @INSTOBJEXT@
++INSTOBJEXT = .mo
+
+ .SUFFIXES:
+ .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
diff --git a/net-dialup/lrzsz/files/lrzsz-autotools.patch b/net-dialup/lrzsz/files/lrzsz-autotools.patch
new file mode 100644
index 000000000000..704af801559e
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-autotools.patch
@@ -0,0 +1,264 @@
+diff -Nru lrzsz-0.12.20.orig/acinclude.m4 lrzsz-0.12.20/acinclude.m4
+--- lrzsz-0.12.20.orig/acinclude.m4 1998-12-27 23:08:59.000000000 +0100
++++ lrzsz-0.12.20/acinclude.m4 2010-09-25 00:43:43.000000000 +0200
+@@ -13,7 +13,7 @@
+ lrzsz_cv_decl_errno=yes, lrzsz_cv_decl_errno=no)])
+ AC_MSG_RESULT($lrzsz_cv_decl_errno)
+ if test $lrzsz_cv_decl_errno = yes; then
+- AC_DEFINE([HAVE_ERRNO_DECLARATION])
++ AC_DEFINE([HAVE_ERRNO_DECLARATION], 1, [[HAVE_ERRNO_DECLARATION]])
+ fi
+ ])
+
+@@ -57,7 +57,7 @@
+ ], ac_cv_type_speed_t=yes, ac_cv_type_speed_t=no)])dnl
+ AC_MSG_RESULT($ac_cv_type_speed_t)
+ if test $ac_cv_type_speed_t = no; then
+- AC_DEFINE([speed_t],long)
++ AC_DEFINE([speed_t],long, [speed_t])
+ fi
+ ])
+
+@@ -69,7 +69,7 @@
+ #include <sys/select.h>],
+ [struct tm *tp;], lrzsz_cv_header_sys_select=yes, lrzsz_cv_header_sys_select=no)])
+ if test $lrzsz_cv_header_sys_select = no; then
+- AC_DEFINE(SYS_TIME_WITHOUT_SYS_SELECT)
++ AC_DEFINE(SYS_TIME_WITHOUT_SYS_SELECT, 1, [SYS_TIME_WITHOUT_SYS_SELECT])
+ fi
+ ])
+
+diff -Nru lrzsz-0.12.20.orig/configure.in lrzsz-0.12.20/configure.in
+--- lrzsz-0.12.20.orig/configure.in 1998-12-30 08:50:07.000000000 +0100
++++ lrzsz-0.12.20/configure.in 2010-09-25 00:45:10.000000000 +0200
+@@ -20,6 +20,11 @@
+ AC_SUBST(PACKAGE)
+ AC_SUBST(VERSION)
+
++GT_YES="#"
++GT_NO=""
++AC_SUBST(GT_YES)
++AC_SUBST(GT_NO)
++
+ changequote(,)dnl
+ case $VERSION in
+ [0-9]*.[0-9]*.[0-9]*) README_ALPHA="README-alpha";;
+@@ -33,25 +38,25 @@
+ [if test "$enableval" = "no" ; then
+ :
+ else
+- AC_DEFINE(ENABLE_TIMESYNC)
++ AC_DEFINE(ENABLE_TIMESYNC, 1, [ENABLE_TIMESYNC])
+ fi],
+- [AC_DEFINE(ENABLE_TIMESYNC)])
++ [AC_DEFINE(ENABLE_TIMESYNC, 1, [ENABLE_TIMESYNC])])
+ AC_SUBST(ENABLE_TIMESYNC)
+ AC_ARG_ENABLE(pubdir,
+ [--enable-pubdir=/path include support for a public writeable directory],
+ [if test "$enableval" = "no" ; then
+ :
+ else
+- AC_DEFINE_UNQUOTED(PUBDIR,"$enableval")
++ AC_DEFINE_UNQUOTED(PUBDIR,"$enableval", [PUBDIR])
+ fi])
+ AC_ARG_ENABLE(mkdir,
+ [--disable-mkdir disable support for creating directories (lrz)],
+ [if test "$enableval" = "no" ; then
+ :
+ else
+- AC_DEFINE(ENABLE_MKDIR)
++ AC_DEFINE(ENABLE_MKDIR, 1, [ENABLE_MKDIR])
+ fi],
+- [AC_DEFINE(ENABLE_MKDIR)])
++ [AC_DEFINE(ENABLE_MKDIR, 1, [ENABLE_MKDIR])])
+ AC_ARG_ENABLE(syslog,
+ [--enable-syslog=FACILITY,{force,default,optional} include syslogsupport],
+ [
+@@ -62,7 +67,7 @@
+ *,*)
+ level=`echo $enableval|sed -e 's/^.*,//'`
+ fac=`echo $enableval|sed -e 's/,.*$//'`
+- AC_DEFINE_UNQUOTED(ENABLE_SYSLOG,$fac)
++ AC_DEFINE_UNQUOTED(ENABLE_SYSLOG,$fac, [ENABLE_SYSLOG])
+ ;;
+ *)
+ lookup_facility=LOG_UUCP
+@@ -70,16 +75,16 @@
+ ;;
+ esac
+ if test "$level" = "force" ; then
+- AC_DEFINE(ENABLE_SYSLOG_FORCE)
++ AC_DEFINE(ENABLE_SYSLOG_FORCE, 1, [ENABLE_SYSLOG_FORCE])
+ else
+ if test "$level" = "optional" ; then
+ :
+ else
+- AC_DEFINE(ENABLE_SYSLOG_DEFAULT)
++ AC_DEFINE(ENABLE_SYSLOG_DEFAULT, 1, [ENABLE_SYSLOG_DEFAULT])
+ fi
+ fi
+ fi],[
+- AC_DEFINE(ENABLE_SYSLOG_DEFAULT)
++ AC_DEFINE(ENABLE_SYSLOG_DEFAULT, 1, [ENABLE_SYSLOG_DEFAULT])
+ lookup_facility=LOG_UUCP
+ ])
+
+@@ -90,8 +95,8 @@
+ dnl AC_PROG_MAKE_SET included in AM_INIT_AUTOMAKE
+ AC_PROG_RANLIB
+ AC_ISC_POSIX
+-AC_AIX
+-AC_MINIX
++AC_USE_SYSTEM_EXTENSIONS
++AM_GNU_GETTEXT
+ AM_C_PROTOTYPES
+ AC_C_CONST
+ AC_C_INLINE
+@@ -113,7 +118,7 @@
+ fi
+ case "$CFLAGS" in
+ *-Wstrict-prototypes*)
+- AC_DEFINE(STRICT_PROTOTYPES)
++ AC_DEFINE(STRICT_PROTOTYPES, 1, [STRICT_PROTOTYPES])
+ ;;
+ esac
+
+@@ -131,7 +136,7 @@
+ LRZSZ_HEADERS_TERM_IO
+ AC_CHECK_HEADERS(termios.h sys/termios.h termio.h sys/termio.h sgtty.h)
+ AC_CHECK_HEADERS(sys/mman.h utime.h syslog.h sys/syslog.h sys/param.h)
+-AC_CHECK_HEADERS(sys/select.h strings.h arpa/inet.h)
++AC_CHECK_HEADERS(sys/select.h strings.h locale.h arpa/inet.h)
+
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_TYPE_SIZE_T
+@@ -153,7 +158,7 @@
+ dnl AC_FUNC_UTIME_NULL
+ AC_FUNC_MMAP
+ AC_FUNC_ALLOCA
+-AC_EGREP_HEADER([struct.*utimbuf], utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF))
++AC_EGREP_HEADER([struct.*utimbuf], utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF, 1, [HAVE_STRUCT_UTIMBUF]))
+
+ AC_CHECK_FUNCS(gettimeofday settimeofday)
+ AC_CHECK_FUNCS(strchr memcpy select vprintf)
+@@ -206,10 +211,10 @@
+ lrzsz_cv_sys_ftime_ok=no,
+ lrzsz_cv_sys_ftime_ok=runtime)])
+ case $lrzsz_cv_sys_ftime_ok in
+-yes) AC_DEFINE(HAVE_FTIME) AC_MSG_RESULT(yes) ;;
++yes) AC_DEFINE(HAVE_FTIME, 1, [HAVE_FTIME]) AC_MSG_RESULT(yes) ;;
+ no) AC_MSG_RESULT(no)
+ AC_MSG_WARN(ftime seems to be buggy) ;;
+-runtime) AC_DEFINE(HAVE_FTIME)
++runtime) AC_DEFINE(HAVE_FTIME, 1, [HAVE_FTIME])
+ AC_MSG_RESULT(will check at run time) ;;
+ esac
+ ])
+@@ -223,7 +228,7 @@
+ ])
+ if test $libquark_cv_var_timezone = yes ; then
+ AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_TIMEZONE_VAR)
++ AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [HAVE_TIMEZONE_VAR])
+ else
+ AC_MSG_RESULT(no)
+ fi
+@@ -245,9 +250,9 @@
+ ])
+ if test $lrzsz_cv_lookup_facility = yes ; then
+ AC_MSG_RESULT(yes)
+- AC_DEFINE_UNQUOTED(ENABLE_SYSLOG,$lookup_facility)
++ AC_DEFINE_UNQUOTED(ENABLE_SYSLOG,$lookup_facility, [ENABLE_SYSLOG])
+ else
+- AC_DEFINE(ENABLE_SYSLOG,LOG_USER)
++ AC_DEFINE(ENABLE_SYSLOG,LOG_USER, [ENABLE_SYSLOG])
+ AC_MSG_RESULT(no)
+ fi
+ fi
+@@ -257,9 +262,8 @@
+ AC_SUBST(LDFLAGS)
+ AC_SUBST(LIBS)
+
+-AM_GNU_GETTEXT
+
+-AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME")
++AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME", [LOCALEDIR])
+ AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
+
+ AC_OUTPUT([Makefile intl/Makefile lib/Makefile testsuite/Makefile \
+diff -Nru lrzsz-0.12.20.orig/lib/Makefile.am lrzsz-0.12.20/lib/Makefile.am
+--- lrzsz-0.12.20.orig/lib/Makefile.am 1998-12-27 17:25:26.000000000 +0100
++++ lrzsz-0.12.20/lib/Makefile.am 2010-09-25 00:43:43.000000000 +0200
+@@ -1,5 +1,4 @@
+ noinst_LIBRARIES=libzmodem.a
+-CFLAGS=@CFLAGS@
+ AUTOMAKE_OPTIONS=ansi2knr
+
+ EXTRA_DIST = alloca.c ansi2knr.1 ansi2knr.c \
+diff -Nru lrzsz-0.12.20.orig/po/Makefile.in.in lrzsz-0.12.20/po/Makefile.in.in
+--- lrzsz-0.12.20.orig/po/Makefile.in.in 1998-04-26 15:22:40.000000000 +0200
++++ lrzsz-0.12.20/po/Makefile.in.in 2010-09-25 00:43:43.000000000 +0200
+@@ -51,7 +51,7 @@
+
+ POTFILES = \
+
+-CATALOGS = @CATALOGS@
++CATALOGS = de.gmo
+ CATOBJEXT = @CATOBJEXT@
+ INSTOBJEXT = @INSTOBJEXT@
+
+@@ -118,8 +118,8 @@
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ case "$$cat" in \
+- *.gmo) destdir=$(gnulocaledir);; \
+- *) destdir=$(localedir);; \
++ *.gmo) destdir=$(DESTDIR)$(gnulocaledir);; \
++ *) destdir=$(DESTDIR)$(localedir);; \
+ esac; \
+ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+ dir=$$destdir/$$lang/LC_MESSAGES; \
+diff -Nru lrzsz-0.12.20.orig/src/Makefile.am lrzsz-0.12.20/src/Makefile.am
+--- lrzsz-0.12.20.orig/src/Makefile.am 1998-12-28 09:38:47.000000000 +0100
++++ lrzsz-0.12.20/src/Makefile.am 2010-09-25 00:43:43.000000000 +0200
+@@ -4,7 +4,6 @@
+ noinst_HEADERS = timing.h zglobal.h zmodem.h
+ datadir = $(prefix)/@DATADIRNAME@
+ localedir = $(datadir)/locale
+-CFLAGS=@CFLAGS@
+ DISTCLEAN_FILES=lrzszbug
+
+ LDADD = ../lib/libzmodem.a @INTLLIBS@
+@@ -14,22 +13,16 @@
+ #DEFS = -DLOCALEDIR=\"$(localedir)\" -DOS=\"@host_os@\" -DCPU=\"@host_cpu@\"
+ DEFS = -DNFGVMIN @DEFS@ -DLOCALEDIR=\"$(localedir)\"
+
+-install-exec-local:
+- rm -f $(DESTDIR)/$(bindir)/`echo lsb | sed -e '$(transform)'`
+- ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \
+- $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'`
+- rm -f $(bindir)/`echo lsx | sed -e '$(transform)'`
+- ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \
+- $(DESTDIR)/$(bindir)/`echo lsx |sed -e '$(transform)'`
+- rm -f $(bindir)/`echo lrb | sed -e '$(transform)'`
+- ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \
+- $(DESTDIR)/$(bindir)/`echo lrb |sed -e '$(transform)'`
+- rm -f $(bindir)/`echo lrx | sed -e '$(transform)'`
+- ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \
+- $(DESTDIR)/$(bindir)/`echo lrx |sed -e '$(transform)'`
+-# rm -f $(bindir)/`echo lrzszbug | sed -e '$(transform)'`
+-# ln $(bindir)/`echo lrzszbug |sed -e '$(transform)'` \
+-# $(bindir)/`echo lrzszbug |sed -e '$(transform)'`
++# Caveat: program name transformation is ignored here.
++$(DESTDIR)$(bindir)/lsz $(DESTDIR)$(bindir)/lrz: install-binPROGRAMS
++
++$(DESTDIR)$(bindir)/lsb $(DESTDIR)$(bindir)/lsx: $(DESTDIR)$(bindir)/lsz
++ rm -f $@ ; ln -s `basename $<` $@
++
++$(DESTDIR)$(bindir)/lrb $(DESTDIR)$(bindir)/lrx: $(DESTDIR)$(bindir)/lrz
++ rm -f $@ ; ln -s `basename $<` $@
++
++install-exec-local: $(DESTDIR)$(bindir)/lsb $(DESTDIR)$(bindir)/lsx $(DESTDIR)$(bindir)/lrb $(DESTDIR)$(bindir)/lrx
+
+ uninstall-local:
+ rm -f $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'`
diff --git a/net-dialup/lrzsz/files/lrzsz-implicit-decl.patch b/net-dialup/lrzsz/files/lrzsz-implicit-decl.patch
new file mode 100644
index 000000000000..9b1decdba856
--- /dev/null
+++ b/net-dialup/lrzsz/files/lrzsz-implicit-decl.patch
@@ -0,0 +1,21 @@
+--- lrzsz-0.12.20/lib/long-options.c
++++ lrzsz-0.12.20/lib/long-options.c
+@@ -22,6 +22,7 @@
+ #endif
+
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <getopt.h>
+ #include "long-options.h"
+
+--- lrzsz-0.12.20/src/lsyslog.c
++++ lrzsz-0.12.20/src/lsyslog.c
+@@ -22,6 +22,8 @@
+ #ifdef ENABLE_SYSLOG
++#define _GNU_SOURCE
+ #include "zglobal.h"
+ #include <pwd.h>
++#include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #endif
diff --git a/net-dialup/lrzsz/lrzsz-0.12.20-r10.ebuild b/net-dialup/lrzsz/lrzsz-0.12.20-r10.ebuild
new file mode 100644
index 000000000000..f5296b551493
--- /dev/null
+++ b/net-dialup/lrzsz/lrzsz-0.12.20-r10.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic toolchain-funcs
+
+DESCRIPTION="Communication package providing the X, Y, and ZMODEM file transfer protocols"
+HOMEPAGE="https://www.ohse.de/uwe/software/lrzsz.html"
+SRC_URI="
+ https://www.ohse.de/uwe/releases/${P}.tar.gz
+ https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/gettext-0.19.8-runtime-m4.tar.xz
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="nls"
+
+DEPEND="nls? ( virtual/libintl )"
+BDEPEND="nls? ( sys-devel/gettext )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-autotools.patch
+ "${FILESDIR}"/${PN}-implicit-decl.patch
+ "${FILESDIR}"/${P}-automake-1.12.patch
+ "${FILESDIR}"/${P}-automake-1.13.patch
+ "${FILESDIR}"/${P}-gettext-0.20.patch
+ "${FILESDIR}"/${P}-AR.patch
+ "${FILESDIR}"/${P}-configure-clang16.patch
+ "${FILESDIR}"/${P}-gettext-0.22.patch
+ "${FILESDIR}"/${P}-disable-nls.patch
+ "${FILESDIR}"/${P}-c99.patch
+ "${FILESDIR}"/${P}-fix-integer-overflow.patch
+ "${FILESDIR}"/${P}-c23.patch
+)
+
+DOCS=( AUTHORS COMPATABILITY ChangeLog NEWS \
+ README{,.cvs,.gettext,.isdn4linux,.tests} THANKS TODO )
+
+src_prepare() {
+ default
+
+ # automake is unhappy if this is missing
+ >> config.rpath || die
+ # This is too old. Remove it so automake puts in a newer copy.
+ rm missing || die
+ # Autoheader does not like seeing this file.
+ rm acconfig.h || die
+ # embed default m4 files in case gettext is not installed
+ mv "${WORKDIR}"/m4 . || die
+
+ eautoreconf
+}
+
+src_configure() {
+ tc-export CC
+
+ # bug #943880, bug #969297
+ append-cppflags -DSTRICT_PROTOTYPES
+
+ econf $(use_enable nls)
+}
+
+src_test() {
+ # Don't use check target.
+ # See bug #120748 before changing this function.
+ emake vcheck
+}
+
+src_install() {
+ default
+
+ local x
+ for x in {r,s}{b,x,z} ; do
+ dosym l${x} /usr/bin/${x}
+ dosym l${x:0:1}z.1 /usr/share/man/man1/${x}.1
+ [ "${x:1:1}" = "z" ] || dosym l${x:0:1}z.1 /usr/share/man/man1/l${x}.1
+ done
+}
diff --git a/net-dialup/lrzsz/metadata.xml b/net-dialup/lrzsz/metadata.xml
new file mode 100644
index 000000000000..62f678c96684
--- /dev/null
+++ b/net-dialup/lrzsz/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="project">
+ <email>embedded@gentoo.org</email>
+ <name>Embedded Gentoo</name>
+</maintainer>
+<upstream>
+ <remote-id type="cpe">cpe:/a:lrzsz_project:lrzsz</remote-id>
+</upstream>
+</pkgmetadata>
diff --git a/net-dialup/metadata.xml b/net-dialup/metadata.xml
new file mode 100644
index 000000000000..a4e517c9106b
--- /dev/null
+++ b/net-dialup/metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE catmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<catmetadata>
+ <longdescription lang="en">
+ The net-dialup category contains dialup-related networking software.
+ </longdescription>
+ <longdescription lang="de">
+ Die Kategorie net-dialup enthält Software für Dialup-Verbindungen.
+ </longdescription>
+ <longdescription lang="es">
+ La categoría net-dialup contiene paquetes relacionados con conexiones
+ telefónicas.
+ </longdescription>
+ <longdescription lang="ja">
+ net-dialupカテゴリーにはダイアルアップに関連したネットワーキング・ソフトウェアが含まれています。
+ </longdescription>
+ <longdescription lang="nl">
+ De net-dialup categorie bevat applicaties voor inbelverbindingen.
+ </longdescription>
+ <longdescription lang="vi">
+ Nhóm net-dialup chứa các phần mềm liên quan đến mạng quay số.
+ </longdescription>
+ <longdescription lang="it">
+ La categoria net-dialup contiene pacchetti per la connessione telefonica dial-up.
+ </longdescription>
+ <longdescription lang="pt">
+ A categoria net-dialup contém programas relacionados com
+ conexões telefônicas.
+ </longdescription>
+ <longdescription lang="pl">
+ Kategoria net-dialup zawiera programy sieciowe związane z połączeniami
+ telefonicznymi (dialup).
+ </longdescription>
+</catmetadata>
diff --git a/net-dialup/mgetty/Manifest b/net-dialup/mgetty/Manifest
new file mode 100644
index 000000000000..fb0032025e06
--- /dev/null
+++ b/net-dialup/mgetty/Manifest
@@ -0,0 +1 @@
+DIST mgetty-1.2.1.tar.gz 1077415 BLAKE2B 09d48c6cb7917a3dbbfc97c1d32ce43b9a3e64e8a44c8a3a7bfdd168421c287357a9d43504fb4d1b354ffb0f8e2a9c52b56ac3464f196f56064d96a7651e0d6e SHA512 2a82dfb782044d9daf8d41158fa10e991dbd7bd37ab43ea44422166554dd790e989ac49e4ff471d168d1cbb49edc5bedb8762ab61884e4653650686d1bbc2a9b
diff --git a/net-dialup/mgetty/files/mgetty-1.1.36-callback.patch b/net-dialup/mgetty/files/mgetty-1.1.36-callback.patch
new file mode 100644
index 000000000000..fcd4e0e2cd48
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.1.36-callback.patch
@@ -0,0 +1,26 @@
+diff -Nru mgetty-1.1.36.orig/Makefile mgetty-1.1.36/Makefile
+--- mgetty-1.1.36.orig/Makefile 2007-09-14 22:15:02.000000000 +0300
++++ mgetty-1.1.36/Makefile 2007-09-14 22:15:37.000000000 +0300
+@@ -164,7 +164,7 @@
+ #
+ # if your systems doesn't have one, use the shell script that I provide
+ # in "inst.sh" (taken from X11R5). Needed on IRIX5.2
+-INSTALL=install -c -o bin -g bin
++INSTALL=install -c
+ #INSTALL=install -c -o root -g wheel # NeXT/BSD
+ #INSTALL=/usr/ucb/install -c -o bin -g bin # AIX, Solaris 2.x
+ #INSTALL=installbsd -c -o bin -g bin # OSF/1, AIX 4.1, 4.2
+@@ -693,6 +693,13 @@
+
+ install-vgetty: vgetty-install
+
++install-callback:
++ cd callback; $(MAKE) CFLAGS="$(CFLAGS)" CC="$(CC)" LDFLAGS="$(LDFLAGS)" \
++ BINDIR="$(BINDIR)" SBINDIR="$(SBINDIR)" LIBDIR="$(LIBDIR)" \
++ CONFDIR="$(CONFDIR)" MAN1DIR="$(MAN1DIR)" MAN8DIR="$(MAN8DIR)" INSTALL="$(INSTALL)" \
++ LN="$(LN)" MV="$(MV)" RM="$(RM)" \
++ LIBS="$(LIBS)" install
++
+ ## test suite
+ test: bin-all
+ for D in g3 t ; do \
diff --git a/net-dialup/mgetty/files/mgetty-1.1.36-tmpfile.patch b/net-dialup/mgetty/files/mgetty-1.1.36-tmpfile.patch
new file mode 100644
index 000000000000..68f6f58868d7
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.1.36-tmpfile.patch
@@ -0,0 +1,33 @@
+diff -Nru mgetty-1.1.36.orig/fax/faxspool.in mgetty-1.1.36/fax/faxspool.in
+--- mgetty-1.1.36.orig/fax/faxspool.in 2008-12-09 23:12:31.000000000 +0000
++++ mgetty-1.1.36/fax/faxspool.in 2008-12-09 23:13:28.000000000 +0000
+@@ -675,9 +675,8 @@
+ if [ x$file = x- ]
+ then
+ $echo "spooling $file (stdin)..."
+- trap "rm /tmp/faxsp.$$" 0
+- cat - >/tmp/faxsp.$$
+- file=/tmp/faxsp.$$
++ file=$spooldir/faxsp
++ cat - > $file
+ else
+ $echo "spooling $file..."
+ fi
+@@ -924,7 +923,7 @@
+ then
+ $echo "\nnothing to do (no cover page, no data)." >&2
+ cd $FAX_SPOOL_OUT
+- rmdir $spooldir
++ rm -rf $spooldir
+ exit 52
+ fi
+
+@@ -965,7 +964,7 @@
+ # clean up
+ rm $job.q
+ cd ..
+-rmdir $spooldir
++rm -rf $spooldir
+
+ if [ -z "`find $LAST_RUN -ctime -1 -print 2>/dev/null`" ]
+ then
diff --git a/net-dialup/mgetty/files/mgetty-1.1.37-nofax.patch b/net-dialup/mgetty/files/mgetty-1.1.37-nofax.patch
new file mode 100644
index 000000000000..6636526b691e
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.1.37-nofax.patch
@@ -0,0 +1,110 @@
+diff -Nru mgetty-1.1.37.orig/doc/Makefile mgetty-1.1.37/doc/Makefile
+--- mgetty-1.1.37.orig/doc/Makefile 2007-11-25 09:31:56.000000000 +0200
++++ mgetty-1.1.37/doc/Makefile 2007-11-25 09:28:02.000000000 +0200
+@@ -6,11 +6,10 @@
+ NROFF=nroff
+ #
+ #
+-MAN1PAGES=g32pbm.1 g3cat.1 pbm2g3.1 sff2g3.1 fax.1 \
+- faxspool.1 faxrunq.1 faxq.1 faxrm.1 coverpg.1
++MAN1PAGES=
+ MAN4PAGES=mgettydefs.4
+-MAN5PAGES=faxqueue.5
+-MAN8PAGES=sendfax.8 mgetty.8 callback.8 faxrunqd.8 faxq-helper.8
++MAN5PAGES=
++MAN8PAGES=mgetty.8 callback.8
+ MANSRC=$(MAN1PAGES) $(MAN4PAGES) $(MAN5PAGES) $(MAN8PAGES)
+ MAN1DIR=/usr/local/man/man1
+ MAN4DIR=/usr/local/man/man4
+diff -Nru mgetty-1.1.37.orig/Makefile mgetty-1.1.37/Makefile
+--- mgetty-1.1.37.orig/Makefile 2007-11-25 09:31:58.000000000 +0200
++++ mgetty-1.1.37/Makefile 2007-11-25 09:34:45.000000000 +0200
+@@ -324,7 +324,7 @@
+
+ all: bin-all doc-man-only
+
+-bin-all: mgetty sendfax newslock sedscript subdirs call-back
++bin-all: mgetty newslock sedscript subdirs call-back
+
+ # a few C files need extra compiler arguments
+
+@@ -369,9 +369,7 @@
+ # subdirectories...
+
+ subdirs: sedscript
+- cd g3 && $(MAKE) "CC=$(CC)" "CFLAGS=$(CFLAGS) -I.." "LDFLAGS=$(LDFLAGS)" "LIBS=$(LIBS)" all
+ cd tools && $(MAKE) "CC=$(CC)" "CFLAGS=$(CFLAGS) -I.." "LDFLAGS=$(LDFLAGS)" "LIBS=$(LIBS)" all
+- cd fax && $(MAKE) "CC=$(CC)" "CFLAGS=$(CFLAGS) -I.." "LDFLAGS=$(LDFLAGS)" "LIBS=$(LIBS)" "FAX_SPOOL_OUT=$(FAX_SPOOL_OUT)" "FAX_OUT_USER=$(FAX_OUT_USER)" "CONFDIR=$(CONFDIR)" all
+
+ call-back:
+ @$(MAKE) mgetty
+@@ -597,7 +595,6 @@
+
+ -test -d $(SBINDIR) || ( ./mkidirs $(SBINDIR) ; chmod 755 $(SBINDIR) )
+ $(INSTALL) -m 700 mgetty $(SBINDIR)
+- $(INSTALL) -m 755 sendfax $(SBINDIR)
+ #
+ # data files + directories
+ #
+@@ -609,12 +606,8 @@
+ $(INSTALL) -o root -m 600 login.config $(CONFDIR)/
+ test -f $(CONFDIR)/mgetty.config || \
+ $(INSTALL) -o root -m 600 mgetty.config $(CONFDIR)/
+- test -f $(CONFDIR)/sendfax.config || \
+- $(INSTALL) -o root -m 644 sendfax.config $(CONFDIR)/
+ test -f $(CONFDIR)/dialin.config || \
+ $(INSTALL) -o root -m 600 dialin.config $(CONFDIR)/
+- test -f $(CONFDIR)/faxrunq.config || \
+- $(INSTALL) -o root -m 644 faxrunq.config $(CONFDIR)/
+ #
+ # test for outdated stuff
+ #
+@@ -626,34 +626,6 @@
+ echo "" ;\
+ fi
+ #
+-# fax spool directories
+-#
+- test -d $(spool) || \
+- ( ./mkidirs $(spool) && chmod 755 $(spool) )
+- test -d $(FAX_SPOOL) || \
+- ( ./mkidirs $(FAX_SPOOL) && \
+- chown $(FAX_OUT_USER) $(FAX_SPOOL) && \
+- chmod 755 $(FAX_SPOOL) )
+- test -d $(FAX_SPOOL_IN) || \
+- ( ./mkidirs $(FAX_SPOOL_IN) && chmod 755 $(FAX_SPOOL_IN) )
+- test -d $(FAX_SPOOL_OUT) || \
+- ./mkidirs $(FAX_SPOOL_OUT)
+- chown $(FAX_OUT_USER) $(FAX_SPOOL_OUT)
+- chmod 755 $(FAX_SPOOL_OUT)
+-#
+-# g3 tool programs
+-#
+- cd g3 && $(MAKE) install INSTALL="$(INSTALL)" \
+- BINDIR=$(BINDIR) \
+- LIBDIR=$(LIBDIR) CONFDIR=$(CONFDIR)
+-#
+-# fax programs / scripts / font file
+-#
+- cd fax && $(MAKE) install INSTALL="$(INSTALL)" \
+- FAX_OUT_USER=$(FAX_OUT_USER) \
+- BINDIR=$(BINDIR) SBINDIR=$(SBINDIR) \
+- LIBDIR=$(LIBDIR) CONFDIR=$(CONFDIR)
+-#
+ # compatibility
+ #
+ if [ ! -z "$(INSTALL_MECHO)" ] ; then \
+diff -Nru mgetty-1.1.37.orig/t/Makefile mgetty-1.1.37/t/Makefile
+--- mgetty-1.1.37.orig/t/Makefile 2006-09-26 01:32:10.000000000 +0300
++++ mgetty-1.1.37/t/Makefile 2007-11-25 09:32:28.000000000 +0200
+@@ -8,8 +8,8 @@
+ CFLAGS=-O2 -I.. -g #-DT_LOG_VERBOSE
+
+ TEST_PROGRAMS=t_config t_ring
+-TEST_HELP_PGM=t_g3f_c
+-TEST_SCRIPTS=t_echo t_trap t_g3file
++TEST_HELP_PGM=
++TEST_SCRIPTS=t_echo t_trap
+
+ test: $(TEST_PROGRAMS) $(TEST_HELP_PGM)
+ @for f in $(TEST_PROGRAMS) ; \
diff --git a/net-dialup/mgetty/files/mgetty-1.1.37-qa-fixes.patch b/net-dialup/mgetty/files/mgetty-1.1.37-qa-fixes.patch
new file mode 100644
index 000000000000..e803b4243155
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.1.37-qa-fixes.patch
@@ -0,0 +1,175 @@
+diff -Nru mgetty-1.1.37.orig/doc/Makefile mgetty-1.1.37/doc/Makefile
+--- mgetty-1.1.37.orig/doc/Makefile 2006-02-22 18:35:02.000000000 +0100
++++ mgetty-1.1.37/doc/Makefile 2009-08-31 20:31:01.000000000 +0200
+@@ -64,7 +64,7 @@
+
+ install: $(MANSRC) mgetty.info
+ for D in `dirname $(MAN1DIR)` $(MAN1DIR) $(MAN4DIR) $(MAN5DIR) $(MAN8DIR) ; do \
+- if [ ! -d $$D ] ; then mkdir $$D || exit 1 ; fi ; \
++ if [ ! -d $$D ] ; then mkdir -p $$D || exit 1 ; fi ; \
+ done
+ for i in $(MAN1PAGES) ; do \
+ $(INSTALL) -m 644 $$i $(MAN1DIR) ; \
+@@ -122,16 +122,16 @@
+ #
+ .SUFFIXES: .1in .4in .5in .8in .1 .4 .5 .8
+
+-.1in.1:
++.1in.1: ../sedscript
+ ../sedscript <$< >$*.1
+
+-.4in.4:
++.4in.4: ../sedscript
+ ../sedscript <$< >$*.4
+
+-.5in.5:
++.5in.5: ../sedscript
+ ../sedscript <$< >$*.5
+
+-.8in.8:
++.8in.8: ../sedscript
+ ../sedscript <$< >$*.8
+
+ #
+diff -Nru mgetty-1.1.37.orig/fax/Makefile mgetty-1.1.37/fax/Makefile
+--- mgetty-1.1.37.orig/fax/Makefile 2006-02-22 18:25:30.000000000 +0100
++++ mgetty-1.1.37/fax/Makefile 2009-08-31 20:31:01.000000000 +0200
+@@ -36,7 +36,7 @@
+ @cd .. ; $(MAKE) sedscript
+
+ faxq-helper: faxq-helper.o
+- $(CC) $(CFLAGS) -o faxq-helper faxq-helper.o
++ $(CC) $(LDLAGS) -o faxq-helper faxq-helper.o
+
+ faxq-helper.o: faxq-helper.c ../sedscript
+ $(CC) $(CFLAGS) -DFAX_SPOOL_OUT=\"$(FAX_SPOOL_OUT)\" \
+diff -Nru mgetty-1.1.37.orig/fax_lib.h mgetty-1.1.37/fax_lib.h
+--- mgetty-1.1.37.orig/fax_lib.h 2007-06-15 08:44:36.000000000 +0200
++++ mgetty-1.1.37/fax_lib.h 2009-08-31 20:31:01.000000000 +0200
+@@ -41,6 +41,7 @@
+ int fax_set_fdcc _PROTO(( int fd, int fine, int maxsp, int minsp ));
+ int fax_set_bor _PROTO(( int fd, int bit_order ));
+ int fax_set_flowcontrol _PROTO(( int fd, int hw_flow ));
++void fax_init_swaptable _PROTO(( int direct, unsigned char byte_tab[] ));
+ int mdm_identify _PROTO(( int fd ));
+ void fax2_incoming_nsf _PROTO(( char * nsf_hex ));
+ void fax1_incoming_nsf _PROTO(( uch * nsf_bin, int len ));
+diff -Nru mgetty-1.1.37.orig/frontends/www/Makefile mgetty-1.1.37/frontends/www/Makefile
+--- mgetty-1.1.37.orig/frontends/www/Makefile 2006-02-22 18:25:32.000000000 +0100
++++ mgetty-1.1.37/frontends/www/Makefile 2009-08-31 20:31:01.000000000 +0200
+@@ -125,12 +125,12 @@
+ #
+ .SUFFIXES: .in .cgi .html
+
+-.in.cgi:
++.in.cgi: ../../sedscript
+ rm -f $*.cgi
+ ../../sedscript <$< >$*.cgi
+ chmod +x $*.cgi
+
+-.in.html:
++.in.html: ../../sedscript
+ rm -f $*.html
+ ../../sedscript <$< | \
+ sed -e "s!@CGI_HREF@!$(CGI_HREF)!" >$*.html
+diff -Nru mgetty-1.1.37.orig/logfile.c mgetty-1.1.37/logfile.c
+--- mgetty-1.1.37.orig/logfile.c 2005-11-26 14:48:16.000000000 +0100
++++ mgetty-1.1.37/logfile.c 2009-08-31 20:31:01.000000000 +0200
+@@ -58,10 +58,10 @@
+ /* Most systems have these variables but do not declare them. On many
+ of those systems that _do_ declare them, it won't hurt */
+
+-#if !defined(__NetBSD__) && !defined( __FreeBSD__ ) && !defined(__OpenBSD__) && !defined(__GLIBC__) && !defined(__MACH__)
++/*#if !defined(__NetBSD__) && !defined( __FreeBSD__ ) && !defined(__OpenBSD__) && !defined(__GLIBC__) && !defined(__MACH__)
+ extern int sys_nerr;
+ extern char *sys_errlist[];
+-#endif
++#endif*/
+
+ /* Interactive Unix is a little bit braindead - does not have atexit(),
+ */
+@@ -211,6 +211,7 @@
+ va_list pvar;
+ int errnr;
+ char * p;
++char *error_string;
+ static int first_open = TRUE;
+
+ if ( level > log_level ) /* log level high enough? */
+@@ -327,12 +328,20 @@
+ }
+ else /* ERROR or FATAL */
+ {
++ error_string = strerror (errnr);
++ if ( error_string == NULL )
++ {
++ if ( errno == EINVAL )
++ error_string = "<error not in list>";
++ else
++ error_string = "<error calling strerror()>";
++ }
++
+ fprintf(log_fp, "\n%02d/%02d %02d:%02d:%02d %s %s: %s",
+ tm->tm_mon+1, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec,
+ log_infix, ws,
+- ( errnr <= sys_nerr ) ? sys_errlist[errnr]:
+- "<error not in list>" );
++ strerror (errnr));
+ #ifdef SYSLOG
+ syslog( level == L_FATAL? LOG_ALERT: LOG_ERR, "%s: %m", ws );
+ #endif
+diff -Nru mgetty-1.1.37.orig/Makefile mgetty-1.1.37/Makefile
+--- mgetty-1.1.37.orig/Makefile 2009-08-31 20:30:33.000000000 +0200
++++ mgetty-1.1.37/Makefile 2009-08-31 20:32:08.000000000 +0200
+@@ -368,7 +368,7 @@
+
+ # subdirectories...
+
+-subdirs:
++subdirs: sedscript
+ cd g3 && $(MAKE) "CC=$(CC)" "CFLAGS=$(CFLAGS) -I.." "LDFLAGS=$(LDFLAGS)" "LIBS=$(LIBS)" all
+ cd tools && $(MAKE) "CC=$(CC)" "CFLAGS=$(CFLAGS) -I.." "LDFLAGS=$(LDFLAGS)" "LIBS=$(LIBS)" all
+ cd fax && $(MAKE) "CC=$(CC)" "CFLAGS=$(CFLAGS) -I.." "LDFLAGS=$(LDFLAGS)" "LIBS=$(LIBS)" "FAX_SPOOL_OUT=$(FAX_SPOOL_OUT)" "FAX_OUT_USER=$(FAX_OUT_USER)" "CONFDIR=$(CONFDIR)" all
+@@ -633,15 +633,15 @@
+ # fax spool directories
+ #
+ test -d $(spool) || \
+- ( mkdir $(spool) && chmod 755 $(spool) )
++ ( ./mkidirs $(spool) && chmod 755 $(spool) )
+ test -d $(FAX_SPOOL) || \
+- ( mkdir $(FAX_SPOOL) && \
++ ( ./mkidirs $(FAX_SPOOL) && \
+ chown $(FAX_OUT_USER) $(FAX_SPOOL) && \
+ chmod 755 $(FAX_SPOOL) )
+ test -d $(FAX_SPOOL_IN) || \
+- ( mkdir $(FAX_SPOOL_IN) && chmod 755 $(FAX_SPOOL_IN) )
++ ( ./mkidirs $(FAX_SPOOL_IN) && chmod 755 $(FAX_SPOOL_IN) )
+ test -d $(FAX_SPOOL_OUT) || \
+- mkdir $(FAX_SPOOL_OUT)
++ ./mkidirs $(FAX_SPOOL_OUT)
+ chown $(FAX_OUT_USER) $(FAX_SPOOL_OUT)
+ chmod 755 $(FAX_SPOOL_OUT)
+ #
+diff -Nru mgetty-1.1.37.orig/t/t_g3f_c.c mgetty-1.1.37/t/t_g3f_c.c
+--- mgetty-1.1.37.orig/t/t_g3f_c.c 2007-05-05 14:03:03.000000000 +0200
++++ mgetty-1.1.37/t/t_g3f_c.c 2009-08-31 20:31:01.000000000 +0200
+@@ -19,6 +19,7 @@
+ #include "fax_lib.h"
+
+ #include <stdio.h>
++#include <unistd.h>
+ #include <signal.h>
+ #include <errno.h>
+ #include <stdlib.h>
+diff -Nru mgetty-1.1.37.orig/t/t_ring.c mgetty-1.1.37/t/t_ring.c
+--- mgetty-1.1.37.orig/t/t_ring.c 2005-03-23 10:56:21.000000000 +0100
++++ mgetty-1.1.37/t/t_ring.c 2009-08-31 20:31:01.000000000 +0200
+@@ -24,6 +24,7 @@
+
+ #include "mgetty.h"
+ #include <stdio.h>
++#include <string.h>
+ #include <signal.h>
+ #include <errno.h>
+ #ifdef T_LOG_VERBOSE
diff --git a/net-dialup/mgetty/files/mgetty-1.2.1-Lucent.c.patch b/net-dialup/mgetty/files/mgetty-1.2.1-Lucent.c.patch
new file mode 100644
index 000000000000..ac73bea808c0
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.2.1-Lucent.c.patch
@@ -0,0 +1,16 @@
+--- a/voice/libvoice/Lucent.c
++++ b/voice/libvoice/Lucent.c
+@@ -96,6 +96,13 @@
+ if (voice_command("AT+VLS=0", "OK") != VMA_USER_1)
+ lprintf(L_WARN, "can't deselect all input/output devices");
+
++ /* the Lucent chips DO support Caller ID, this command is OK */
++ /* Just borrowed from the V253modem.c file */
++ /* enable callerid (if supported) and setformat */
++ if (voice_command("AT+VCID=1", "OK") != VMA_USER_1)
++ lprintf(L_WARN, "can't set caller ID output");
++ /* mgetty supports formated callerid output */
++
+ voice_modem_state = IDLE;
+ return(OK);
+ }
diff --git a/net-dialup/mgetty/files/mgetty-1.2.1-aarch64.patch b/net-dialup/mgetty/files/mgetty-1.2.1-aarch64.patch
new file mode 100644
index 000000000000..9d3b9cbc9633
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.2.1-aarch64.patch
@@ -0,0 +1,11 @@
+diff -U3 -r a/mgetty.h b/mgetty.h
+--- a/mgetty.h 2006-01-01 12:13:18.000000000 -0500
++++ b/mgetty.h 2018-01-13 12:53:00.337516215 -0500
+@@ -198,7 +198,7 @@
+ */
+ #if defined(__alpha__) || defined(__sparc64__) || \
+ defined(__ia64__) || defined(__s390x__) || defined(__x86_64__) || \
+- defined(__powerpc64__)
++ defined(__powerpc64__) || defined(__aarch64__)
+ # define PTR_IS_LONG
+ #endif
diff --git a/net-dialup/mgetty/files/mgetty-1.2.1-gentoo.patch b/net-dialup/mgetty/files/mgetty-1.2.1-gentoo.patch
new file mode 100644
index 000000000000..fd46ff23ed46
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.2.1-gentoo.patch
@@ -0,0 +1,154 @@
+--- a/callback/Makefile
++++ b/callback/Makefile
+@@ -37,7 +37,7 @@
+ # install programs
+ #
+ install: all
+- $(INSTALL) -s -m 700 -o root callback $(SBINDIR)
+- $(INSTALL) -s -m 4711 -o root ct $(BINDIR)
++ $(INSTALL) -m 700 -o root callback $(SBINDIR)
++ $(INSTALL) -m 4711 -o root ct $(BINDIR)
+
+ # source modules
+--- a/doc/mgetty.texi-in
++++ b/doc/mgetty.texi-in
+@@ -19,6 +19,11 @@
+ Copyright @copyright{} 1993-2005 Gert Doering
+ @end ifinfo
+
++@dircategory User
++@direntry
++* MGETTY: (mgetty). Modem+Voice+Fax utilities
++@end direntry
++
+ @titlepage
+ @sp 6
+ @center @titlefont{mgetty+sendfax}
+--- a/fax/faxspool.in
++++ b/fax/faxspool.in
+@@ -390,7 +390,7 @@
+
+ #
+ # convert pdf data
+-# needs GNU GhostScript and Adobe acroread installed.
++# needs GNU GhostScript installed.
+ # For driver selection, see definition of GS_DRIVER_{HI,LO} above.
+ #
+ # contributed by mfvm@gmx.de (Michael Fischer v. Mollard)
+@@ -401,7 +401,7 @@
+ test X$3 = X-n && driver="$GS_DRIVER_LO"
+
+ cat $1 |
+- acroread -toPostScript |
++ pdf2ps -sOutputFile=- - |
+ gs $driver -sOutputFile=$2%03d -dNOPAUSE -q -dSAFER -
+ }
+
+--- a/frontends/X11/viewfax/Makefile
++++ b/frontends/X11/viewfax/Makefile
+@@ -61,7 +61,7 @@
+ g3hack: g3hack.c
+
+ install: viewfax
+- $(INSTALL) -s -m 755 viewfax $(BINDIR)
++ $(INSTALL) -m 755 viewfax $(BINDIR)
+ $(INSTALL) -m 644 viewfax.man $(MANDIR)/viewfax.1
+ $(INSTALL) -m 644 viewfax.tif $(LIBDIR)
+
+--- a/g3/Makefile
++++ b/g3/Makefile
+@@ -37,13 +37,13 @@
+ # install programs
+ #
+ for f in $(G3_PROGRAMS) ; do \
+- $(INSTALL) -s -m 755 $$f $(BINDIR) ; \
++ $(INSTALL) -m 755 $$f $(BINDIR) ; \
+ done
+ #
+ # make symlink for "g3topbm" (so third-party fax viewers won't fail)
+-#
+- -cd $(BINDIR) ; \
+- test -x g3topbm || ln -s g32pbm g3topbm
++# Note for Gentoo: following lines will create collision with netpbm if netpbm is installed after
++# -cd $(BINDIR) ; \
++# test -x g3topbm || ln -s g32pbm g3topbm
+
+
+ # test suite
+--- a/Makefile
++++ b/Makefile
+@@ -596,12 +596,8 @@
+ $(INSTALL) -m 755 newslock $(BINDIR)
+
+ -test -d $(SBINDIR) || ( ./mkidirs $(SBINDIR) ; chmod 755 $(SBINDIR) )
+- if [ -f $(SBINDIR)/mgetty ] ; then \
+- mv -f $(SBINDIR)/mgetty $(SBINDIR)/mgetty.old ; fi
+- if [ -f $(SBINDIR)/sendfax ] ; then \
+- mv -f $(SBINDIR)/sendfax $(SBINDIR)/sendfax.old ; fi
+- $(INSTALL) -s -m 700 mgetty $(SBINDIR)
+- $(INSTALL) -s -m 755 sendfax $(SBINDIR)
++ $(INSTALL) -m 700 mgetty $(SBINDIR)
++ $(INSTALL) -m 755 sendfax $(SBINDIR)
+ #
+ # data files + directories
+ #
+@@ -663,7 +661,7 @@
+ if [ ! -z "$(INSTALL_MECHO)" ] ; then \
+ cd compat ; \
+ $(CC) $(CFLAGS) -o mg.echo mg.echo.c && \
+- $(INSTALL) -s -m 755 mg.echo $(BINDIR) ; \
++ $(INSTALL) -m 755 mg.echo $(BINDIR) ; \
+ fi
+
+ #
+--- a/mgetty.cfg.in
++++ b/mgetty.cfg.in
+@@ -20,16 +20,16 @@
+ # access the modem(s) with @SPEED@ bps
+ speed @SPEED@
+
+-# use these options to make the /dev/tty-device owned by "uucp.uucp"
++# use these options to make the /dev/tty-device owned by "fax.fax"
+ # and mode "rw-rw-r--" (0664). *LEADING ZERO NEEDED!*
+-#port-owner uucp
+-#port-group uucp
++#port-owner fax
++#port-group fax
+ #port-mode 0664
+
+-# use these options to make incoming faxes owned by "root.uucp"
++# use these options to make incoming faxes owned by "root.fax"
+ # and mode "rw-r-----" (0640). *LEADING ZERO NEEDED!*
+ #fax-owner root
+-#fax-group uucp
++#fax-group fax
+ #fax-mode 0640
+
+
+--- a/voice/Makefile
++++ b/voice/Makefile
+@@ -85,6 +85,7 @@
+ @echo ""
+ $(INSTALL) -m 700 vgetty/vgetty $(SBINDIR)
+ $(INSTALL) -m 755 vm/vm $(BINDIR)
++ $(INSTALL) -m 644 voice.conf-dist $(CONFDIR)/voice.conf
+ for i in $(PVFTOOLS); \
+ do \
+ $(INSTALL) -m 755 pvftools/$$i $(BINDIR); \
+--- a/voice/voice.conf-dist
++++ b/voice/voice.conf-dist
+@@ -47,11 +47,11 @@
+ voice_dir /var/spool/voice
+
+ #
+-# incoming messages are owned by "root.phone" and mode "rw-rw----" (0660)
++# incoming messages are owned by "fax:fax" and mode "rw-rw----" (0660)
+ #
+
+-phone_owner root
+-phone_group phone
++phone_owner fax
++phone_group fax
+ phone_mode 0660
+
+ #
diff --git a/net-dialup/mgetty/files/mgetty-1.2.1-riscv64.patch b/net-dialup/mgetty/files/mgetty-1.2.1-riscv64.patch
new file mode 100644
index 000000000000..b57a04365e71
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty-1.2.1-riscv64.patch
@@ -0,0 +1,11 @@
+diff -U3 -r a/mgetty.h b/mgetty.h
+--- a/mgetty.h
++++ b/mgetty.h
+@@ -198,7 +198,7 @@
+ */
+ #if defined(__alpha__) || defined(__sparc64__) || \
+ defined(__ia64__) || defined(__s390x__) || defined(__x86_64__) || \
+- defined(__powerpc64__) || defined(__aarch64__)
++ defined(__powerpc64__) || defined(__aarch64__) || (defined(__riscv) && __riscv_xlen == 64)
+ # define PTR_IS_LONG
+ #endif
diff --git a/net-dialup/mgetty/files/mgetty.service b/net-dialup/mgetty/files/mgetty.service
new file mode 100644
index 000000000000..2ca018ed49f4
--- /dev/null
+++ b/net-dialup/mgetty/files/mgetty.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Smart Modem Getty
+Documentation=man:mgetty(8)
+
+[Service]
+ExecStart=/usr/sbin/mgetty /dev/%i
+Restart=always
+PIDFile=/run/mgetty.%i.pid
+Type=simple
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-dialup/mgetty/metadata.xml b/net-dialup/mgetty/metadata.xml
new file mode 100644
index 000000000000..f945b5ceddb1
--- /dev/null
+++ b/net-dialup/mgetty/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <longdescription>
+ Suite of programs that allows you to take full advantage
+ of your voice/fax modem. Mgetty is capable of handling data,
+ fax and voice calls without interfering with outgoing calls.
+ </longdescription>
+ <use>
+ <flag name="fax">Enables fax support</flag>
+ <flag name="fidonet">Enables FidoNet support</flag>
+ </use>
+</pkgmetadata>
diff --git a/net-dialup/mgetty/mgetty-1.2.1-r4.ebuild b/net-dialup/mgetty/mgetty-1.2.1-r4.ebuild
new file mode 100644
index 000000000000..d928483f491b
--- /dev/null
+++ b/net-dialup/mgetty/mgetty-1.2.1-r4.ebuild
@@ -0,0 +1,185 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic systemd toolchain-funcs
+
+DESCRIPTION="A programm for sending and receiving fax and voice"
+HOMEPAGE="http://mgetty.greenie.net/"
+SRC_URI="http://mgetty.greenie.net/source/$(ver_cut 1-2)/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="+fax fidonet split-usr"
+
+DEPEND="
+ dev-lang/perl
+ sys-apps/groff
+ sys-apps/texinfo
+ app-alternatives/awk
+ fax? ( !net-misc/efax )
+"
+RDEPEND="
+ ${DEPEND}
+ acct-group/fax
+ acct-user/fax
+ fax? (
+ app-text/ghostscript-gpl
+ media-libs/netpbm
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.1.36-callback.patch
+ "${FILESDIR}"/${PN}-1.1.36-tmpfile.patch
+ "${FILESDIR}"/${PN}-1.1.37-qa-fixes.patch
+ "${FILESDIR}"/${PN}-1.2.1-Lucent.c.patch
+ "${FILESDIR}"/${PN}-1.2.1-gentoo.patch
+ "${FILESDIR}"/${PN}-1.2.1-aarch64.patch
+ "${FILESDIR}"/${PN}-1.2.1-riscv64.patch
+)
+
+src_prepare() {
+ default
+
+ chmod +x mkidirs || die
+
+ # don't install fax related files - bug #195467
+ use fax || eapply "${FILESDIR}/${PN}-1.1.37-nofax.patch"
+
+ sed -i -e 's:/usr/local/lib/mgetty+sendfax:/etc/mgetty+sendfax:' faxrunq.config || die 'changing mgetty config dir failed'
+ sed -i -e 's:/usr/local/bin/g3cat:/usr/bin/g3cat:' faxrunq.config fax/faxspool.rules || die 'changing g3cat path failed'
+
+ sed -e "/^doc-all:/s/mgetty.asc mgetty.info mgetty.dvi mgetty.ps/mgetty.info/" \
+ -i doc/Makefile || die 'first sed on doc/Makefile failed'
+
+ sed -i \
+ -e 's:^CC=:CC?=:g' \
+ -e 's:^CFLAGS=:CFLAGS?=:g' \
+ {,*/}Makefile || die
+ sed -i \
+ -e 's:^AR=:AR?=:g' \
+ -e 's:^CFLAGS=:CFLAGS+= -I..:g' \
+ -e 's:^RANLIB=:RANLIB?=:g' \
+ */Makefile || die
+
+ # Use POSIX compatible commands
+ sed -e 's/echo -e/printf %b/g' -i Makefile || die
+}
+
+src_configure() {
+ tc-export AR CC RANLIB
+ use fidonet && append-cppflags "-DFIDO"
+ append-cppflags "-DAUTO_PPP"
+ filter-lto
+
+ sed -e 's:var/log/mgetty:var/log/mgetty/mgetty:' \
+ -e 's:var/log/sendfax:var/log/mgetty/sendfax:' \
+ -e 's:\/\* \(\#define CNDFILE "dialin.config"\) \*\/:\1:' \
+ -e 's:\(\#define FAX_NOTIFY_PROGRAM\).*:\1 "/etc/mgetty+sendfax/new_fax":' \
+ policy.h-dist > policy.h || die 'creating policy.h failed'
+
+ sed -i \
+ -e "s/\$(CFLAGS) -o newslock/${CFLAGS} ${LDFLAGS} -Wall -o newslock/" \
+ -e "s/\$(LDLAGS)/${LDFLAGS}/" \
+ {,fax/}Makefile || die
+}
+
+src_compile() {
+ local target
+ for target in mgetty sedscript all vgetty;do
+ VARTEXFONTS="${T}"/fonts emake prefix=/usr \
+ CONFDIR=/etc/mgetty+sendfax \
+ CFLAGS="${CFLAGS} ${CPPFLAGS}" \
+ LDFLAGS="${LDFLAGS}" \
+ ${target}
+ done
+}
+
+src_install() {
+ # parallelization issue: vgetty-install target fails if install target
+ # isn't finished
+ local target
+ for target in install "vgetty-install install-callback"; do
+ emake prefix="${D}/usr" \
+ INFODIR="${D}/usr/share/info" \
+ CONFDIR="${D}/etc/mgetty+sendfax" \
+ MAN1DIR="${D}/usr/share/man/man1" \
+ MAN4DIR="${D}/usr/share/man/man4" \
+ MAN5DIR="${D}/usr/share/man/man5" \
+ MAN8DIR="${D}/usr/share/man/man8" \
+ SBINDIR="${D}/usr/sbin" \
+ BINDIR="${D}/usr/bin" \
+ VOICE_DIR="${D}/var/spool/voice" \
+ PHONE_GROUP=fax \
+ PHONE_PERMS=755 \
+ spool="${D}/var/spool" \
+ ${target}
+ done
+
+ keepdir /var/log/mgetty
+
+ # Install mgetty into /sbin (#119078)
+ if use split-usr; then
+ dodir /sbin
+ mv "${D}"/usr/sbin/mgetty "${D}"/sbin || die
+ dosym ../../sbin/mgetty /usr/sbin/mgetty
+ fi
+
+ # Don't install ct (#106337)
+ rm "${D}"/usr/bin/ct || die "failed to remove useless ct program"
+
+ dodoc BUGS ChangeLog README.1st Recommend THANKS TODO \
+ doc/*.txt doc/modems.db
+ doinfo doc/mgetty.info
+
+ docinto vgetty
+ dodoc voice/{Readme,Announce,ChangeLog,Credits}
+
+ docinto vgetty/doc
+ dodoc voice/doc/*
+
+ if use fax; then
+ mv samples/new_fax.all samples_new_fax.all || die "move failed."
+ docinto samples
+ dodoc samples/*
+
+ docinto samples/new_fax
+ dodoc samples_new_fax.all/*
+ fi
+
+ if ! use fax; then
+ insinto /usr/share/${PN}/frontends
+ doins -r frontends/{voice,network}
+ else
+ insinto /usr/share/${PN}
+ doins -r frontends
+ fi
+ insinto /usr/share/${PN}
+ doins -r patches
+ insinto /usr/share/${PN}/voice
+ doins -r voice/{contrib,Perl,scripts}
+
+ diropts -m 0750 -o fax -g fax
+ dodir /var/spool/voice
+ keepdir /var/spool/voice/incoming
+ keepdir /var/spool/voice/messages
+ if use fax; then
+ dodir /var/spool/fax
+ dodir /var/spool/fax/outgoing
+ keepdir /var/spool/fax/outgoing/locks
+ keepdir /var/spool/fax/incoming
+ fi
+
+ systemd_newunit "${FILESDIR}"/mgetty.service mgetty@.service
+}
+
+pkg_postinst() {
+ elog "Users who wish to use the fax or voicemail capabilities must be members"
+ elog "of the group fax in order to access files"
+ elog
+ elog "If you want to grab voice messages from a remote location, you must save"
+ elog "the password in /var/spool/voice/.code file"
+}
diff --git a/net-dialup/mingetty/Manifest b/net-dialup/mingetty/Manifest
new file mode 100644
index 000000000000..2ebeb484e27f
--- /dev/null
+++ b/net-dialup/mingetty/Manifest
@@ -0,0 +1 @@
+DIST mingetty-1.08.tar.gz 13476 BLAKE2B a6a1e2fd84cc3c1b7a26919989d79268818cf0ee50b544f92d700e31e42bd527ec8caf97df8aa04486190a8e6c3ac379ec0507ce1488c1a1ffb4a53359233727 SHA512 d2c050a412af81d4635cbaa5610dfa2cf2addce0d3116fa53f73eb15cd6b53d476165a0509ae630a151de07a5bdc82cba1b5da0ab78d0313b200adece3c8872b
diff --git a/net-dialup/mingetty/files/mingetty-1.08-check_chroot_chdir_nice.patch b/net-dialup/mingetty/files/mingetty-1.08-check_chroot_chdir_nice.patch
new file mode 100644
index 000000000000..84599667551b
--- /dev/null
+++ b/net-dialup/mingetty/files/mingetty-1.08-check_chroot_chdir_nice.patch
@@ -0,0 +1,36 @@
+Check chdir() on chroot() syscalls (and similar) as chroot without proper
+chdir() allows to escape from changed root.
+
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=597382
+https://sourceforge.net/tracker/?func=detail&aid=3095679&group_id=80387&atid=559616
+
+--- mingetty-1.08/mingetty.c
++++ mingetty-1.08/mingetty.c
+@@ -422,12 +422,21 @@
+ while ((logname = get_logname ()) == 0)
+ /* do nothing */ ;
+
+- if (ch_root)
+- chroot (ch_root);
+- if (ch_dir)
+- chdir (ch_dir);
+- if (priority)
+- nice (priority);
++ if (ch_root) {
++ if (chroot (ch_root))
++ error ("chroot(\"%s\") failed: %s", ch_root, strerror (errno));
++ if (chdir("/"))
++ error ("chdir(\"/\") failed: %s", strerror (errno));
++ }
++ if (ch_dir) {
++ if (chdir (ch_dir))
++ error ("chdir(\"%s\") failed: %s", ch_dir, strerror (errno));
++ }
++ if (priority) {
++ errno = 0; /* see the nice(2) NOTES for why we do this */
++ if ((nice (priority) == -1) && (errno != 0))
++ error ("nice(%d) failed: %s", priority, strerror (errno));
++ }
+
+ execl (loginprog, loginprog, autologin? "-f" : "--", logname, NULL);
+ error ("%s: can't exec %s: %s", tty, loginprog, strerror (errno));
diff --git a/net-dialup/mingetty/files/mingetty-1.08-utf8.patch b/net-dialup/mingetty/files/mingetty-1.08-utf8.patch
new file mode 100644
index 000000000000..c57bc0b6ad4e
--- /dev/null
+++ b/net-dialup/mingetty/files/mingetty-1.08-utf8.patch
@@ -0,0 +1,156 @@
+diff -Nru mingetty-1.08.orig/mingetty.c mingetty-1.08/mingetty.c
+--- mingetty-1.08.orig/mingetty.c 2008-01-18 13:13:07.000000000 +0200
++++ mingetty-1.08/mingetty.c 2008-01-30 00:14:25.000000000 +0200
+@@ -16,10 +16,15 @@
+ * - autologin only at first login
+ * - /etc/mingetty.conf that can be used instead of /etc/inittab for
+ * command line options
+- * - Can UTF-8 setup be done within mingetty?
++ * - Can UTF-8 setup be done within mingetty? Let's try now :-) (VinzC)
+ * - Also add /bin/login-type functionality in here?
+ */
+
++/* Additional comments: Vincent Cadet <vcadet@hotmail.com> (2006-11-21)
++ * - Attempt to make mingetty support UTF-8. Modifications were imported
++ * from Suse migetty.c 0.9.6s.
++ */
++
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+@@ -39,6 +44,19 @@
+ #include <syslog.h>
+ #include <sys/utsname.h>
+ #include <time.h>
++#include <locale.h>
++#include <iconv.h>
++#include <wctype.h>
++#include <sys/kd.h>
++#include <sys/ttydefaults.h>
++
++#ifndef IUTF8
++# ifndef ASM_IUTF8
++# error ASM_IUTF8 input flag not defined - Cannot define IUTF8
++# else
++# define IUTF8 ASM_IUTF8
++# endif
++#endif
+
+ /* name of this program (argv[0]) */
+ static char *progname;
+@@ -76,6 +94,8 @@
+ static char *autologin = NULL;
+ /* try to read a char before dropping to login prompt */
+ static int loginpause = 0;
++/* terminal mode */
++static int mode = K_RAW;
+
+ /* error() - output error messages */
+ static void error (const char *fmt, ...)
+@@ -189,10 +209,21 @@
+ if (fd > 2)
+ close (fd);
+
++ /* Detect mode of current keyboard setup, e.g. for UTF-8 */
++ if (ioctl(0, KDGKBMODE, &mode) < 0)
++ mode = K_RAW;
++
+ /* Write a reset string to the terminal. This is very linux-specific
+ and should be checked for other systems. */
+ if (noclear == 0)
+- write (0, "\033c", 2);
++ /* don't write a full reset (ESC c) because this leaves the
++ unicode mode again if the terminal was in unicode mode
++ and also undos the ESC sequences in CONSOLE_MAGIC which
++ are needed for some languages/console-fonts.
++ Just put the cursor to the home position (ESC [ H),
++ erase everything below the cursor (ESC [ J), and set the
++ scrolling region to the full window (ESC [ r) */
++ write (0, "\033[r\033[H\033[J", 9);
+
+ sigaction (SIGHUP, &sa_old, NULL);
+ }
+@@ -298,32 +329,75 @@
+
+ static char *get_logname (void)
+ {
+- static char logname[40];
++ static char logname[4*UT_NAMESIZE];
+ char *bp;
+ unsigned char c;
++ int ascii;
++ iconv_t ic;
+
+ tcflush (0, TCIFLUSH); /* flush pending input */
++
++ /* Check for UTF-8 mode */
++ switch(mode) {
++ case K_UNICODE:
++ ascii = 0;
++ setlocale(LC_CTYPE, "en_US.UTF-8");
++ break;
++ case K_RAW:
++ case K_MEDIUMRAW:
++ case K_XLATE:
++ default:
++ ascii = 1;
++ setlocale(LC_CTYPE, "POSIX");
++ break;
++ }
++
+ for (*logname = 0; *logname == 0;) {
+ do_prompt (1);
+ for (bp = logname;;) {
+ if (read (0, &c, 1) < 1) {
+- if (errno == EINTR || errno == EIO
+- || errno == ENOENT)
++ if (errno == EINTR || errno == EAGAIN) {
++ usleep(1000);
++ continue;
++ }
++ if (errno == EIO || errno == ENOENT)
+ exit (EXIT_SUCCESS);
+ error ("%s: read: %s", tty, strerror (errno));
+ }
+ if (c == '\n' || c == '\r') {
+ *bp = 0;
+ break;
+- } else if (!isprint (c))
+- error ("%s: invalid character 0x%x in login"
+- " name", tty, c);
++ }
++
++ if (ascii && !isprint (c))
++ error ("%s: invalid character 0x%x in login name", tty, c);
+ else if ((size_t)(bp - logname) >= sizeof (logname) - 1)
+ error ("%s: too long login name", tty);
+- else
+- *bp++ = c;
++
++ *bp++ = c;
+ }
+ }
++
++ if (!ascii && (ic = iconv_open("WCHAR_T", "UTF-8"))) {
++ char tmpbuf[4*sizeof(logname)], *op, *lp;
++ size_t len = bp - logname;
++ size_t out = sizeof(tmpbuf) - 1;
++ size_t wcl;
++ wint_t *wcp;
++
++ op = tmpbuf;
++ lp = logname;
++ if ((wcl = iconv(ic , &lp, &len, &op, &out)) == (size_t)-1)
++ error ("%s: invalid character conversion for login name", tty);
++ iconv_close(ic);
++
++ wcp = (wint_t*)tmpbuf;
++ wcp[wcl] = (wint_t)0;
++ while (*wcp) {
++ if (!iswprint(*wcp++))
++ error ("%s: invalid character for login name found", tty);
++ }
++ }
+ return logname;
+ }
+
diff --git a/net-dialup/mingetty/metadata.xml b/net-dialup/mingetty/metadata.xml
new file mode 100644
index 000000000000..05905d97b25c
--- /dev/null
+++ b/net-dialup/mingetty/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>base-system@gentoo.org</email>
+ <name>Gentoo Base System</name>
+ </maintainer>
+ <longdescription>The mingetty program is a lightweight, minimalist getty program for
+use only on virtual consoles. Mingetty is not suitable for serial
+lines (you should use the mgetty program in that case).</longdescription>
+ <upstream>
+ <remote-id type="sourceforge">mingetty</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/mingetty/mingetty-1.08-r3.ebuild b/net-dialup/mingetty/mingetty-1.08-r3.ebuild
new file mode 100644
index 000000000000..e8566ed0ac8f
--- /dev/null
+++ b/net-dialup/mingetty/mingetty-1.08-r3.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="A compact getty program for virtual consoles only"
+HOMEPAGE="https://sourceforge.net/projects/mingetty"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="unicode"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.08-check_chroot_chdir_nice.patch"
+)
+
+src_prepare() {
+ use unicode && eapply "${FILESDIR}"/${PN}-1.08-utf8.patch
+ default
+}
+
+src_compile() {
+ emake CFLAGS="${CFLAGS} -Wall -W -pipe -D_GNU_SOURCE" CC="$(tc-getCC)"
+}
+
+src_install() {
+ dodir /sbin /usr/share/man/man8
+ emake DESTDIR="${D}" install
+}
diff --git a/net-dialup/minicom/Manifest b/net-dialup/minicom/Manifest
new file mode 100644
index 000000000000..8a99f17ad430
--- /dev/null
+++ b/net-dialup/minicom/Manifest
@@ -0,0 +1 @@
+DIST minicom-2.11.1.tar.gz 1058823 BLAKE2B 20f3f118cea634cf3df5a3ad5513f32c3117d95e222027aac978f0b3d6be8fdc79b7602959129a2e36e05960800c8bce025423b69d609c9651c8bcbe4a70efb1 SHA512 a74ca75494051b5027a0b641f1fedcc8a341dc409e17f4f509fdb48d3958ed6e6a8482f4f0217671eaa3af6fd5e608f55759faf6f71fa89fddbb065ad99cf33d
diff --git a/net-dialup/minicom/files/minicom-2.8-gentoo-runscript.patch b/net-dialup/minicom/files/minicom-2.8-gentoo-runscript.patch
new file mode 100644
index 000000000000..97c53e91c8ef
--- /dev/null
+++ b/net-dialup/minicom/files/minicom-2.8-gentoo-runscript.patch
@@ -0,0 +1,42 @@
+--- a/man/minicom.1
++++ b/man/minicom.1
+@@ -469,7 +469,7 @@
+ .TP 0.5i
+ .B D - Script program
+ Which program to use as the script interpreter. Defaults to the
+-program "runscript", but if you want to use something else (eg,
++program "/usr/bin/runscript", but if you want to use something else (eg,
+ /bin/sh or "expect") it is possible. Stdin and stdout are connected
+ to the modem, stderr to the screen.
+ .RS 0.5i
+--- a/man/runscript.1
++++ b/man/runscript.1
+@@ -5,7 +5,7 @@
+ .\" for conditions under which this file may be redistributed.
+ .TH RUNSCRIPT 1 "$Date: 2007-10-07 18:13:51 $" "User's Manual"
+ .SH NAME
+-runscript \- script interpreter for minicom
++/usr/bin/runscript \- script interpreter for minicom
+ .SH SYNOPSIS
+ .B runscript
+ .RI "scriptname [logfile [homedir]]"
+--- a/src/rwconf.c
++++ b/src/rwconf.c
+@@ -105,7 +105,7 @@
+ { N_("No"), 0, "kermreal" },
+ { "3", 0, "colusage" },
+ /* The script program */
+- { "runscript", 0, "scriptprog" },
++ { "/usr/bin/runscript", 0, "scriptprog" },
+ /* Modem parameters */
+ { "", 0, "minit" },
+ { "", 0, "mreset" },
+@@ -245,7 +245,7 @@
+ int matched;
+
+ if (conftype == CONFIG_GLOBAL)
+- strcpy(P_SCRIPTPROG, "runscript");
++ strcpy(P_SCRIPTPROG, "/usr/bin/runscript");
+
+ line = malloc(line_size);
+ if (!line) {
diff --git a/net-dialup/minicom/files/minicom-2.9-update-gettext.patch b/net-dialup/minicom/files/minicom-2.9-update-gettext.patch
new file mode 100644
index 000000000000..4218d75e0e8c
--- /dev/null
+++ b/net-dialup/minicom/files/minicom-2.9-update-gettext.patch
@@ -0,0 +1,13 @@
+Use REQUIRE so eautopoint --force will upgrade gettext to 0.22 if available.
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -131,7 +131,7 @@ ALL_LINGUAS="cs da de es fr fi hu id ja ka ko nb pl pt_BR ro ru rw sr sv vi zh_C
+
+ dnl Checks for programs.
+ AM_GNU_GETTEXT([external])
+-AM_GNU_GETTEXT_VERSION([0.21])
++AM_GNU_GETTEXT_REQUIRE_VERSION([0.21])
+
+ dnl This is a hacky workaround as the m4 scripts for iconv seem to set
+ dnl LIBICONV to '-liconv' despite that this lib is not available if iconv
diff --git a/net-dialup/minicom/files/minirc.dfl b/net-dialup/minicom/files/minirc.dfl
new file mode 100644
index 000000000000..42e9d8fe4646
--- /dev/null
+++ b/net-dialup/minicom/files/minirc.dfl
@@ -0,0 +1 @@
+# Machine-generated file - use "minicom -s" to change parameters.
diff --git a/net-dialup/minicom/metadata.xml b/net-dialup/minicom/metadata.xml
new file mode 100644
index 000000000000..1a256986297b
--- /dev/null
+++ b/net-dialup/minicom/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>embedded@gentoo.org</email>
+ <name>Embedded Gentoo</name>
+ </maintainer>
+ <longdescription>
+ Minicom is a menu driven communications program.
+ It emulates ANSI and VT102 terminals and
+ has a dialing directory and auto zmodem download.
+ </longdescription>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:minicom_project:minicom</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/minicom/minicom-2.11.1.ebuild b/net-dialup/minicom/minicom-2.11.1.ebuild
new file mode 100644
index 000000000000..a5ceb2ce7540
--- /dev/null
+++ b/net-dialup/minicom/minicom-2.11.1.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Serial Communication Program"
+HOMEPAGE="https://salsa.debian.org/minicom-team/minicom"
+SRC_URI="https://salsa.debian.org/${PN}-team/${PN}/-/archive/${PV}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+IUSE="nls"
+
+DEPEND="sys-libs/ncurses:="
+
+RDEPEND="
+ ${DEPEND}
+ net-dialup/lrzsz
+"
+
+BDEPEND="
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.8-gentoo-runscript.patch
+ "${FILESDIR}"/${PN}-2.9-update-gettext.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ # Lockdir must exist if not manually specified.
+ # '/var/lock' is created by OpenRC.
+ local myeconfargs=(
+ # See bug #788142
+ --sysconfdir="${EPREFIX}"/etc/${PN}
+
+ --disable-rpath
+ --enable-lock-dir="/var/lock"
+ $(use_enable nls)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ default
+
+ # Needs to match --sysconfdir above
+ insinto /etc/minicom
+ doins "${FILESDIR}"/minirc.dfl
+}
diff --git a/net-dialup/minimodem/Manifest b/net-dialup/minimodem/Manifest
new file mode 100644
index 000000000000..6ae8aa9bf6bf
--- /dev/null
+++ b/net-dialup/minimodem/Manifest
@@ -0,0 +1 @@
+DIST minimodem-0.24.tar.gz 159508 BLAKE2B a08c2ef87ed6d50d5bae390d97a384591da9612e4b60b10fc373fa00bceb60a3f67389179c92303a9d3008184f141d37753043355fe9de04429e5e9f8c9b8167 SHA512 5c3a5e6f185d4b09c5f24d776393f2e2d5d787c097c44490905119513b9b39db53b7f2f7e624a4b527e8e8e827a5b99af6b0df5ca525046f60b49fe9ba2b0ceb
diff --git a/net-dialup/minimodem/metadata.xml b/net-dialup/minimodem/metadata.xml
new file mode 100644
index 000000000000..addcf8979163
--- /dev/null
+++ b/net-dialup/minimodem/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <name>Seth M. Price</name>
+ <email>sprice623@aol.com</email>
+ </maintainer>
+ <longdescription lang="en">
+ Minimodem is a command-line program which decodes (or generates)
+ audio modem tones at any specified baud rate, using various
+ framing protocols. It acts a general-purpose software FSK modem,
+ and includes support for various standard FSK protocols such as
+ Bell103, Bell202, RTTY, TTY/TDD, NOAA SAME, and Caller-ID.
+ </longdescription>
+ <use>
+ <flag name="sndio">Enable support for the <pkg>media-sound/sndio</pkg> backend</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://github.com/kamalmostafa/minimodem/issues</bugs-to>
+ <remote-id type="github">kamalmostafa/minimodem</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/minimodem/minimodem-0.24-r2.ebuild b/net-dialup/minimodem/minimodem-0.24-r2.ebuild
new file mode 100644
index 000000000000..89d8a78df73c
--- /dev/null
+++ b/net-dialup/minimodem/minimodem-0.24-r2.ebuild
@@ -0,0 +1,36 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="General-purpose software audio FSK modem"
+HOMEPAGE="http://www.whence.com/minimodem/"
+SRC_URI="http://www.whence.com/minimodem/minimodem-${PV}.tar.gz"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="alsa pulseaudio +sndfile sndio test"
+REQUIRED_USE+="|| ( alsa pulseaudio sndfile )
+ test? ( sndfile )"
+
+RESTRICT="!test? ( test )"
+
+DEPEND="sndfile? ( media-libs/libsndfile )
+ sci-libs/fftw:3.0
+ alsa? ( media-libs/alsa-lib )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio )"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ eautoreconf
+ eapply_user
+}
+
+src_configure() {
+ my_args="$(use_with alsa) $(use_with pulseaudio) $(use_with sndfile)"
+ econf $my_args
+}
diff --git a/net-dialup/minimodem/minimodem-9999-r1.ebuild b/net-dialup/minimodem/minimodem-9999-r1.ebuild
new file mode 100644
index 000000000000..f74684d95d1e
--- /dev/null
+++ b/net-dialup/minimodem/minimodem-9999-r1.ebuild
@@ -0,0 +1,35 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools git-r3
+
+DESCRIPTION="General-purpose software audio FSK modem"
+HOMEPAGE="http://www.whence.com/minimodem/"
+EGIT_REPO_URI="https://github.com/kamalmostafa/minimodem"
+
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="alsa pulseaudio +sndfile sndio test"
+REQUIRED_USE+="|| ( alsa pulseaudio sndfile sndio )
+ test ( sndfile )"
+
+RESTRICT="!test? ( test )"
+
+DEPEND="sndfile? ( media-libs/libsndfile )
+ sci-libs/fftw:3.0
+ alsa? ( media-libs/alsa-lib )
+ pulseaudio? ( media-libs/libpulse )
+ sndio? ( media-sound/sndio )"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ eautoreconf
+ eapply_user
+}
+
+src_configure() {
+ my_args="$(use_with alsa) $(use_with pulseaudio) $(use_with sndfile) $(use_with sndio)"
+ econf $my_args
+}
diff --git a/net-dialup/moserial/Manifest b/net-dialup/moserial/Manifest
new file mode 100644
index 000000000000..aa5d1c2f733c
--- /dev/null
+++ b/net-dialup/moserial/Manifest
@@ -0,0 +1 @@
+DIST moserial-3.0.21.tar.xz 1180072 BLAKE2B 57355c0cefd0dde234f184beb008250b677795a73398b10846f3a546bee61d9c6ef17cdd3964301c99155f14423cd0947d3c782dfd74885fcc36e0916f90aa7c SHA512 128e5854273a0bba56844b435d9fcefcaf59d9dc1e49a09d4df1dea21fce9de61c55a368cc707e3b685b4af7e88f93fffb350e7846c046f0c814f57b4f1f0ef6
diff --git a/net-dialup/moserial/metadata.xml b/net-dialup/moserial/metadata.xml
new file mode 100644
index 000000000000..ab760593d7f8
--- /dev/null
+++ b/net-dialup/moserial/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>gnome@gentoo.org</email>
+ <name>Gentoo GNOME Desktop</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="gnome-gitlab">GNOME/moserial</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/moserial/moserial-3.0.21.ebuild b/net-dialup/moserial/moserial-3.0.21.ebuild
new file mode 100644
index 000000000000..d6b13f292f1e
--- /dev/null
+++ b/net-dialup/moserial/moserial-3.0.21.ebuild
@@ -0,0 +1,24 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+inherit gnome2
+
+DESCRIPTION="A clean and friendly gtk-based serial terminal"
+HOMEPAGE="https://wiki.gnome.org/Apps/Moserial https://gitlab.gnome.org/GNOME/moserial"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="amd64 ~ppc x86"
+
+RDEPEND="
+ >=dev-libs/glib-2.16:2[dbus]
+ gnome-base/gsettings-desktop-schemas
+ >=x11-libs/gtk+-3.2.0:3
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ >=dev-util/intltool-0.35
+ dev-util/itstool
+ virtual/pkgconfig
+"
diff --git a/net-dialup/mwavem/Manifest b/net-dialup/mwavem/Manifest
new file mode 100644
index 000000000000..f983444372c5
--- /dev/null
+++ b/net-dialup/mwavem/Manifest
@@ -0,0 +1 @@
+DIST mwavem-2.0.tar.gz 1443167 BLAKE2B d70e3088b13a83f5dfd93690e67fa68497ef793b840fa3cba45efe4e72448abeba5312e0bbf1176825a62c366d47829ebd135461bf9600ba1b971b1db00a55e7 SHA512 e1bb3c7e5511abc784b0359b844498389a9cb970fe46752775aaae6146d8cf25998a6e12dfc70df5c5f4287fd57abb49252f81a00528db5f7c2c96e3e7efb516
diff --git a/net-dialup/mwavem/files/mwave-dev-handler b/net-dialup/mwavem/files/mwave-dev-handler
new file mode 100644
index 000000000000..3ba51ff75db2
--- /dev/null
+++ b/net-dialup/mwavem/files/mwave-dev-handler
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+case "$1" in
+register)
+ [ ! -d /dev/modem ] && mkdir --mode=0755 /dev/modems
+ [ ! -h /dev/modems/mwave ] && ln -s /dev/misc/mwave /dev/modems/mwave
+ ;;
+unregister)
+ rm -rf /dev/modems/mwave
+ ;;
+esac
diff --git a/net-dialup/mwavem/files/mwave.devfs b/net-dialup/mwavem/files/mwave.devfs
new file mode 100644
index 000000000000..67ba1e527ab9
--- /dev/null
+++ b/net-dialup/mwavem/files/mwave.devfs
@@ -0,0 +1,2 @@
+REGISTER ^misc/mwave$ EXECUTE /usr/sbin/mwave-dev-handler register
+UNREGISTER ^misc/mwave$ EXECUTE /usr/sbin/mwave-dev-handler unregister
diff --git a/net-dialup/mwavem/files/mwave.modules b/net-dialup/mwavem/files/mwave.modules
new file mode 100644
index 000000000000..613eef5c77a1
--- /dev/null
+++ b/net-dialup/mwavem/files/mwave.modules
@@ -0,0 +1 @@
+alias char-major-10-219 mwave
diff --git a/net-dialup/mwavem/files/mwavem-2.0-C23.patch b/net-dialup/mwavem/files/mwavem-2.0-C23.patch
new file mode 100644
index 000000000000..d9c269b45d12
--- /dev/null
+++ b/net-dialup/mwavem/files/mwavem-2.0-C23.patch
@@ -0,0 +1,128 @@
+Just use system definitions and don't shortcut externs,
+wherever possible.
+There's a default way to use va_args, don't reinvent wheel
+https://bugs.gentoo.org/715926
+https://bugs.gentoo.org/921186
+https://bugs.gentoo.org/945184
+--- a/configure.in
++++ b/configure.in
+@@ -5,6 +5,7 @@
+
+ dnl Find operating system, vendor, architecture
+ AC_CANONICAL_SYSTEM
++AC_USE_SYSTEM_EXTENSIONS
+
+ AM_INIT_AUTOMAKE(mwavem,2.0)
+
+--- a/src/meio/meiovect.c
++++ b/src/meio/meiovect.c
+@@ -65,14 +65,14 @@
+ /* external function declarations */
+ /*------------------------------------------------------------------------*/
+
+-extern ULONG APIENTRY dspMeioOpeni();
+-extern ULONG dspMeioClosei();
+-extern ULONG APIENTRY dspMeioQueryi();
+-extern ULONG APIENTRY dspMeioConnecti();
+-extern ULONG APIENTRY dspMeioDisconnecti();
+-extern ULONG APIENTRY dspMeioUpdateConnectioni();
+-extern ULONG APIENTRY dspMeioQueryConnectioni();
+-extern ULONG APIENTRY dspMeioResynci();
++extern ULONG APIENTRY dspMeioOpeni(HDSP hDsp, HMEIO FAR *phMeio, ULONG Options);
++extern ULONG dspMeioClosei(HMEIO hMeio, ULONG Options);
++extern ULONG APIENTRY dspMeioQueryi(HMEIO MMeio, MEIO_QUERYTYPE Request, ULONG FAR *fpBufferSize, VOID FAR *fpBuffer);
++extern ULONG APIENTRY dspMeioConnecti(HMEIO hMeio, HCONNECTION FAR *fpConnection, ULONG OwnerPort, ULONG UserPort, ULONG SharingOptions, ULONG ulState, ULONG Reserved);
++extern ULONG APIENTRY dspMeioDisconnecti(HCONNECTION hConnection, ULONG ulReserved);
++extern ULONG APIENTRY dspMeioUpdateConnectioni(HCONNECTION hConnection, MEIO_CONNECTATTRIBUTE Attribute, LONG lValue);
++extern ULONG APIENTRY dspMeioQueryConnectioni(HCONNECTION hConnection, MEIO_CONNECTATTRIBUTE Attribute, LONG FAR *fpValue);
++extern ULONG APIENTRY dspMeioResynci(MEIO_OBJ_TYPE ObjectType, ULONG Object, ULONG ulOptions);
+
+ /*------------------------------------------------------------------------*/
+ /* MeioAPIDispatch() */
+--- a/src/mwmlw32/mwmload.c
++++ b/src/mwmlw32/mwmload.c
+@@ -53,6 +53,7 @@
+ #include <sys/timeb.h>
+ #include <time.h>
+ #include <mwqservr.h>
++#include <stdarg.h>
+ #include "mww32.h"
+ /*#include <pbmplus.h>*/
+ #include <mwave.h>
+@@ -74,6 +75,8 @@
+ #define MODNAME "MWMODEM"
+ void mwavem_dprintf(char *szFormat, ...)
+ {
++ va_list args;
++ va_start(args, szFormat);
+ /*if (usDebugWindow)
+ {*/
+ struct timeb timebuffer;
+@@ -91,11 +94,12 @@
+ else
+ strcpy(ach, MODNAME ": ");
+
+- vsprintf(ach+strlen(ach),szFormat,(char *)(&szFormat+1));
++ vsprintf(ach+strlen(ach),szFormat, args);
+ strcat(ach, "\r\n");
+
+ OutputDebugString(ach);
+ /* } */
++ va_end(args);
+ }
+
+
+--- a/src/mwmlw32/mwmrsp.c
++++ b/src/mwmlw32/mwmrsp.c
+@@ -44,9 +44,9 @@
+ * First release to the public
+ *
+ */
++#include <unistd.h>
+ #include <mwmspcfc.h>
+ static char szThisFile[] = "MWMRSP.C";
+-extern void swab();
+
+ ULONG mwmrspEchoFAXResponse(PMWM_DSPINFO pmwmDspInfo,USHORT usControlStat)
+ {
+--- a/src/mwmpw32/mwmclss2.c
++++ b/src/mwmpw32/mwmclss2.c
+@@ -1227,8 +1227,6 @@
+
+
+
+-extern void swab() __THROW;
+-
+ USHORT mwmClss2FLIDCommand(STATEINFO *psi)
+ {
+ USHORT usParserStatus = 0;
+--- a/src/mwmpw32/mwmparse.c
++++ b/src/mwmpw32/mwmparse.c
+@@ -54,6 +54,7 @@
+ #include <stddef.h>
+ #include <sys/timeb.h>
+ #include <time.h>
++#include <unistd.h>
+
+ #include <port_types.h>
+ #include <port_functions.h>
+@@ -324,8 +325,6 @@
+ return 0;
+ }
+
+-extern void swab() __THROW;
+-
+ USHORT mwmParseEchoString(STATEINFO *psi,PSZ achString)
+ {
+ USHORT usParserStatus = 0;
+--- a/src/mwmutil/mwmutil.c
++++ b/src/mwmutil/mwmutil.c
+@@ -189,8 +189,6 @@
+
+ } /*readFile*/
+
+-extern char *strcasestr () __THROW __attribute_pure__;
+-
+ /* Give a file buffer, find a return ptr to section name (or NULL if not found) */
+ char * getSection(LPCTSTR lpSectionName,char *file) { // Section name, bracket delimited
+ char *line;
diff --git a/net-dialup/mwavem/files/mwavem-2.0-ar.patch b/net-dialup/mwavem/files/mwavem-2.0-ar.patch
new file mode 100644
index 000000000000..b0ce341ae6fe
--- /dev/null
+++ b/net-dialup/mwavem/files/mwavem-2.0-ar.patch
@@ -0,0 +1,10 @@
+--- a/configure.in
++++ b/configure.in
+@@ -12,6 +12,7 @@ dnl Find programs for building and installation.
+ AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_PROG_INSTALL
++AM_PROG_AR
+
+ dnl Check for libraries
+ AC_CHECK_LIB(pthread, main)
diff --git a/net-dialup/mwavem/files/mwavem-2.0-fno-common.patch b/net-dialup/mwavem/files/mwavem-2.0-fno-common.patch
new file mode 100644
index 000000000000..02e5b4780fd2
--- /dev/null
+++ b/net-dialup/mwavem/files/mwavem-2.0-fno-common.patch
@@ -0,0 +1,22 @@
+--- a/src/include/unidiags.h
++++ b/src/include/unidiags.h
+@@ -65,7 +65,7 @@ bits Source bits Definition
+
+ #define BIT(x) (1<<x)
+
+-UINT shit;
++extern UINT shit;
+
+ typedef struct _V34INFO { /* for key 18 */
+ UINT INFOa_bits4049 :10;
+--- a/src/manager/dspsrv.c
++++ b/src/manager/dspsrv.c
+@@ -75,7 +75,7 @@ HANDLE hMwThread;
+ DWORD MwThreadId;
+ /* @TBD CRITICAL_SECTION MwTerminateSection; */
+ BOOL MwTerminate = FALSE;
+-HANDLE hDrv;
++extern HANDLE hDrv;
+ HANDLE hMwProcess;
+
+ BOOL AllocateHeaps( void );
diff --git a/net-dialup/mwavem/files/mwavem-2.0-gentoo.patch b/net-dialup/mwavem/files/mwavem-2.0-gentoo.patch
new file mode 100644
index 000000000000..ca86b5039444
--- /dev/null
+++ b/net-dialup/mwavem/files/mwavem-2.0-gentoo.patch
@@ -0,0 +1,24 @@
+diff -ur mwavem-2.0.orig/configure.in mwavem-2.0/configure.in
+--- mwavem-2.0.orig/configure.in 2004-04-06 23:50:57.000000000 +0000
++++ mwavem-2.0/configure.in 2008-10-18 09:31:29.000000000 +0000
+@@ -27,7 +27,7 @@
+ AC_DEFINE(MWWTDBG)
+
+ INCLUDES="-I\$(top_srcdir)/src/include"
+-CFLAGS="$INCLUDES -O2 -fno-strict-aliasing -fomit-frame-pointer -Wall"
++CFLAGS="${CFLAGS} $INCLUDES -fno-strict-aliasing -Wall"
+
+ dnl Set dsp_dir here and we substitute it in mwavem.conf from mwavem.conf.in
+ dsp_dir=` test "x$exec_prefix" = xNONE && exec_prefix=$ac_default_prefix
+diff -ur mwavem-2.0.orig/src/mwavem/Makefile.am mwavem-2.0/src/mwavem/Makefile.am
+--- mwavem-2.0.orig/src/mwavem/Makefile.am 2008-10-18 09:38:52.000000000 +0000
++++ mwavem-2.0/src/mwavem/Makefile.am 2008-10-18 09:38:00.000000000 +0000
+@@ -10,6 +10,8 @@
+ -rm $(distdir)/modem.c
+
+ install-exec-local:
++
++install-exec-local-invalid:
+ if [ ! -c "/dev/modems/mwave" ]; then \
+ mkdir -p /dev/modems; \
+ mknod --mode=660 /dev/modems/mwave c 10 219; \
diff --git a/net-dialup/mwavem/files/mwavem-2.0-glibc-2.10.patch b/net-dialup/mwavem/files/mwavem-2.0-glibc-2.10.patch
new file mode 100644
index 000000000000..fa867986ec22
--- /dev/null
+++ b/net-dialup/mwavem/files/mwavem-2.0-glibc-2.10.patch
@@ -0,0 +1,40 @@
+diff -ur mwavem-2.0.orig/src/include/mwmparsi.h mwavem-2.0/src/include/mwmparsi.h
+--- mwavem-2.0.orig/src/include/mwmparsi.h 2001-05-04 22:28:52.000000000 +0300
++++ mwavem-2.0/src/include/mwmparsi.h 2009-08-08 11:58:51.000000000 +0300
+@@ -516,8 +516,8 @@
+
+
+ #ifdef DEBUG
+- void dprintf(char *szFormat, ...);
+- #define DPF dprintf
++ void mwavem_dprintf(char *szFormat, ...);
++ #define DPF mwavem_dprintf
+
+ #else
+ #define DPF ((void)0)
+diff -ur mwavem-2.0.orig/src/include/mwmspcfc.h mwavem-2.0/src/include/mwmspcfc.h
+--- mwavem-2.0.orig/src/include/mwmspcfc.h 2001-05-04 22:28:52.000000000 +0300
++++ mwavem-2.0/src/include/mwmspcfc.h 2009-08-08 11:56:34.000000000 +0300
+@@ -705,8 +705,8 @@
+ void MWM_ENTRY mwmPostMessage(UINT uMsg, LONG wParam, LONG lParam); // @TBD
+
+ #ifdef DEBUG
+- void dprintf(char *szFormat, ...);
+- #define DPF dprintf
++ void mwavem_dprintf(char *szFormat, ...);
++ #define DPF mwavem_dprintf
+ #else
+ #define DPF ((void)0)
+ #endif
+diff -ur mwavem-2.0.orig/src/mwmlw32/mwmload.c mwavem-2.0/src/mwmlw32/mwmload.c
+--- mwavem-2.0.orig/src/mwmlw32/mwmload.c 2004-03-31 06:58:55.000000000 +0300
++++ mwavem-2.0/src/mwmlw32/mwmload.c 2009-08-08 11:56:50.000000000 +0300
+@@ -72,7 +72,7 @@
+
+
+ #define MODNAME "MWMODEM"
+-void dprintf(char *szFormat, ...)
++void mwavem_dprintf(char *szFormat, ...)
+ {
+ /*if (usDebugWindow)
+ {*/
diff --git a/net-dialup/mwavem/files/mwavem-2.0-pthread.patch b/net-dialup/mwavem/files/mwavem-2.0-pthread.patch
new file mode 100644
index 000000000000..27713035b000
--- /dev/null
+++ b/net-dialup/mwavem/files/mwavem-2.0-pthread.patch
@@ -0,0 +1,14 @@
+Use correct type for thread handle. It already uses pthread_t for other half of the
+assignment
+https://bugs.gentoo.org/897844
+--- a/src/manager/mwaveapi.c
++++ b/src/manager/mwaveapi.c
+@@ -79,7 +79,7 @@
+ BOOL g_bIPCSupportActive = FALSE; // True if our IPC support layer is initialized and active
+ unsigned g_uIPCsInUse; // One bit per IPC in use for this subsystem
+ BOOL g_abCancellingIPCs[MWAPI_MaxIPCs]; // TRUE if we're attempting to cancel an IPC thread
+-HANDLE g_ahIPCThreads[MWAPI_MaxIPCs]; // Thread handle of IPC thread
++pthread_t g_ahIPCThreads[MWAPI_MaxIPCs]; // Thread handle of IPC thread
+ PFN g_pfnIPCNotice[MWAPI_MaxIPCs];
+
+ BOOL bDspDisabled = FALSE;
diff --git a/net-dialup/mwavem/metadata.xml b/net-dialup/mwavem/metadata.xml
new file mode 100644
index 000000000000..85e4ed814fa2
--- /dev/null
+++ b/net-dialup/mwavem/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/mwavem/mwavem-2.0-r3.ebuild b/net-dialup/mwavem/mwavem-2.0-r3.ebuild
new file mode 100644
index 000000000000..70fbbadded21
--- /dev/null
+++ b/net-dialup/mwavem/mwavem-2.0-r3.ebuild
@@ -0,0 +1,57 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="User level application for IBM Mwave modem"
+HOMEPAGE="http://oss.software.ibm.com/acpmodem/"
+SRC_URI="ftp://www-126.ibm.com/pub/acpmodem/${PV}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 x86"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-gentoo.patch
+ "${FILESDIR}"/${P}-glibc-2.10.patch
+ "${FILESDIR}"/${P}-fno-common.patch
+ "${FILESDIR}"/${P}-ar.patch
+ "${FILESDIR}"/${P}-C23.patch
+ "${FILESDIR}"/${P}-pthread.patch
+)
+
+HTML_DOCS=( doc/mwave.html )
+DOCS=( doc/mwave.sgml doc/mwave.txt )
+
+src_prepare() {
+ default
+ rm README.freebsd || die
+
+ AT_M4DIR=m4 eautoreconf
+}
+
+src_install() {
+ default
+
+ dosbin "${FILESDIR}"/mwave-dev-handler
+
+ insinto /etc/devfs.d
+ newins "${FILESDIR}"/mwave.devfs mwave
+
+ insinto /etc/modprobe.d
+ newins "${FILESDIR}"/mwave.modules mwave.conf
+}
+
+pkg_postinst() {
+ if [[ -e "${EROOT}"/dev/.devfsd ]]; then
+ # device node is created by devfs
+ ebegin "Restarting devfsd to reread devfs rules"
+ killall -HUP devfsd
+ eend $?
+ else
+ elog "Create device node if needed, using command like this:"
+ elog "# mknod --mode=0660 \"${EROOT}/dev/modems/mwave\" c 10 219"
+ fi
+}
diff --git a/net-dialup/neocon/Manifest b/net-dialup/neocon/Manifest
new file mode 100644
index 000000000000..84610011d122
--- /dev/null
+++ b/net-dialup/neocon/Manifest
@@ -0,0 +1 @@
+DIST neocon-20110228.tar.bz2 3800 BLAKE2B 4c179d4018fc682ad9b9e9ad57c1ba7519aa3257bb514a58ebac55b512b58f75b2411007dce2167dbc3290436f2ec364e5e3760767a8a26f0dbb9c30198fd0a9 SHA512 184bc268416453e15f11f27e8627d75159b308bc2b5d5a706e6f6e1130aee4673677b88284c59b836960a620915f0cdac5d7554fd2bddb25b4a34bd37ca25fd2
diff --git a/net-dialup/neocon/metadata.xml b/net-dialup/neocon/metadata.xml
new file mode 100644
index 000000000000..85e4ed814fa2
--- /dev/null
+++ b/net-dialup/neocon/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/neocon/neocon-20110228-r1.ebuild b/net-dialup/neocon/neocon-20110228-r1.ebuild
new file mode 100644
index 000000000000..ec6d7b297e16
--- /dev/null
+++ b/net-dialup/neocon/neocon-20110228-r1.ebuild
@@ -0,0 +1,23 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Simple serial console utility that tries to open ttys repeatedly"
+HOMEPAGE="https://wiki.openmoko.org/wiki/NeoCon"
+SRC_URI="https://dev.gentoo.org/~radhermit/distfiles/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+src_compile() {
+ emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" all
+}
+
+src_install() {
+ dobin neocon
+ dodoc README
+}
diff --git a/net-dialup/picocom/Manifest b/net-dialup/picocom/Manifest
new file mode 100644
index 000000000000..0a84e126d195
--- /dev/null
+++ b/net-dialup/picocom/Manifest
@@ -0,0 +1,3 @@
+DIST picocom-2024-07.tar.bz2 73290 BLAKE2B 4cac3cd77057daac2af820a3a1966edfa426e5132d48284325e59a02123674124156df79985cd89014247afd05bed9639fe210da0068afb1a7183baf10bb99e0 SHA512 b8663c6d361ac57a65198967cd34d2e8a6a95d7345f8412664aee517bfb772911bcd08b81ecd789ef538f95f0251c4846f29c6873e3fd44a1d52d604f1f81738
+DIST picocom-2024.07.1.bz2 8885 BLAKE2B fb003fe45072c8f49e486c0078cdc0e25606b8a2c7acc6dad3764db243aa69ac0c404e221d5ff96274829e554be63802e1a2937c6ea83c31e6582ccd29d70047 SHA512 937d780c70ea77563731f1995b1e1aa55f3ffe01124f0174c47161f9e6ac1c0b7104948812f92cf538e0f8543c16bd54d105c12a99b916e0ffe840bad61fbd21
+DIST picocom-3.1.tar.gz 121686 BLAKE2B e7f478e7d00e791fb2ea7248ff31e480d05c5c1fe35941f85689a5df19646175e3c698222e430786874c0508c44a0c1f8ecc4b69c889a40e7411c7b54c67249a SHA512 ff1888494ae0e24a151e19ac3abcdbb499e42eb1abcea401a7c6c3b532be3d64ddd81a511641d1ce0119dc5da3d2804ce8eaff262a9d578bfe8e22fdf6e55ad1
diff --git a/net-dialup/picocom/metadata.xml b/net-dialup/picocom/metadata.xml
new file mode 100644
index 000000000000..6601bbd8829e
--- /dev/null
+++ b/net-dialup/picocom/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>embedded@gentoo.org</email>
+ <name>Embedded Gentoo</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">npat-efault/picocom</remote-id>
+ <remote-id type="gitlab">wsakernel/picocom</remote-id>
+ <remote-id type="cpe">cpe:/a:picocom_project:picocom</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/picocom/picocom-2024.07-r1.ebuild b/net-dialup/picocom/picocom-2024.07-r1.ebuild
new file mode 100644
index 000000000000..f92e85453fd1
--- /dev/null
+++ b/net-dialup/picocom/picocom-2024.07-r1.ebuild
@@ -0,0 +1,43 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit bash-completion-r1 toolchain-funcs
+
+MY_PV=${PV/./-}
+
+DESCRIPTION="minimal dumb-terminal emulation program"
+HOMEPAGE="https://gitlab.com/wsakernel/picocom"
+SRC_URI="
+ https://gitlab.com/wsakernel/${PN}/-/archive/${MY_PV}/${PN}-${MY_PV}.tar.bz2
+ !man? ( https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${P}.1.bz2 )
+"
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 arm64 ~loong ~ppc ppc64 ~riscv ~sparc"
+IUSE="+man"
+
+BDEPEND="man? ( dev-go/go-md2man )"
+
+src_prepare() {
+ default
+
+ use man || cp "${WORKDIR}"/${P}.1 picocom.1
+}
+
+src_compile() {
+ emake CFLAGS="${CFLAGS} -Wall" CC="$(tc-getCC)"
+
+ use man && emake doc
+}
+
+src_install() {
+ dobin picocom pc{asc,xm,ym,zm}
+ dodoc CONTRIBUTORS CONTRIBUTORS.old README.md
+ dobashcomp bash_completion/picocom
+
+ doman picocom.1
+}
diff --git a/net-dialup/picocom/picocom-3.1.ebuild b/net-dialup/picocom/picocom-3.1.ebuild
new file mode 100644
index 000000000000..5922c41d5469
--- /dev/null
+++ b/net-dialup/picocom/picocom-3.1.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="minimal dumb-terminal emulation program"
+HOMEPAGE="https://github.com/npat-efault/picocom"
+SRC_URI="https://github.com/npat-efault/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv ~sparc x86"
+IUSE=""
+
+src_compile() {
+ # CPPFLAGS is shared between CFLAGS and CXXFLAGS, but there is no
+ # C++ file, and the pre-processor is never called directly, this
+ # is easier than patching it out.
+ emake LDFLAGS="${LDFLAGS}" CFLAGS="${CFLAGS} ${CPPFLAGS} -Wall" \
+ CC="$(tc-getCC)"
+}
+
+src_install() {
+ dobin picocom pc{asc,xm,ym,zm}
+ doman picocom.1
+ dodoc CHANGES.old CONTRIBUTORS README.md
+}
diff --git a/net-dialup/ppp-scripts/Manifest b/net-dialup/ppp-scripts/Manifest
new file mode 100644
index 000000000000..f32ab3036cc2
--- /dev/null
+++ b/net-dialup/ppp-scripts/Manifest
@@ -0,0 +1 @@
+DIST ppp-scripts-0.tar.xz 1824 BLAKE2B dc2fe1fa860ec9abe43466a270324f8ac39f08a8ed35f2dbd971a59a2e07a939049624802ae8b8c5a4bf11544c871d27517976f61486c4cdbad75f162a502c59 SHA512 a36e6180b0acc8081b192602a2a5dbe765f1ba26e2cca8dc80d1dbc0e405b86acd6fe0cf655fb520c9f45373528773e64545876fd3370ce3514ffd9858916971
diff --git a/net-dialup/ppp-scripts/metadata.xml b/net-dialup/ppp-scripts/metadata.xml
new file mode 100644
index 000000000000..85e4ed814fa2
--- /dev/null
+++ b/net-dialup/ppp-scripts/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/ppp-scripts/ppp-scripts-0.ebuild b/net-dialup/ppp-scripts/ppp-scripts-0.ebuild
new file mode 100644
index 000000000000..e33ad92443eb
--- /dev/null
+++ b/net-dialup/ppp-scripts/ppp-scripts-0.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="Common set of scripts for various PPP implementations"
+HOMEPAGE="https://wiki.gentoo.org/wiki/No_homepage"
+SRC_URI="https://dev.gentoo.org/~pinkbyte/distfiles/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+
+DEPEND="!<net-dialup/ppp-2.4.7-r1"
+RDEPEND="${DEPEND}"
+
+S="${WORKDIR}"
+
+src_install() {
+ exeinto /etc/ppp
+ for i in ip-up ip-down ; do
+ doexe "scripts/${i}"
+ dosym ${i} /etc/ppp/${i/ip/ipv6}
+ insinto /etc/ppp/${i}.d
+ doins "scripts/${i}.d"/*
+ done
+}
diff --git a/net-dialup/ppp/Manifest b/net-dialup/ppp/Manifest
new file mode 100644
index 000000000000..69f84f609ba2
--- /dev/null
+++ b/net-dialup/ppp/Manifest
@@ -0,0 +1,2 @@
+DIST ppp-2.5.2.tar.gz 973132 BLAKE2B 5a79bfaf23c2f1cba7b2c4e8f27e6033aa7ee6e119b4d96dfd2870f91524052fe9ed16149e5f76cf93370159f491af828b4103eb04bd4f5dbbecca4a08af9d0d SHA512 2c49d411818632a750f52b187c0ee421e9fcc1530c717abacce61e76aa8b296ce09fb142bc202696c0e0ac5570dd12ee649267921b756b6572ae514ce961d1e6
+DIST ppp-2.5.3.tar.gz 995939 BLAKE2B fe915978f1332c18dc370b5d79d07c55afd006d576168c16034ac368afe138d3e0a41d7a9a05fdc2868b1e30bbd0510aadbf7e9a595c77cacaeb739c9289051c SHA512 4de2af44d56d8629db37a7aa71ea1973020bacd4fe6b8e56b69b4b825445437cf9d5e2caee13e0af09d26b89954a8e08560581f3c5611edb119ea63fc10d2255
diff --git a/net-dialup/ppp/files/README.mpls b/net-dialup/ppp/files/README.mpls
new file mode 100644
index 000000000000..1ae7ae46057a
--- /dev/null
+++ b/net-dialup/ppp/files/README.mpls
@@ -0,0 +1,15 @@
+MPLS consists of 3 components:
+1. MPLS forwarding
+2. MPLS signalling
+3. Mapping layer 3 traffic onto MPLS LSPs
+
+The document mpls-forwarding basics explains item 1.
+
+Examples of MPLS signalling protocols are: RSVP-TE LDP and CR-LDP.
+The package ldp-portable is an implementation of LDP and contains more
+information about LDP based MPLS signalling.
+
+Mapping of layer 3 traffic to MPLS LSPs is accomplised in a couple of
+different ways.
+-Per FEC where FEC is an entry in the routing table
+-Virtual interface that represents an LSP
diff --git a/net-dialup/ppp/files/modules.ppp b/net-dialup/ppp/files/modules.ppp
new file mode 100644
index 000000000000..e936041c6bb3
--- /dev/null
+++ b/net-dialup/ppp/files/modules.ppp
@@ -0,0 +1,10 @@
+alias char-major-108 ppp_generic
+alias /dev/ppp ppp_generic
+alias tty-ldisc-3 ppp_async
+alias tty-ldisc-13 n_hdlc
+alias tty-ldisc-14 ppp_synctty
+alias ppp-compress-18 ppp_mppe
+alias ppp-compress-21 bsd_comp
+alias ppp-compress-24 ppp_deflate
+alias ppp-compress-26 ppp_deflate
+alias net-pf-24 pppoe
diff --git a/net-dialup/ppp/files/pppd.tmpfiles b/net-dialup/ppp/files/pppd.tmpfiles
new file mode 100644
index 000000000000..81b402e77055
--- /dev/null
+++ b/net-dialup/ppp/files/pppd.tmpfiles
@@ -0,0 +1,2 @@
+d /run/pppd
+L /run/pppd/lock - - - - ../lock
diff --git a/net-dialup/ppp/files/pppd.tmpfiles-r1 b/net-dialup/ppp/files/pppd.tmpfiles-r1
new file mode 100644
index 000000000000..2fa3096da9f3
--- /dev/null
+++ b/net-dialup/ppp/files/pppd.tmpfiles-r1
@@ -0,0 +1 @@
+d /run/pppd
diff --git a/net-dialup/ppp/metadata.xml b/net-dialup/ppp/metadata.xml
new file mode 100644
index 000000000000..9bbe2339b091
--- /dev/null
+++ b/net-dialup/ppp/metadata.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>dev@liguros.net</email>
+ <name>Development</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>base-system@gentoo.org</email>
+ <name>Gentoo Base System</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:samba:ppp</remote-id>
+ </upstream>
+ <use>
+ <flag name="activefilter">Enables active filter support</flag>
+ <flag name="dhcp">Installs PPP DHCP client plugin for IP address allocation
+ by a DHCP server (see http://www.netservers.co.uk/gpl/)</flag>
+ <flag name="eap-tls">Enables support for Extensible Authentication
+ Protocol and Transport Level Security (see
+ http://www.nikhef.nl/~janjust/ppp/index.html)</flag>
+ <flag name="gtk">Installs GTK+ password prompting program that can be used
+ by passprompt.so PPP plugin for reading the password from a X11 input
+ terminal</flag>
+ <flag name="radius">Enables RADIUS support</flag>
+ </use>
+ <origin>ports</origin>
+</pkgmetadata> \ No newline at end of file
diff --git a/net-dialup/ppp/ppp-2.5.2.ebuild b/net-dialup/ppp/ppp-2.5.2.ebuild
new file mode 100644
index 000000000000..e268033ccf88
--- /dev/null
+++ b/net-dialup/ppp/ppp-2.5.2.ebuild
@@ -0,0 +1,116 @@
+# Copyright 2024-2025 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit flag-o-matic linux-info pam tmpfiles
+
+DESCRIPTION="Point-to-Point Protocol (PPP)"
+HOMEPAGE="https://ppp.samba.org/"
+SRC_URI="https://download.samba.org/pub/ppp/${P}.tar.gz"
+
+LICENSE="BSD GPL-2"
+SLOT="0/${PV}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="activefilter atm pam selinux systemd"
+
+DEPEND="
+ dev-libs/openssl:0=
+
+ virtual/libcrypt:=
+ activefilter? ( net-libs/libpcap )
+ atm? ( net-dialup/linux-atm )
+ pam? ( sys-libs/pam )
+ systemd? ( sys-apps/systemd )
+"
+RDEPEND="
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-ppp )
+"
+BDEPEND="virtual/pkgconfig"
+PDEPEND="net-dialup/ppp-scripts"
+
+pkg_setup() {
+ local CONFIG_CHECK="~PPP ~PPP_ASYNC ~PPP_SYNC_TTY"
+ local ERROR_PPP="CONFIG_PPP:\t missing PPP support (REQUIRED)"
+ local ERROR_PPP_ASYNC="CONFIG_PPP_ASYNC:\t missing asynchronous serial line discipline"
+ ERROR_PPP_ASYNC+=" (optional, but highly recommended)"
+ local WARNING_PPP_SYNC_TTY="CONFIG_PPP_SYNC_TTY:\t missing synchronous serial line discipline"
+ WARNING_PPP_SYNC_TTY+=" (optional; used by 'sync' pppd option)"
+ if use activefilter ; then
+ CONFIG_CHECK+=" ~PPP_FILTER"
+ local ERROR_PPP_FILTER="CONFIG_PPP_FILTER:\t missing PPP filtering support (REQUIRED)"
+ fi
+ CONFIG_CHECK+=" ~PPP_DEFLATE ~PPP_BSDCOMP ~PPP_MPPE"
+ local ERROR_PPP_DEFLATE="CONFIG_PPP_DEFLATE:\t missing Deflate compression (optional, but highly recommended)"
+ local ERROR_PPP_BSDCOMP="CONFIG_PPP_BSDCOMP:\t missing BSD-Compress compression (optional, but highly recommended)"
+ local WARNING_PPP_MPPE="CONFIG_PPP_MPPE:\t missing MPPE encryption (optional, mostly used by PPTP links)"
+ CONFIG_CHECK+=" ~PPPOE ~PACKET"
+ local WARNING_PPPOE="CONFIG_PPPOE:\t missing PPPoE support (optional, needed by pppoe plugin)"
+ local WARNING_PACKET="CONFIG_PACKET:\t missing AF_PACKET support (optional, used by pppoe plugin)"
+ if use atm ; then
+ CONFIG_CHECK+=" ~PPPOATM"
+ local WARNING_PPPOATM="CONFIG_PPPOATM:\t missing PPPoA support (optional, needed by pppoatm plugin)"
+ fi
+
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # Set the right paths in radiusclient.conf
+ sed -e "s:/usr/local/etc:/etc:" \
+ -e "s:/usr/local/sbin:/usr/sbin:" \
+ -i pppd/plugins/radius/etc/radiusclient.conf || die
+ # Set config dir to /etc/ppp/radius
+ sed -i -e "s:/etc/radiusclient:/etc/ppp/radius:g" \
+ pppd/plugins/radius/{*.8,*.c,*.h} \
+ pppd/plugins/radius/etc/* || die
+}
+
+src_configure() {
+ # bug #944065
+ append-cflags -std=gnu17
+
+ local args=(
+ --localstatedir="${EPREFIX}"/var
+ --runstatedir="${EPREFIX}"/run
+ $(use_enable systemd)
+ $(use_with atm)
+ $(use_with pam)
+ $(use_with activefilter pcap)
+ --enable-cbcp
+ --enable-multilink
+ )
+ econf "${args[@]}"
+}
+
+src_install() {
+ default
+
+ find "${ED}" -name '*.la' -type f -delete || die
+
+ if use pam; then
+ pamd_mimic_system ppp auth account session
+ fi
+
+ insinto /etc/modprobe.d
+ newins "${FILESDIR}/modules.ppp" ppp.conf
+
+ dosbin scripts/p{on,off,log}
+ doman scripts/pon.1
+ dosym pon.1 /usr/share/man/man1/poff.1
+ dosym pon.1 /usr/share/man/man1/plog.1
+
+ # Adding misc. specialized scripts to doc dir
+ dodoc -r scripts
+
+ newtmpfiles "${FILESDIR}/pppd.tmpfiles-r1" pppd.conf
+
+ insinto /etc/ppp/radius
+ doins pppd/plugins/radius/etc/{dictionary*,issue,port-id-map,radiusclient.conf,realms,servers}
+}
+
+pkg_postinst() {
+ tmpfiles_process pppd.conf
+}
diff --git a/net-dialup/ppp/ppp-2.5.3.ebuild b/net-dialup/ppp/ppp-2.5.3.ebuild
new file mode 100644
index 000000000000..80ca0591eb48
--- /dev/null
+++ b/net-dialup/ppp/ppp-2.5.3.ebuild
@@ -0,0 +1,116 @@
+# Copyright 2024-2026 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit flag-o-matic linux-info pam tmpfiles
+
+DESCRIPTION="Point-to-Point Protocol (PPP)"
+HOMEPAGE="https://ppp.samba.org/"
+SRC_URI="https://download.samba.org/pub/ppp/${P}.tar.gz"
+
+LICENSE="BSD GPL-2"
+SLOT="0/${PV}"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="activefilter atm pam selinux systemd"
+
+DEPEND="
+ dev-libs/openssl:0=
+
+ virtual/libcrypt:=
+ activefilter? ( net-libs/libpcap )
+ atm? ( net-dialup/linux-atm )
+ pam? ( sys-libs/pam )
+ systemd? ( sys-apps/systemd )
+"
+RDEPEND="
+ ${DEPEND}
+ selinux? ( sec-policy/selinux-ppp )
+"
+BDEPEND="virtual/pkgconfig"
+PDEPEND="net-dialup/ppp-scripts"
+
+pkg_setup() {
+ local CONFIG_CHECK="~PPP ~PPP_ASYNC ~PPP_SYNC_TTY"
+ local ERROR_PPP="CONFIG_PPP:\t missing PPP support (REQUIRED)"
+ local ERROR_PPP_ASYNC="CONFIG_PPP_ASYNC:\t missing asynchronous serial line discipline"
+ ERROR_PPP_ASYNC+=" (optional, but highly recommended)"
+ local WARNING_PPP_SYNC_TTY="CONFIG_PPP_SYNC_TTY:\t missing synchronous serial line discipline"
+ WARNING_PPP_SYNC_TTY+=" (optional; used by 'sync' pppd option)"
+ if use activefilter ; then
+ CONFIG_CHECK+=" ~PPP_FILTER"
+ local ERROR_PPP_FILTER="CONFIG_PPP_FILTER:\t missing PPP filtering support (REQUIRED)"
+ fi
+ CONFIG_CHECK+=" ~PPP_DEFLATE ~PPP_BSDCOMP ~PPP_MPPE"
+ local ERROR_PPP_DEFLATE="CONFIG_PPP_DEFLATE:\t missing Deflate compression (optional, but highly recommended)"
+ local ERROR_PPP_BSDCOMP="CONFIG_PPP_BSDCOMP:\t missing BSD-Compress compression (optional, but highly recommended)"
+ local WARNING_PPP_MPPE="CONFIG_PPP_MPPE:\t missing MPPE encryption (optional, mostly used by PPTP links)"
+ CONFIG_CHECK+=" ~PPPOE ~PACKET"
+ local WARNING_PPPOE="CONFIG_PPPOE:\t missing PPPoE support (optional, needed by pppoe plugin)"
+ local WARNING_PACKET="CONFIG_PACKET:\t missing AF_PACKET support (optional, used by pppoe plugin)"
+ if use atm ; then
+ CONFIG_CHECK+=" ~PPPOATM"
+ local WARNING_PPPOATM="CONFIG_PPPOATM:\t missing PPPoA support (optional, needed by pppoatm plugin)"
+ fi
+
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ # Set the right paths in radiusclient.conf
+ sed -e "s:/usr/local/etc:/etc:" \
+ -e "s:/usr/local/sbin:/usr/sbin:" \
+ -i pppd/plugins/radius/etc/radiusclient.conf || die
+ # Set config dir to /etc/ppp/radius
+ sed -i -e "s:/etc/radiusclient:/etc/ppp/radius:g" \
+ pppd/plugins/radius/{*.8,*.c,*.h} \
+ pppd/plugins/radius/etc/* || die
+}
+
+src_configure() {
+ # bug #944065
+ append-cflags -std=gnu17
+
+ local args=(
+ --localstatedir="${EPREFIX}"/var
+ --runstatedir="${EPREFIX}"/run
+ $(use_enable systemd)
+ $(use_with atm)
+ $(use_with pam)
+ $(use_with activefilter pcap)
+ --enable-cbcp
+ --enable-multilink
+ )
+ econf "${args[@]}"
+}
+
+src_install() {
+ default
+
+ find "${ED}" -name '*.la' -type f -delete || die
+
+ if use pam; then
+ pamd_mimic_system ppp auth account session
+ fi
+
+ insinto /etc/modprobe.d
+ newins "${FILESDIR}/modules.ppp" ppp.conf
+
+ dosbin scripts/p{on,off,log}
+ doman scripts/pon.1
+ dosym pon.1 /usr/share/man/man1/poff.1
+ dosym pon.1 /usr/share/man/man1/plog.1
+
+ # Adding misc. specialized scripts to doc dir
+ dodoc -r scripts
+
+ newtmpfiles "${FILESDIR}/pppd.tmpfiles-r1" pppd.conf
+
+ insinto /etc/ppp/radius
+ doins pppd/plugins/radius/etc/{dictionary*,issue,port-id-map,radiusclient.conf,realms,servers}
+}
+
+pkg_postinst() {
+ tmpfiles_process pppd.conf
+}
diff --git a/net-dialup/pppconfig/Manifest b/net-dialup/pppconfig/Manifest
new file mode 100644
index 000000000000..84fb582da58e
--- /dev/null
+++ b/net-dialup/pppconfig/Manifest
@@ -0,0 +1 @@
+DIST pppconfig_2.3.25.tar.gz 392316 BLAKE2B 7c30db92cff0c9e80e04e4e7a83ccc22e2c1380831fcbc1ebd36bc4d30044c0b32669546907318be3c43061d1ea9f44b0a471f56847e75b0470f18f1aa10bf7a SHA512 6874b93ae34edb2a0ba06a669d930f5023a3eae38b6d10a78179eb69990a8280d41ebc2049461b54b03bd19904d13d2ebb57997599ed650660d0b34c958ad977
diff --git a/net-dialup/pppconfig/files/pppconfig b/net-dialup/pppconfig/files/pppconfig
new file mode 100644
index 000000000000..606300f2026b
--- /dev/null
+++ b/net-dialup/pppconfig/files/pppconfig
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Since I don't feel like installing whiptail, we need to wrap this app
+PPPCONFIG="/usr/sbin/pppconfig.real"
+if [ -x ${PPPCONFIG} ]; then
+ $PPPCONFIG --dialog
+else
+ echo "Error starting $PPPCONFIG"
+ exit 1
+fi
diff --git a/net-dialup/pppconfig/metadata.xml b/net-dialup/pppconfig/metadata.xml
new file mode 100644
index 000000000000..85e4ed814fa2
--- /dev/null
+++ b/net-dialup/pppconfig/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/pppconfig/pppconfig-2.3.25.ebuild b/net-dialup/pppconfig/pppconfig-2.3.25.ebuild
new file mode 100644
index 000000000000..476f2419b7f4
--- /dev/null
+++ b/net-dialup/pppconfig/pppconfig-2.3.25.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit strip-linguas
+
+DESCRIPTION="A text menu based utility for configuring ppp"
+HOMEPAGE="https://tracker.debian.org/pkg/pppconfig"
+SRC_URI="mirror://debian/pool/main/p/${PN}/${P/-/_}.tar.gz"
+
+SLOT="0"
+LICENSE="GPL-2"
+KEYWORDS="amd64 ppc x86"
+IUSE="nls"
+
+RDEPEND="net-dialup/ppp
+ dev-util/dialog
+ dev-lang/perl"
+BDEPEND="nls? ( sys-devel/gettext )"
+
+src_prepare() {
+ default
+
+ if use nls; then
+ strip-linguas -i po/
+ fi
+}
+
+src_compile() {
+ default
+
+ if use nls; then
+ local lang
+ for lang in ${LINGUAS}; do
+ msgfmt -o po/${lang}.{m,p}o || die
+ done
+ fi
+}
+
+src_install() {
+ keepdir /etc/chatscripts /etc/ppp/resolv
+ dosbin 0dns-down 0dns-up dns-clean
+ newsbin pppconfig pppconfig.real
+ dosbin "${FILESDIR}/pppconfig"
+ doman man/pppconfig.8
+ dodoc debian/{copyright,changelog}
+
+ if use nls; then
+ local lang
+ for lang in ${LINGUAS}; do
+ insinto /usr/share/locale/${lang}/LC_MESSAGES
+ newins po/${lang}.mo pppconfig.mo
+ done
+ fi
+}
diff --git a/net-dialup/pptpclient/Manifest b/net-dialup/pptpclient/Manifest
new file mode 100644
index 000000000000..90cb396e8ace
--- /dev/null
+++ b/net-dialup/pptpclient/Manifest
@@ -0,0 +1,2 @@
+DIST pptp-1.10.0.tar.gz 87007 BLAKE2B aeb8bff0025c5144678db2ee79ecd80ec3c7261640ed94596a3599c163763cbf17b50c37591fd8b39d0687db5dff9b4c14d1aa303d95b9fcaf4eb53602cf321b SHA512 d2b925fb9cb5dbc4da576dce0cfae62f466576ae5b5ed7d6edeaec9be16ab6e0d17c307df43ebdc06138f1269ef61ba8910462a4629b6262c452e8287cabe41c
+DIST pptp-command-20130515.bz2 7269 BLAKE2B dda3f517cf747e025dee1967841d40e58461384415161ef01bcc96c6568c5ccfb1af5254f26276164c43c41b668bf2646e5138985531d54f13ab2fedd410fab2 SHA512 3b0ad28c5f7bf4f674ba8742e8a3be50cb62521f767142a1a1e74263707bc860126b7238a4aea307366a71100a193d18f3ec7599f4c0c52cd259f8b1d6b429bf
diff --git a/net-dialup/pptpclient/files/pptp_fe.pl b/net-dialup/pptpclient/files/pptp_fe.pl
new file mode 100644
index 000000000000..83899d9a2c91
--- /dev/null
+++ b/net-dialup/pptpclient/files/pptp_fe.pl
@@ -0,0 +1,370 @@
+#!/usr/bin/perl
+#
+# $Id: pptp_fe.pl,v 1.1 2001/11/29 05:19:10 quozl Exp $
+#
+# pptp_fe.pl, privileged portion of xpptp_fe.pl
+# Copyright (C) 2001 Smoot Carl-Mitchell (smoot@tic.com)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+use strict;
+use Getopt::Std;
+use Time::localtime;
+use IO::Handle;
+
+my $Usage = "usage: pptp_fe [-c config_file] [-d] [-h] [-k] [-n network]
+ [-p] [-r routes] [-t timeout] [host]
+ where:
+ -c - configuration file (default is ~/.pptp_fe.conf)
+ -d - pppd debug flag
+ -h - this help message
+ -k - kill pppd daemon with route to network
+ -n - network number of remote private network in x.x.x.x/n notation
+ -r - routes to add to routing table separated by commas
+ -p - suppress prompting
+ -t - connection timeout retry interval in seconds (default 60 seconds)
+ host - remote PPTP server name
+";
+
+my %Opt;
+getopts("c:dhkn:pr:t:", \%Opt);
+
+my $Config_File = $Opt{'c'};
+$Config_File = "$ENV{'HOME'}/.pptp_fe.conf" unless $Opt{'c'};
+my $Config;
+my $Debug = $Opt{'d'};
+$Debug = 0 unless $Debug;
+my $Debug_Flag = "debug" if $Debug;
+my $Help = $Opt{'h'};
+my $Kill = $Opt{'k'};
+my $Net = $Opt{'n'};
+my $No_Prompt = $Opt{'p'};
+my $Route = $Opt{'r'};
+my $Timeout = $Opt{'t'}; $Timeout = 60 unless $Timeout;
+
+print($Usage), exit(1) if $Help;
+
+my $Server = $ARGV[0];
+
+my $State = "disconnected";
+
+system("modprobe ppp-compress-18");
+
+$Config = cmd_read_config_file($Config_File);
+for my $cmd (@$Config) {
+ cmd_set($cmd, 1);
+}
+
+print "($State) > " unless $No_Prompt;
+STDOUT->flush;
+for (;;) {
+ my $rin = '';
+ my $rout = '';
+ vec($rin, fileno(STDIN), 1) = 1;
+ command() if select($rout=$rin, undef, undef, 5);
+
+ my $interface = "";
+ if ($State eq "connected" && ! ($interface = net_interface_up($Net))) {
+ print "\n";
+ print "interface $interface for $Net not up - restarting\n";
+ cmd_connect();
+ print "($State) > " unless $No_Prompt;;
+ }
+}
+
+sub command {
+
+ my $input;
+ sysread(STDIN, $input, 1024);
+
+ for my $line1 (split("\n", $input)) {
+ my $line = $line1;
+ $line =~ s/\s*$//;
+ $line =~ s/^\s*//;
+ my ($command, $arguments) = split(" ", $line, 2);
+
+ if ($command eq "c") {
+ cmd_connect();
+ }
+ elsif ($command eq "d") {
+ cmd_disconnect();
+ }
+ elsif ($command eq "h") {
+ cmd_help();
+ }
+ elsif ($command eq "l") {
+ cmd_list();
+ }
+ elsif ($command eq "q") {
+ cmd_disconnect();
+ exit 0;
+ }
+ elsif ($command eq "r") {
+ $Config = cmd_read_config_file($arguments);
+ }
+ elsif ($command eq "s") {
+ cmd_set($arguments, 0);
+ }
+ elsif ($command eq "w") {
+ cmd_write_config_file($arguments);
+ }
+ elsif ($command ne "") {
+ print "unknown command\n";
+ }
+ }
+ print "($State) > " unless $No_Prompt;
+ STDOUT->flush;
+}
+
+sub cmd_connect {
+
+ cmd_disconnect() if $State eq "connected";
+
+ my $start_time = time();
+ my $date_string = ctime($start_time);
+ print "$date_string Running pptp $Server $Debug_Flag";
+ system("pptp $Server $Debug_Flag");
+
+ my $interface = "";
+
+ do {
+ sleep 1;
+ $interface = net_interface_up($Net);
+ print ".";
+ } until ($interface || time() > $start_time + $Timeout);
+
+ if (time() > $start_time + $Timeout) {
+ print "timed out after $Timeout sec\n";
+ $State = "disconnected";
+ return 0;
+ }
+
+ print "\n";
+
+ my $ifcfg = `ifconfig $interface`;
+ $ifcfg =~ /P-t-P:(.*) Mask/;
+ my $ip = $1;
+ print "setting route to network $Net to interface $interface\n";
+ system("route add -net $Net dev $interface metric 2");
+
+ # Routes are separated by commas
+ my @route = split(/,/, $Route);
+ for my $route (@route) {
+ my $net_flag = "";
+ $net_flag = "-net" if $route =~ /\//;
+
+ print "setting route to $route to interface $interface\n";
+ system("route add $net_flag $route dev $interface");
+ }
+
+ $State = "connected";
+ print "connected\n";
+ return 1;
+}
+
+sub cmd_disconnect {
+
+ return 1 if $State eq "disconnected";
+
+ my $interface = net_interface_up($Net);
+ my $pid_file = "/var/run/$interface.pid";
+
+ # delete the named pipes - XXX this is a bit crude
+ system("rm -f /var/run/pptp/*");
+
+ $State = "disconnected", return 1 unless $interface && -f $pid_file;
+
+ my $pid = `cat $pid_file`;
+ chomp $pid;
+ print "killing pppd($pid)\n";
+ kill("HUP", $pid);
+ print "waiting for pppd to die";
+ do {
+ sleep 1;
+ print ".";
+ }
+ until (kill(0, $pid));
+
+ print "\n";
+ $State = "disconnected";
+ print "disconnected\n";
+ return 1;
+}
+
+sub cmd_list {
+
+ print "Server = $Server\n";
+ print "Network = $Net\n";
+ print "Routes = $Route\n";
+ print "Debug = $Debug_Flag\n";
+ print "No_Prompt = $No_Prompt\n";
+ print "Timeout = $Timeout\n";
+ print "\n";
+}
+
+sub cmd_help {
+
+ print "Commands are:\n";
+ print "c - initiate PPTP connection\n";
+ print "d - disconnect PPTP\n";
+ print "h - this help message\n";
+ print "l - list current configuration\n";
+ print "q - quite the program\n";
+ print "r - read configuration file\n";
+ print "s - set configuration variable (l for a list)\n";
+ print "w - write the configuration file\n";
+
+}
+
+sub cmd_set {
+ my $input = shift;
+ my $no_replace = shift;
+
+ my ($variable, $value) = split(/\s*=\s*/, $input);
+
+ $variable = "\L$variable";
+ if (! $variable) {
+ print "syntax: s variable = value\n";
+ return 0;
+ }
+
+ if ($variable eq "server") {
+ $Server = $value unless $no_replace && $Server;
+ }
+ elsif ($variable eq "network") {
+ $Net = $value unless $no_replace && $Net;
+ }
+ elsif ($variable eq "routes") {
+ $Route = $value unless $no_replace && $Route;
+ }
+ elsif ($variable eq "debug") {
+ $Debug_Flag = $value unless $no_replace && $Debug_Flag;
+ }
+ elsif ($variable eq "no_prompt") {
+ $No_Prompt = $value unless $no_replace && $No_Prompt;
+ }
+ elsif ($variable eq "timeout") {
+ $Timeout = $value unless $no_replace && $Timeout;
+ }
+ elsif ($variable eq "config_file") {
+ $Config_File = $value unless $no_replace && $Config_File;
+ }
+ else {
+ print "unknown variable\n";
+ }
+}
+
+sub cmd_read_config_file {
+ my $file = shift;
+
+ my $config = [];
+ $file = $Config_File unless $file;
+ local *IN;
+ if (!open(IN, $file)) {
+ print "cannot open $file\n";
+ return $config;
+ }
+
+ my @config_file = <IN>;
+ close IN;
+ push @config_file, "\n";
+ chomp @config_file;
+
+ for my $line (@config_file) {
+ next if /\s*#/;
+
+ if ($line =~ /\S/) {
+ $line =~ s/^\s*//;
+ $line =~ s/\s*$//;
+ push @$config, $line;
+ next;
+ }
+ }
+ return $config;
+}
+
+sub cmd_write_config_file {
+ my $file = shift;
+
+ $file = $Config_File unless $file;
+ local *OUT;
+ if (!open(OUT, ">$file")) {
+ print "cannot open $file\n";
+ return 0;
+ }
+
+ my $oldfh = select OUT;
+ cmd_list();
+ close OUT;
+ select $oldfh;
+
+ return 1;
+}
+
+sub net_interface_up {
+ my $cidr = shift;
+
+ # cidr is net/bits
+ my($net, $nbits) = split(/\//, $cidr);
+
+ # compute the network number
+ my $netnum = netnum($net, $nbits);
+ local(*INTERFACE);
+ open(INTERFACE, "ifconfig|") || die "cannot run ifconfig - $!\n";
+
+ my $interface = "";
+ my @interface = <INTERFACE>;
+ close INTERFACE;
+ for (@interface) {
+ chomp;
+
+ # new interface
+ if (/^[a-zA-Z]/) {
+ if ($interface =~ /(.*) Link.*P-t-P:(.*) Mask/) {
+ my $interface_name = $1;
+ my $ip = $2;
+ return $interface_name
+ if netnum($ip, $nbits) == $netnum;
+ }
+ $interface = "";
+ }
+ $interface .= $_;
+ }
+ return "";
+}
+
+sub netnum {
+ my $net = shift;
+ my $bits = shift;
+
+ my @octets = split(/\./, $net);
+ my $netnum = 0;
+ for my $octet (@octets) {
+ $netnum <<= 8;
+ $netnum |= $octet;
+ }
+
+ my $mask = 0;
+ for (1..$bits) {
+ $mask <<= 1;
+ $mask |= 1;
+ }
+ $mask = $mask << (32-$bits);
+
+ $netnum &= $mask;
+
+ return $netnum;
+}
diff --git a/net-dialup/pptpclient/files/xpptp_fe.pl b/net-dialup/pptpclient/files/xpptp_fe.pl
new file mode 100644
index 000000000000..e32dcd9eabc8
--- /dev/null
+++ b/net-dialup/pptpclient/files/xpptp_fe.pl
@@ -0,0 +1,255 @@
+#!/usr/bin/perl -w
+#
+# $Id: xpptp_fe.pl.pl,v 1.1 2001/11/29 05:19:10 quozl Exp $
+#
+# xpptp_fe.pl.pl, graphical user interface for PPTP configuration
+# Copyright (C) 2001 Smoot Carl-Mitchell (smoot@tic.com)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+use Tk;
+use Tk::DirTree;
+
+=pod
+TK driver for pptp_fe.pl command script
+=cut
+
+=pod
+Global flags which correspnd to the pptp_fe.pl flags and options
+=cut
+
+my $Debug = 0;
+my $Debug_Flag = "";
+my $Network = "";
+my $Server = "";
+my $Routes = "";
+my $Get_Current_Config = 0;
+
+=pod
+
+Start up pptp_fe.pl and connect its input and output to the TK frontend.
+All I/O is done in raw mode, so the reads and writes are atomic and
+unbuffered.
+
+=cut
+
+pipe OUTPUT_READ, OUTPUT_WRITE;
+pipe COMMAND_READ, COMMAND_WRITE;
+
+my $Child_Pid = fork();
+die "cannot fork - $!\n" if $Child_Pid == -1;
+
+if ($Child_Pid) { # parent
+ close OUTPUT_WRITE;
+ close COMMAND_READ;
+}
+else { # child
+ close OUTPUT_READ;
+ close COMMAND_WRITE;
+
+ open(STDIN, "<&COMMAND_READ");
+ open(STDOUT, ">&OUTPUT_WRITE");
+
+ exec("pptp_fe.pl -p");
+}
+
+=pod
+The main window which present the various pptp_fe.pl options.
+
+The window is composed of:
+
+ Server name
+ Network number
+ Routes
+Connect Button Disconnect Button Write Config Button Quit Button
+=cut
+
+my $Main = MainWindow->new();
+$Main->Label(-text => "PPTP")->pack;
+
+my $Server_Frame = $Main->Frame->pack(-fill => 'x',
+ -padx => 5,
+ -pady => 5);
+
+$Server_Frame->Label(-text => "Remote PPTP Host")->pack(-side => "left");
+$Server_Frame->Entry(
+ -text => "Host",
+ -width => 30,
+ -textvariable => \$Server,
+ )->pack(-side => "left");
+
+
+my $Net_Frame = $Main->Frame->pack(-fill => 'x',
+ -padx => 5,
+ -pady => 5);
+
+=pod
+Network number entry box. This is the argument to the the -n flag
+=cut
+
+$Net_Frame->Label(-text => "Network Number")->pack(-side => "left");
+$Net_Frame->Entry(
+ -text => "Network",
+ -width => 15,
+ -textvariable => \$Network,
+ )->pack(-side => "left");
+
+=pod
+Additional static routes (-r) flag
+=cut
+
+my $Route_Frame = $Main->Frame->pack(
+ -fill => 'x',
+ -padx => 5,
+ -pady => 5);
+
+$Route_Frame->Label(-text => "Routes")->pack(-side => "left");
+
+$Route_Frame->Entry(
+ -text => "Routes",
+ -width => 30,
+ -textvariable => \$Routes
+ )->pack(
+ -side => "left",
+ -padx => 5,
+ -pady => 5);
+
+=pod
+Buttons
+
+Connect - Connect to a remote PPTP server
+
+Disconnect - Disconnect from the remote PPTP server
+
+Write - Write a configuration file
+
+Quit - Terminates the running pptp daemon and pptp_fe.pl program.
+=cut
+
+my $Button_Frame = $Main->Frame->pack(-fill => 'x', -pady => 5);
+
+my $Disconnect_Button;
+my $Connect_Button;
+my $Read_Button;
+my $Write_Button;
+my $Quit_Button;
+
+$Connect_Button = $Button_Frame->Button(
+ -text => "Connect",
+ -command =>
+ sub {
+ update_config();
+ syswrite(COMMAND_WRITE, "c\n");
+
+ $Connect_Button->configure(-state => "disabled");
+ $Disconnect_Button->configure(-state => "normal");
+ },
+ )->pack(-side => "left", -pady => 5, -padx => 5);
+
+$Disconnect_Button = $Button_Frame->Button(
+ -text => "Disconnect",
+ -state => "disabled",
+ -command =>
+ sub {
+ syswrite(COMMAND_WRITE, "d\n");
+
+ $Connect_Button->configure(-state => "normal");
+ $Disconnect_Button->configure(-state => "disabled");
+ }
+ )->pack(-side => "left", -pady => 5, -padx => 5);
+
+$Write_Button = $Button_Frame->Button(
+ -text => "Write Config",
+ -command =>
+ sub {
+ syswrite(COMMAND_WRITE, "w\n");
+
+ }
+ )->pack(-side => "left", -pady => 5, -padx => 5);
+
+$Quit_Button = $Button_Frame->Button(
+ -text => "Quit",
+ -command =>
+ sub {
+ syswrite(COMMAND_WRITE, "q\n");
+
+ $Connect_Button->configure(-state => "disabled");
+ $Disconnect_Button->configure(-state => "disabled");
+ $Quit_Button->configure(-state => "disabled");
+ }
+ )->pack(-side => "left", -pady => 5, -padx => 5);
+
+my $Log_Window = $Main->Toplevel;
+$Log_Window->title("PPTP Log");
+
+my $Log_Widget = $Log_Window->Text(
+ -height => 20,
+ -width => 80,
+ )->pack;
+
+
+$Log_Widget->fileevent(OUTPUT_READ, "readable", sub {
+ my $in = "";
+ my $n = sysread(OUTPUT_READ, $in, 1024);
+ if ($n == 0) {
+ close OUTPUT_READ;
+ $Main->destroy;
+ exit 0;
+ }
+
+ if (!$Get_Current_Config) {
+ $Log_Widget->insert("end", $in);
+ $Log_Widget->see("end");
+ }
+ else {
+ $Get_Current_Config = 0;
+
+ for my $line (split("\n", $in)) {
+ next unless $line =~ /\S/;
+
+ my ($variable, $value) = split(/\s*=\s*/, $line);
+ $variable = "\L$variable";
+
+ if ($variable eq "server") {
+ $Server = $value;
+ }
+ elsif ($variable eq "network") {
+ $Network = $value;
+ }
+ elsif ($variable eq "routes") {
+ $Routes = $value;
+ }
+ elsif ($variable eq "debug") {
+ $Debug = $value;
+ }
+ }
+ }
+
+ return 1;
+});
+
+syswrite(COMMAND_WRITE, "l\n");
+$Get_Current_Config = 1;
+
+MainLoop;
+
+sub update_config {
+
+ syswrite(COMMAND_WRITE, "s server = $Server\n");
+ syswrite(COMMAND_WRITE, "s network = $Network\n");
+ syswrite(COMMAND_WRITE, "s routes = $Routes\n");
+ syswrite(COMMAND_WRITE, "s debug = $Debug_Flag\n");
+}
diff --git a/net-dialup/pptpclient/metadata.xml b/net-dialup/pptpclient/metadata.xml
new file mode 100644
index 000000000000..5fdc94ab6fcd
--- /dev/null
+++ b/net-dialup/pptpclient/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="sourceforge">pptpclient</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/pptpclient/pptpclient-1.10.0.ebuild b/net-dialup/pptpclient/pptpclient-1.10.0.ebuild
new file mode 100644
index 000000000000..bd3462a5af24
--- /dev/null
+++ b/net-dialup/pptpclient/pptpclient-1.10.0.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+MY_P="${P/client}"
+MY_CMD="pptp-command-20130515"
+
+DESCRIPTION="Linux client for PPTP"
+HOMEPAGE="http://pptpclient.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/pptpclient/${MY_P}.tar.gz
+ https://dev.gentoo.org/~pinkbyte/distfiles/pptpclient/${MY_CMD}.bz2"
+
+SLOT="0"
+LICENSE="GPL-2"
+KEYWORDS="~alpha amd64 ~arm arm64 ~loong ppc ppc64 ~riscv ~sparc x86"
+IUSE="tk selinux"
+
+DEPEND="net-dialup/ppp
+ dev-lang/perl
+ tk? ( dev-perl/Tk )"
+RDEPEND="${DEPEND}
+ sys-apps/iproute2
+ selinux? ( sec-policy/selinux-ppp )"
+
+RESTRICT="test" #make test is useless and vector_test.c is broken
+
+S="${WORKDIR}/${MY_P}"
+
+DOCS=( AUTHORS ChangeLog DEVELOPERS NEWS README TODO USING )
+
+src_compile() {
+ emake OPTIMISE= DEBUG= CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" CC="$(tc-getCC)"
+}
+
+src_install() {
+ default
+ dodoc Documentation/*
+ dodir /etc/pptp.d
+
+ # The current version of pptp-linux doesn't include the
+ # RH-specific portions, so include them ourselves.
+ newsbin "${WORKDIR}/${MY_CMD}" pptp-command
+ dosbin "${FILESDIR}/pptp_fe.pl"
+ use tk && dosbin "${FILESDIR}/xpptp_fe.pl"
+}
diff --git a/net-dialup/radiusclient-ng/Manifest b/net-dialup/radiusclient-ng/Manifest
new file mode 100644
index 000000000000..6547d804fb5e
--- /dev/null
+++ b/net-dialup/radiusclient-ng/Manifest
@@ -0,0 +1 @@
+DIST radiusclient-ng-0.5.6.tar.gz 383882 BLAKE2B fa444a6a89cd8736aa03a71207bcc590cd12f0d043ed7cfe0405b7db51acecd34ddcf7b49ca19da485cd2f99975d39518455db1e9733fe40b25ea9b71a900c9e SHA512 3096519cb2029a216ac9a613c8c0721d9154b0b82c219f5528423bd1157333101137064cb2363e9cfd646a1719b06b1cec78eaf24fafb2f780fec41f40bcae88
diff --git a/net-dialup/radiusclient-ng/files/radiusclient-ng-0.5.6-cross-compile.patch b/net-dialup/radiusclient-ng/files/radiusclient-ng-0.5.6-cross-compile.patch
new file mode 100644
index 000000000000..4fd5c720359c
--- /dev/null
+++ b/net-dialup/radiusclient-ng/files/radiusclient-ng-0.5.6-cross-compile.patch
@@ -0,0 +1,73 @@
+Fix by Bertrand Jacquin <beber AT meleeweb.net>
+
+Gentoo bugreport: https://bugs.gentoo.org/show_bug.cgi?id=373365
+Upstream bugreport: https://developer.berlios.de/bugs/?func=detailbug&bug_id=18190&group_id=1208
+
+--- a/configure.in
++++ b/configure.in
+@@ -104,32 +104,40 @@
+ AC_CHECK_FUNCS(flock fcntl uname gethostname sysinfo getdomainname)
+ AC_CHECK_FUNCS(stricmp random rand snprintf vsnprintf)
+
+-if test "$ac_cv_func_uname" = 'yes'
+-then
+- AC_MSG_CHECKING([for field domainname in struct utsname])
+- AC_TRY_RUN([
+- #include <sys/utsname.h>
++AC_CACHE_CHECK([for field domainname in struct utsname], ac_cv_struct_utsname,
++ [AC_TRY_RUN([
++ #include <sys/utsname.h>
+
+- main(int argc, char **argv)
+- {
+- struct utsname uts;
+- uts.domainname[0] = '\0';
+- }
+- ],
+- AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_STRUCT_UTSNAME_DOMAINNAME),
+- AC_MSG_RESULT(no)
+- )
+-fi
++ main(int argc, char **argv)
++ {
++ struct utsname uts;
++ uts.domainname[0] = '\0';
++ }
++ ],
++ ac_cv_struct_utsname=yes,
++ ac_cv_struct_utsname=no,
++ [AC_MSG_ERROR([cross-compiling,
++ presetting ac_cv_struct_utsname=(yes|no) will help])]
++ )
++])
++AS_VAR_IF(ac_cv_struct_utsname, yes,
++ [AC_DEFINE(HAVE_STRUCT_UTSNAME_DOMAINNAME)],
++)
+
+-AC_MSG_CHECKING([for /dev/urandom])
+-if test -c /dev/urandom
+-then
+- AC_MSG_RESULT(yes)
+- AC_DEFINE(HAVE_DEV_URANDOM)
+-else
+- AC_MSG_RESULT(no)
+-fi
++AC_CACHE_CHECK([for /dev/urandom], ac_cv_file__dev_urandom,
++ [AS_IF([test "$cross_compiling" = yes],
++ [AC_MSG_ERROR([cross-compiling,
++ presetting ac_cv_file__dev_urandom=(yes|no) will help])],
++ if test -c /dev/urandom ; then
++ ac_cv_file__dev_urandom=yes
++ else
++ ac_cv_file__dev_urandom=no
++ fi
++ )]
++)
++AS_VAR_IF(ac_cv_file__dev_urandom, yes,
++ [AC_DEFINE(HAVE_DEV_URANDOM)]
++)
+
+ dnl Determine PATH setting
+ echo $ac_n "using the following PATH setting for exec'ed programs... $ac_c" 1>&6
+
diff --git a/net-dialup/radiusclient-ng/metadata.xml b/net-dialup/radiusclient-ng/metadata.xml
new file mode 100644
index 000000000000..57b36e791957
--- /dev/null
+++ b/net-dialup/radiusclient-ng/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <longdescription>Purpose of this project is to build portable, easy-to-use and standard compliant library suitable for
+developing free and commercial software that need support for a RADIUS protocol (RFCs 2128 and 2139).</longdescription>
+ <upstream>
+ <remote-id type="sourceforge">radiusclient-ng.berlios</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/radiusclient-ng/radiusclient-ng-0.5.6-r2.ebuild b/net-dialup/radiusclient-ng/radiusclient-ng-0.5.6-r2.ebuild
new file mode 100644
index 000000000000..84438ae2febe
--- /dev/null
+++ b/net-dialup/radiusclient-ng/radiusclient-ng-0.5.6-r2.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="RadiusClient NextGeneration - library for RADIUS clients"
+HOMEPAGE="https://sourceforge.net/projects/radiusclient-ng.berlios/"
+SRC_URI="https://downloads.sourceforge.net/${PN}.berlios/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ~ppc ~sparc x86"
+
+DEPEND="!net-dialup/radiusclient
+ !net-dialup/freeradius-client
+ virtual/libcrypt:="
+RDEPEND="${DEPEND}"
+
+DOCS=( BUGS CHANGES README )
+HTML_DOCS=( doc/instop.html )
+
+PATCHES=(
+ "${FILESDIR}/${P}-cross-compile.patch"
+)
+
+src_prepare() {
+ default
+
+ mv configure.{in,ac} || die
+
+ eautoreconf
+}
+
+src_configure() {
+ # bug #373365
+ if tc-is-cross-compiler ; then
+ export ac_cv_file__dev_urandom=yes
+ export ac_cv_struct_utsname=no
+ fi
+
+ econf
+}
+
+src_install() {
+ default
+
+ find "${ED}" -name '*.a' -delete || die
+}
diff --git a/net-dialup/rp-l2tp/Manifest b/net-dialup/rp-l2tp/Manifest
new file mode 100644
index 000000000000..5c9f3a14aecd
--- /dev/null
+++ b/net-dialup/rp-l2tp/Manifest
@@ -0,0 +1 @@
+DIST rp-l2tp-0.4.tar.gz 198869 BLAKE2B 2ffe47311b26fcf50eadfec7be5b5e936f8aa047c6a5bd7599bb9903dfa5eff3dce565ebe7bc12cb7320ffedb73b447511d1aceeda95c285da1fb709b5122db5 SHA512 43a1ce8728323ed25f8b92c981731b21db8714f8d157343deb1da49f2c7b25e1833de5012238098ad9d1add7daec228a48f2cb8d6d0b60afbcc1c385ae79d3c9
diff --git a/net-dialup/rp-l2tp/files/rp-l2tp-0.4-build.patch b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-build.patch
new file mode 100644
index 000000000000..6ba8630e43d6
--- /dev/null
+++ b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-build.patch
@@ -0,0 +1,68 @@
+--- a/Makefile.in.orig 2014-06-24 15:20:47.028342728 +0400
++++ b/Makefile.in 2014-06-24 15:21:07.468320934 +0400
+@@ -39,8 +39,8 @@
+
+ libl2tp.a: $(OBJS)
+ rm -f $@
+- ar -rc $@ $^
+- ranlib $@ || true
++ $(AR) -rc $@ $^
++ @RANLIB@ $@ || true
+
+ l2tpd: libl2tp.a libevent/libevent.a
+ $(MAKE) -C handlers
+--- a/libevent/Makefile.in.orig 2002-09-30 23:45:00.000000000 +0400
++++ b/libevent/Makefile.in 2014-06-24 15:24:31.535105268 +0400
+@@ -18,20 +18,20 @@
+
+ libevent.a: $(OBJS)
+ rm -f libevent.a
+- ar -cq libevent.a $(OBJS)
++ $(AR) -cq libevent.a $(OBJS)
+ @RANLIB@ libevent.a
+
+ event.o: event.c $(HDRS)
+- gcc $(CFLAGS) -c -o event.o event.c
++ $(CC) $(CFLAGS) -c -o event.o event.c
+
+ hash.o: hash.c $(HDRS)
+- gcc $(CFLAGS) -c -o hash.o hash.c
++ $(CC) $(CFLAGS) -c -o hash.o hash.c
+
+ event_sig.o: event_sig.c $(HDRS)
+- gcc $(CFLAGS) -c -o event_sig.o event_sig.c
++ $(CC) $(CFLAGS) -c -o event_sig.o event_sig.c
+
+ event_tcp.o: event_tcp.c $(HDRS)
+- gcc $(CFLAGS) -c -o event_tcp.o event_tcp.c
++ $(CC) $(CFLAGS) -c -o event_tcp.o event_tcp.c
+
+ clean: FORCE
+ rm -f *.a *.o *~
+--- a/handlers/Makefile.in.orig 2014-06-24 15:31:35.186667624 +0400
++++ b/handlers/Makefile.in 2014-06-24 15:32:26.659615281 +0400
+@@ -20,19 +20,19 @@
+ all: $(HANDLERS) l2tp-control
+
+ l2tp-control: cmd-control.o
+- gcc $(LDFLAGS) -o l2tp-control cmd-control.o
++ $(CC) $(CFLAGS) $(LDFLAGS) -o l2tp-control cmd-control.o
+
+ cmd-control.o: cmd-control.c
+- gcc $(CFLAGS) -c -o $@ $^
++ $(CC) $(CFLAGS) -c -o $@ $^
+
+ %.o: %.c
+- gcc $(CFLAGS) -fPIC -c -o $@ $<
++ $(CC) $(CFLAGS) -fPIC -c -o $@ $<
+
+ sync-pppd.so: pty.o sync-pppd.o
+- gcc $(LDFLAGS) -shared -o $@ $^
++ $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^
+
+ cmd.so: cmd.o dstring.o
+- gcc $(LDFLAGS) -shared -o $@ $^
++ $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^
+
+ clean:
+ rm -f *.so *.o *~
diff --git a/net-dialup/rp-l2tp/files/rp-l2tp-0.4-clang16-build-fix.patch b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-clang16-build-fix.patch
new file mode 100644
index 000000000000..dc4269764a27
--- /dev/null
+++ b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-clang16-build-fix.patch
@@ -0,0 +1,11 @@
+Bug: https://bugs.gentoo.org/897858
+--- a/handlers/cmd-control.c
++++ b/handlers/cmd-control.c
+@@ -16,6 +16,7 @@
+ static char const RCSID[] =
+ "$Id: cmd-control.c,v 1.2 2002/09/30 19:45:00 dskoll Exp $";
+ #include <stdio.h>
++#include <string.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
+ #include <sys/types.h>
diff --git a/net-dialup/rp-l2tp/files/rp-l2tp-0.4-flags.patch b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-flags.patch
new file mode 100644
index 000000000000..bf5d0cf82b3f
--- /dev/null
+++ b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-flags.patch
@@ -0,0 +1,54 @@
+diff -ru rp-l2tp-0.4.orig/handlers/Makefile.in rp-l2tp-0.4/handlers/Makefile.in
+--- rp-l2tp-0.4.orig/handlers/Makefile.in 2008-10-18 08:35:39.000000000 +0000
++++ rp-l2tp-0.4/handlers/Makefile.in 2008-10-18 08:47:02.000000000 +0000
+@@ -15,24 +15,24 @@
+
+ OBJS=pty.o sync-pppd.o dstring.o
+ SRCS=$(OBJS:.o=.c)
+-CFLAGS=-g -O2 -I.. -I../libevent -I../../libevent -Wall
++CFLAGS=@CFLAGS@ -I.. -I../libevent -I../../libevent -Wall
+
+ all: $(HANDLERS) l2tp-control
+
+ l2tp-control: cmd-control.o
+- gcc -o l2tp-control cmd-control.o
++ gcc $(LDFLAGS) -o l2tp-control cmd-control.o
+
+ cmd-control.o: cmd-control.c
+- gcc -c -o $@ $^
++ gcc $(CFLAGS) -c -o $@ $^
+
+ %.o: %.c
+ gcc $(CFLAGS) -fPIC -c -o $@ $<
+
+ sync-pppd.so: pty.o sync-pppd.o
+- gcc -shared -o $@ $^
++ gcc $(LDFLAGS) -shared -o $@ $^
+
+ cmd.so: cmd.o dstring.o
+- gcc -shared -o $@ $^
++ gcc $(LDFLAGS) -shared -o $@ $^
+
+ clean:
+ rm -f *.so *.o *~
+diff -ru rp-l2tp-0.4.orig/Makefile.in rp-l2tp-0.4/Makefile.in
+--- rp-l2tp-0.4.orig/Makefile.in 2008-10-18 08:35:39.000000000 +0000
++++ rp-l2tp-0.4/Makefile.in 2008-10-18 08:40:38.000000000 +0000
+@@ -31,7 +31,7 @@
+ EXTRA_LIBS=@LIBEVENT@/*.o -ldl
+
+ SRCS=$(OBJS:.o=.c)
+-CFLAGS=-g -I.. -I@LIBEVENT@ -Wall -Wstrict-prototypes -ansi -pedantic -D_GNU_SOURCE -DVERSION=\"$(VERSION)\" -DPREFIX=\"$(prefix)\" -DLIBDIR=\"$(libdir)\"
++CFLAGS=@CFLAGS@ -I.. -I@LIBEVENT@ -Wall -Wstrict-prototypes -ansi -pedantic -D_GNU_SOURCE -DVERSION=\"$(VERSION)\" -DPREFIX=\"$(prefix)\" -DLIBDIR=\"$(libdir)\"
+
+ TARGETS=l2tpd libl2tp.a handlers
+
+@@ -44,7 +44,7 @@
+
+ l2tpd: libl2tp.a libevent/libevent.a
+ $(MAKE) -C handlers
+- @CC@ -o l2tpd -rdynamic $(OBJS) $(EXTRA_LIBS)
++ @CC@ $(LDFLAGS) -o l2tpd -rdynamic $(OBJS) $(EXTRA_LIBS)
+
+ libevent/libevent.a:
+ test -d libevent || ln -s ../libevent .
diff --git a/net-dialup/rp-l2tp/files/rp-l2tp-0.4-gentoo.patch b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-gentoo.patch
new file mode 100644
index 000000000000..1138b37b20e2
--- /dev/null
+++ b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-gentoo.patch
@@ -0,0 +1,233 @@
+diff -Nru rp-l2tp-0.4.orig/handlers/cmd.c rp-l2tp-0.4/handlers/cmd.c
+--- rp-l2tp-0.4.orig/handlers/cmd.c 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/handlers/cmd.c 2007-04-15 13:29:18.000000000 +0300
+@@ -162,7 +162,7 @@
+
+ /* We have hit the end of our options. Open command socket */
+ if (!sockname) {
+- sockname = "/var/run/l2tpctrl";
++ sockname = "/var/run/rp-l2tpdctrl";
+ }
+
+ (void) remove(sockname);
+diff -Nru rp-l2tp-0.4.orig/handlers/cmd-control.c rp-l2tp-0.4/handlers/cmd-control.c
+--- rp-l2tp-0.4.orig/handlers/cmd-control.c 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/handlers/cmd-control.c 2007-04-15 13:29:18.000000000 +0300
+@@ -52,7 +52,7 @@
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_LOCAL;
+- strncpy(addr.sun_path, "/var/run/l2tpctrl", sizeof(addr.sun_path) - 1);
++ strncpy(addr.sun_path, "/var/run/rp-l2tpdctrl", sizeof(addr.sun_path) - 1);
+
+ fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+ if (fd < 0) {
+diff -Nru rp-l2tp-0.4.orig/handlers/Makefile.in rp-l2tp-0.4/handlers/Makefile.in
+--- rp-l2tp-0.4.orig/handlers/Makefile.in 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/handlers/Makefile.in 2007-04-15 13:33:41.000000000 +0300
+@@ -9,6 +9,7 @@
+ install=@INSTALL@
+ install_dir=@INSTALL@ -d
+ sbindir=@sbindir@
++libdir=@libdir@
+
+ HANDLERS=sync-pppd.so cmd.so
+
+@@ -39,7 +40,7 @@
+
+ install: all
+ -mkdir -p $(RPM_INSTALL_ROOT)$(sbindir)
+- -mkdir -p $(RPM_INSTALL_ROOT)$(prefix)/lib/l2tp/plugins
+- $(install) -m 755 -s l2tp-control $(RPM_INSTALL_ROOT)$(sbindir)
+- $(install) -m 755 $(HANDLERS) $(RPM_INSTALL_ROOT)$(prefix)/lib/l2tp/plugins
++ -mkdir -p $(RPM_INSTALL_ROOT)$(libdir)/rp-l2tpd/plugins
++ $(install) -m 755 l2tp-control $(RPM_INSTALL_ROOT)$(sbindir)/rp-l2tpd-control
++ $(install) -m 755 $(HANDLERS) $(RPM_INSTALL_ROOT)$(libdir)/rp-l2tpd/plugins
+ distclean: clean
+diff -Nru rp-l2tp-0.4.orig/main.c rp-l2tp-0.4/main.c
+--- rp-l2tp-0.4.orig/main.c 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/main.c 2007-04-15 13:29:18.000000000 +0300
+@@ -27,7 +27,7 @@
+ static void
+ usage(int argc, char *argv[], int exitcode)
+ {
+- fprintf(stderr, "\nl2tpd Version %s Copyright 2002 Roaring Penguin Software Inc.\n", VERSION);
++ fprintf(stderr, "\nrp-l2tpd Version %s Copyright 2002 Roaring Penguin Software Inc.\n", VERSION);
+ fprintf(stderr, "http://www.roaringpenguin.com/\n\n");
+ fprintf(stderr, "Usage: %s [options]\n", argv[0]);
+ fprintf(stderr, "Options:\n");
+@@ -68,7 +68,7 @@
+ l2tp_peer_init();
+ l2tp_debug_set_bitmask(debugmask);
+
+- if (l2tp_parse_config_file(es, "/etc/l2tp/l2tp.conf") < 0) {
++ if (l2tp_parse_config_file(es, "/etc/rp-l2tp/rp-l2tpd.conf") < 0) {
+ l2tp_die();
+ }
+
+diff -Nru rp-l2tp-0.4.orig/Makefile.in rp-l2tp-0.4/Makefile.in
+--- rp-l2tp-0.4.orig/Makefile.in 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/Makefile.in 2007-04-15 13:39:09.000000000 +0300
+@@ -25,12 +25,13 @@
+ install=@INSTALL@
+ install_dir=@INSTALL@ -d
+ sbindir=@sbindir@
++libdir=@libdir@
+
+ OBJS=auth.o debug.o dgram.o main.o md5.o network.o options.o peer.o session.o tunnel.o utils.o
+ EXTRA_LIBS=@LIBEVENT@/*.o -ldl
+
+ SRCS=$(OBJS:.o=.c)
+-CFLAGS=-g -I.. -I@LIBEVENT@ -Wall -Wstrict-prototypes -ansi -pedantic -D_GNU_SOURCE -DVERSION=\"$(VERSION)\" -DPREFIX=\"$(prefix)\"
++CFLAGS=-g -I.. -I@LIBEVENT@ -Wall -Wstrict-prototypes -ansi -pedantic -D_GNU_SOURCE -DVERSION=\"$(VERSION)\" -DPREFIX=\"$(prefix)\" -DLIBDIR=\"$(libdir)\"
+
+ TARGETS=l2tpd libl2tp.a handlers
+
+@@ -81,13 +82,13 @@
+
+ install: all
+ -mkdir -p $(RPM_INSTALL_ROOT)$(DESTDIR)$(sbindir)
+- $(install) -m 755 -s l2tpd $(RPM_INSTALL_ROOT)$(DESTDIR)$(sbindir)
+- -mkdir -p $(RPM_INSTALL_ROOT)$(DESTDIR)/etc/l2tp
+- $(install) -m 644 l2tp.conf $(RPM_INSTALL_ROOT)$(DESTDIR)/etc/l2tp/l2tp.conf.example
++ $(install) -m 755 l2tpd $(RPM_INSTALL_ROOT)$(DESTDIR)$(sbindir)/rp-l2tpd
++ -mkdir -p $(RPM_INSTALL_ROOT)$(DESTDIR)/etc/rp-l2tp
++ $(install) -m 644 l2tp.conf $(RPM_INSTALL_ROOT)$(DESTDIR)/etc/rp-l2tp/rp-l2tpd.conf.example
+ -mkdir -p $(RPM_INSTALL_ROOT)$(DESTDIR)$(mandir)/man8
+ -mkdir -p $(RPM_INSTALL_ROOT)$(DESTDIR)$(mandir)/man5
+- $(install) -m 644 man/l2tpd.8 $(RPM_INSTALL_ROOT)$(DESTDIR)$(mandir)/man8
+- $(install) -m 644 man/l2tp.conf.5 $(RPM_INSTALL_ROOT)$(DESTDIR)$(mandir)/man5
++ $(install) -m 644 man/l2tpd.8 $(RPM_INSTALL_ROOT)$(DESTDIR)$(mandir)/man8/rp-l2tpd.8
++ $(install) -m 644 man/l2tp.conf.5 $(RPM_INSTALL_ROOT)$(DESTDIR)$(mandir)/man5/rp-l2tpd.conf.5
+
+ $(MAKE) -C handlers install
+
+diff -Nru rp-l2tp-0.4.orig/man/l2tp.conf.5 rp-l2tp-0.4/man/l2tp.conf.5
+--- rp-l2tp-0.4.orig/man/l2tp.conf.5 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/man/l2tp.conf.5 2007-04-15 13:29:18.000000000 +0300
+@@ -1,13 +1,13 @@
+ .\" $Id$
+ .\" LIC: GPL
+-.TH L2TP.CONF 5 "11 March 2002"
++.TH RP-L2TPD.CONF 5 "11 March 2002"
+ .\""
+ .UC 4
+ .SH NAME
+-l2tp.conf \- L2TP configuration file
++rp-l2tpd.conf \- L2TP configuration file
+ .SH DESCRIPTION
+-The \fBl2tp.conf\fP file contains the configuration for
+-the L2TP daemon \fBl2tpd\fP(8).
++The \fBrp-l2tpd.conf\fP file contains the configuration for
++the L2TP daemon \fBrp-l2tpd\fP(8).
+ Each line in the file takes one of the following forms:
+ .\"
+ .IP "# \fIcomment\fR"
+@@ -155,9 +155,9 @@
+ in the global section. The only option available is:
+ .IP "\fBsocket-path\fP \fIpathname\fR"
+ Specifies the path name of the UNIX-domain socket for controlling the
+-daemon. Defaults to \fI/var/run/l2tpctrl\fR.
++daemon. Defaults to \fI/var/run/rp-l2tpdctrl\fR.
+ .PP
+ Even if you do not supply any options to cmd, you \fImust\fR have
+ a \fBsection cmd\fR line to activate the handler.
+ .SH AUTHORS
+-\fBl2tpd\fR was written by David F. Skoll <dfs@roaringpenguin.com>.
++\fBrp-l2tpd\fR was written by David F. Skoll <dfs@roaringpenguin.com>.
+diff -Nru rp-l2tp-0.4.orig/man/l2tpd.8 rp-l2tp-0.4/man/l2tpd.8
+--- rp-l2tp-0.4.orig/man/l2tpd.8 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/man/l2tpd.8 2007-04-15 13:29:18.000000000 +0300
+@@ -1,14 +1,14 @@
+ .\" $Id$
+ .\" LIC: GPL
+-.TH L2TPD 8 "11 March 2002"
++.TH RP-L2TPD 8 "11 March 2002"
+ .UC 4
+ .SH NAME
+-l2tpd \- user-space L2TP daemon.
++rp-l2tpd \- user-space L2TP daemon.
+ .SH SYNOPSIS
+-.B l2tpd \fR[\fIoptions\fR]
++.B rp-l2tpd \fR[\fIoptions\fR]
+
+ .SH DESCRIPTION
+-\fBl2tpd\fR is a user-space L2TP daemon. L2TP is the Layer Two
++\fBrp-l2tpd\fR is a user-space L2TP daemon. L2TP is the Layer Two
+ Tunneling Protocol described in RFC 2661. It allows you to tunnel
+ PPP sessions over a network or transport protocol (in this case, UDP.)
+
+@@ -16,50 +16,50 @@
+ .TP
+ .B \-d \fInum\fR
+ Sets the debug level to \fInum\fR. Of interest mostly to
+-\fBl2tpd\fR developers. \fInum\fR is a bitmask; set it to
++\fBrp-l2tpd\fR developers. \fInum\fR is a bitmask; set it to
+ 65535 for maximum debugging information.
+
+ .TP
+ .B \-f
+-Do not fork. Normally, \fBl2tpd\fR forks and puts itself in the
++Do not fork. Normally, \fBrp-l2tpd\fR forks and puts itself in the
+ background. This option causes it to stay running in the foreground.
+
+ .SH L2TPD ARCHITECTURE
+
+-The \fBl2tpd\fR program itself contains \fIonly\fR code necessary
++The \fBrp-l2tpd\fR program itself contains \fIonly\fR code necessary
+ for processing L2TP datagrams and maintaining L2TP tunnels and
+ sessions. It does \fInot\fR contain code for interacting with
+ \fBpppd\fR or for users to control session establishment and teardown.
+ These functions are performed by \fIhandlers\fR, which are
+ shared-object libraries dynamically loaded at run-time.
+ .PP
+-The handlers currently distributed with \fBl2tpd\fR include:
++The handlers currently distributed with \fBrp-l2tpd\fR include:
+ .TP
+ .B sync-pppd.so
+-A shared-library which interfaces with \fBpppd\fR and allows \fBl2tpd\fR
++A shared-library which interfaces with \fBpppd\fR and allows \fBrp-l2tpd\fR
+ to act as both an LAC and an LNS.
+ .TP
+ .B cmd.so
+ A simple command-interpreter which listens on a UNIX-domain socket
+ and allows you to start and stop L2TP sessions.
+ .PP
+-\fBl2tpd\fR is a single-threaded, event-driven program. It should be
++\fBrp-l2tpd\fR is a single-threaded, event-driven program. It should be
+ fairly lightweight and efficient.
+
+ .SH L2TPD CONFIGURATION
+-On startup, \fBl2tpd\fR reads the configuration file \fB/etc/l2tp/l2tp.conf\fR.
++On startup, \fBrp-l2tpd\fR reads the configuration file \fB/etc/rp-l2tp/rp-l2tpd.conf\fR.
+ This configuration file sets operating parameters, describes peers and loads
+-and configures handlers. See \fBl2tp.conf\fR(5) for configuration
++and configures handlers. See \fBrp-l2tp.conf\fR(5) for configuration
+ file details.
+
+ .SH FILES
+ .TP
+-.B /etc/l2tp/l2tp.conf
++.B /etc/rp-l2tp/rp-l2tp.conf
+ Main configuration file.
+ .TP
+-.B /var/run/l2tpctrl
++.B /var/run/rp-l2tpdctrl
+ Control socket for \fBcmd.so\fR handler.
+
+ .SH AUTHORS
+-\fBl2tpd\fR was written by David F. Skoll <dfs@roaringpenguin.com>.
++\fBrp-l2tpd\fR was written by David F. Skoll <dfs@roaringpenguin.com>.
+
+diff -Nru rp-l2tp-0.4.orig/utils.c rp-l2tp-0.4/utils.c
+--- rp-l2tp-0.4.orig/utils.c 2007-04-15 13:30:55.000000000 +0300
++++ rp-l2tp-0.4/utils.c 2007-04-15 13:34:20.000000000 +0300
+@@ -196,7 +196,7 @@
+ if (*fname == '/') {
+ handle = dlopen(fname, RTLD_NOW);
+ } else {
+- snprintf(buf, sizeof(buf), "%s/lib/l2tp/plugins/%s", PREFIX, fname);
++ snprintf(buf, sizeof(buf), "%s/rp-l2tpd/plugins/%s", LIBDIR, fname);
+ buf[sizeof(buf)-1] = 0;
+ handle = dlopen(buf, RTLD_NOW);
+ }
diff --git a/net-dialup/rp-l2tp/files/rp-l2tp-0.4-parallel-build.patch b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-parallel-build.patch
new file mode 100644
index 000000000000..cfbb096bef70
--- /dev/null
+++ b/net-dialup/rp-l2tp/files/rp-l2tp-0.4-parallel-build.patch
@@ -0,0 +1,12 @@
+--- a/Makefile.in~ 2018-04-02 11:58:30.000000000 +0200
++++ b/Makefile.in 2018-04-02 12:00:15.173470572 +0200
+@@ -42,8 +42,7 @@
+ $(AR) -rc $@ $^
+ @RANLIB@ $@ || true
+
+-l2tpd: libl2tp.a libevent/libevent.a
+- $(MAKE) -C handlers
++l2tpd: libl2tp.a libevent/libevent.a handlers
+ @CC@ $(LDFLAGS) -o l2tpd -rdynamic $(OBJS) $(EXTRA_LIBS)
+
+ libevent/libevent.a:
diff --git a/net-dialup/rp-l2tp/files/rp-l2tpd-init b/net-dialup/rp-l2tp/files/rp-l2tpd-init
new file mode 100644
index 000000000000..7af7cf6f6567
--- /dev/null
+++ b/net-dialup/rp-l2tp/files/rp-l2tpd-init
@@ -0,0 +1,19 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need net
+}
+
+start() {
+ ebegin "Starting rp-l2tpd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/rp-l2tpd
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping rp-l2tpd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/rp-l2tpd
+ eend $?
+}
diff --git a/net-dialup/rp-l2tp/metadata.xml b/net-dialup/rp-l2tp/metadata.xml
new file mode 100644
index 000000000000..20d30c193c51
--- /dev/null
+++ b/net-dialup/rp-l2tp/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="sourceforge">rp-l2tp</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/rp-l2tp/rp-l2tp-0.4-r5.ebuild b/net-dialup/rp-l2tp/rp-l2tp-0.4-r5.ebuild
new file mode 100644
index 000000000000..413875e76ec6
--- /dev/null
+++ b/net-dialup/rp-l2tp/rp-l2tp-0.4-r5.ebuild
@@ -0,0 +1,43 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="User-space implementation of L2TP for Linux and other UNIX systems"
+HOMEPAGE="https://sourceforge.net/projects/rp-l2tp/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2+ GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ~ppc x86"
+
+PATCHES=(
+ "${FILESDIR}/${P}-gentoo.patch"
+ "${FILESDIR}/${P}-flags.patch"
+ "${FILESDIR}/${P}-build.patch"
+ "${FILESDIR}/${P}-parallel-build.patch"
+ "${FILESDIR}/${P}-clang16-build-fix.patch"
+)
+
+src_prepare() {
+ default
+
+ eautoreconf #871210
+
+ tc-export AR CC
+}
+
+src_install() {
+ emake RPM_INSTALL_ROOT="${D}" install
+ einstalldocs
+
+ newdoc l2tp.conf rp-l2tpd.conf
+
+ docinto libevent
+ dodoc -r libevent/Doc/.
+ docompress -x /usr/share/doc/${PF}/libevent
+
+ newinitd "${FILESDIR}"/rp-l2tpd-init rp-l2tpd
+}
diff --git a/net-dialup/rp-pppoe/Manifest b/net-dialup/rp-pppoe/Manifest
new file mode 100644
index 000000000000..4f51e9b0b243
--- /dev/null
+++ b/net-dialup/rp-pppoe/Manifest
@@ -0,0 +1 @@
+DIST rp-pppoe-4.0.tar.gz 139539 BLAKE2B ba9f11e547dafdacf6fc4d525488a4ac0279b06d545e0c116e568c92a45eb8ab558ca9112f1debecacde5401cb5974eacdf972b1b4cd813711589b8181e918de SHA512 faebe543988b1ffacd4d9bf55a3ec21f3a541f9232ba6c7b6fa0e8103d6c2b7b1c358e7f7bc8f99bebb24b2f7bdcc2f46ba1ef4c23e6dd34062f8f28114e7aea
diff --git a/net-dialup/rp-pppoe/files/pppoe-server.confd b/net-dialup/rp-pppoe/files/pppoe-server.confd
new file mode 100644
index 000000000000..bb5b2e9088d7
--- /dev/null
+++ b/net-dialup/rp-pppoe/files/pppoe-server.confd
@@ -0,0 +1,10 @@
+#Multiple interfaces allowed. Example: PPPOE_INTERFACE="vlan10 -I vlan11 -I vlan12" and so on.
+#Multiple interfaces allowed. Example: PPPOE_INTERFACE="vlan10 -I vlan11 -I vlan12" and so on.
+
+#PPPOE_INTERFACE=<interface name>
+#AC_NAME=<AC Name>
+#SERVICE_NAME=<Service Name>
+#MAX_SESSIONS=<Max PPPoE Sessions>
+#MAX_SESESSION_PER_MAC=<Max PPPoE Sessions per MAC>
+#LOCAL_IP=<PPP Local IP Addr>
+#OTHER_OPTIONS="-p /etc/ppp/ip-pools"
diff --git a/net-dialup/rp-pppoe/files/pppoe-server.initd b/net-dialup/rp-pppoe/files/pppoe-server.initd
new file mode 100644
index 000000000000..39caee9d761b
--- /dev/null
+++ b/net-dialup/rp-pppoe/files/pppoe-server.initd
@@ -0,0 +1,9 @@
+#!/sbin/openrc-run
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License, v2 or later
+
+description="rp-pppoe server"
+pidfile="/run/pppoe-server.pid"
+command="/usr/sbin/pppoe-server"
+command_args="-I ${PPPOE_INTERFACE:-eth0} -C ${AC_NAME:-$(hostname)} -S ${SERVICE_NAME:-default} -N ${MAX_SESSIONS:-64} -x ${MAX_SESESSION_PER_MAC:-1} -L ${LOCAL_IP:-10.0.0.1.} -k -F ${OTHER_OPTIONS}"
+command_background="true"
diff --git a/net-dialup/rp-pppoe/files/rp-pppoe-4.0-ar_environment.patch b/net-dialup/rp-pppoe/files/rp-pppoe-4.0-ar_environment.patch
new file mode 100644
index 000000000000..651dc9078cda
--- /dev/null
+++ b/net-dialup/rp-pppoe/files/rp-pppoe-4.0-ar_environment.patch
@@ -0,0 +1,81 @@
+From 7686d18a896118d4b99b15313edac34e6f5a2370 Mon Sep 17 00:00:00 2001
+From: Jaco Kroon <jaco@uls.co.za>
+Date: Thu, 11 May 2023 13:44:06 +0200
+Subject: [PATCH 1/2] libevent: avoid failure in case ar isn't ar but something
+ else.
+
+---
+ src/libevent/Makefile.in | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/libevent/Makefile.in b/src/libevent/Makefile.in
+index 5f4f43f..02ebe21 100644
+--- a/libevent/Makefile.in
++++ b/libevent/Makefile.in
+@@ -14,13 +14,12 @@ OBJS=event.o event_tcp.o hash.o event_sig.o
+ SRCS=$(OBJS:.o=.c)
+ HDRS=event.h event_tcp.h eventpriv.h hash.h
+ CFLAGS=@CFLAGS@ -I.. $(DEFINES)
+-AR=ar
+
+ all: libevent.a
+
+ libevent.a: $(OBJS)
+ rm -f libevent.a
+- $(AR) -cq libevent.a $(OBJS)
++ @AR@ -cq libevent.a $(OBJS)
+ @RANLIB@ libevent.a
+
+ event.o: event.c $(HDRS)
+
+From 162bf8bf6b9c6776e3b6ac000a1e88afe49d9d31 Mon Sep 17 00:00:00 2001
+From: Jaco Kroon <jaco@uls.co.za>
+Date: Thu, 11 May 2023 13:49:48 +0200
+Subject: [PATCH 2/2] ./configure - marginally improve ar detection.
+
+---
+ src/configure | 6 +++++-
+ src/configure.ac | 6 +++++-
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/configure b/src/configure
+index 7eb80d0..9a31790 100755
+--- a/configure
++++ b/configure
+@@ -3088,7 +3088,7 @@ $as_echo "no" >&6; }
+ fi
+
+ if test "x$ac_ct_AR" = x; then
+- AR="/bin/false"
++ AR=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+ yes:)
+@@ -3103,6 +3103,10 @@ else
+ fi
+
+
++if test "no$AR" = no ; then
++ as_fn_error $? "ar is a required program" "$LINENO" 5
++fi
++
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+diff --git a/src/configure.ac b/src/configure.ac
+index cb7a094..a09241a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -13,7 +13,11 @@ AC_PREFIX_DEFAULT(/usr)
+ dnl Checks for programs.
+ AC_PROG_CC
+ AC_PROG_RANLIB
+-AC_CHECK_TOOL([AR],[ar],[/bin/false])
++AC_CHECK_TOOL([AR],[ar])
++
++if test "no$AR" = no ; then
++ AC_ERROR(ar is a required program)
++fi
+
+ dnl Checks for libraries.
+
diff --git a/net-dialup/rp-pppoe/metadata.xml b/net-dialup/rp-pppoe/metadata.xml
new file mode 100644
index 000000000000..5a0914b10ce9
--- /dev/null
+++ b/net-dialup/rp-pppoe/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>jkroon@gentoo.org</email>
+ <name>Jaco Kroon</name>
+ </maintainer>
+</pkgmetadata>
diff --git a/net-dialup/rp-pppoe/rp-pppoe-4.0.ebuild b/net-dialup/rp-pppoe/rp-pppoe-4.0.ebuild
new file mode 100644
index 000000000000..e153fe4e7005
--- /dev/null
+++ b/net-dialup/rp-pppoe/rp-pppoe-4.0.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="A user-mode PPPoE client and server suite for Linux"
+HOMEPAGE="https://dianne.skoll.ca/projects/rp-pppoe/ https://salsa.debian.org/dskoll/rp-pppoe"
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI=https://github.com/dfskoll/rp-pppoe.git
+else
+ SRC_URI="https://dianne.skoll.ca/projects/rp-pppoe/download/${P}.tar.gz"
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+S="${S}/src"
+
+RDEPEND="
+ net-dialup/ppp:=
+ sys-apps/iproute2
+"
+DEPEND=">=sys-kernel/linux-headers-2.6.25
+ elibc_musl? ( net-libs/ppp-defs )
+ ${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}/rp-pppoe-4.0-ar_environment.patch"
+)
+
+pkg_setup() {
+ # This is needed in multiple phases
+ PPPD_VER="$(best_version net-dialup/ppp)"
+ PPPD_VER="${PPPD_VER#*/*-}" #reduce it to ${PV}-${PR}
+ PPPD_VER="${PPPD_VER%%-*}" #reduce it to ${PV}
+
+ PPPD_PLUGIN_DIR="/usr/$(get_libdir)/pppd/${PPPD_VER}"
+}
+
+src_configure() {
+ addpredict /dev/ppp
+
+ econf --enable-plugin=/usr/include/pppd
+}
+
+src_compile() {
+ emake PLUGIN_PATH=rp-pppoe.so PLUGIN_DIR="${PPPD_PLUGIN_DIR}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" docdir="/usr/share/doc/${PF}" PLUGIN_DIR="${PPPD_PLUGIN_DIR}" install
+
+ # We don't need this README file here.
+ rm "${ED}${PPPD_PLUGIN_DIR}/README" || die "Error removing ${PPPD_PLUGIN_DIR}/README from installation"
+
+ newinitd "${FILESDIR}"/pppoe-server.initd pppoe-server
+ newconfd "${FILESDIR}"/pppoe-server.confd pppoe-server
+}
diff --git a/net-dialup/rp-pppoe/rp-pppoe-9999.ebuild b/net-dialup/rp-pppoe/rp-pppoe-9999.ebuild
new file mode 100644
index 000000000000..15b43b8a2fdc
--- /dev/null
+++ b/net-dialup/rp-pppoe/rp-pppoe-9999.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="A user-mode PPPoE client and server suite for Linux"
+HOMEPAGE="https://dianne.skoll.ca/projects/rp-pppoe/ https://salsa.debian.org/dskoll/rp-pppoe"
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI=https://github.com/dfskoll/rp-pppoe.git
+else
+ SRC_URI="https://dianne.skoll.ca/projects/rp-pppoe/download/${P}.tar.gz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+S="${S}/src"
+
+RDEPEND="
+ net-dialup/ppp:=
+ sys-apps/iproute2
+"
+DEPEND=">=sys-kernel/linux-headers-2.6.25
+ elibc_musl? ( net-libs/ppp-defs )
+ ${RDEPEND}"
+
+pkg_setup() {
+ # This is needed in multiple phases
+ PPPD_VER="$(best_version net-dialup/ppp)"
+ PPPD_VER="${PPPD_VER#*/*-}" #reduce it to ${PV}-${PR}
+ PPPD_VER="${PPPD_VER%%-*}" #reduce it to ${PV}
+
+ PPPD_PLUGIN_DIR="/usr/$(get_libdir)/pppd/${PPPD_VER}"
+}
+
+src_configure() {
+ addpredict /dev/ppp
+
+ econf --enable-plugin=/usr/include/pppd
+}
+
+src_compile() {
+ emake PLUGIN_PATH=rp-pppoe.so PLUGIN_DIR="${PPPD_PLUGIN_DIR}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" docdir="/usr/share/doc/${PF}" PLUGIN_DIR="${PPPD_PLUGIN_DIR}" install
+
+ # We don't need this README file here.
+ rm "${ED}${PPPD_PLUGIN_DIR}/README" || die "Error removing ${PPPD_PLUGIN_DIR}/README from installation"
+
+ newinitd "${FILESDIR}"/pppoe-server.initd pppoe-server
+ newconfd "${FILESDIR}"/pppoe-server.confd pppoe-server
+}
diff --git a/net-dialup/sercd/Manifest b/net-dialup/sercd/Manifest
new file mode 100644
index 000000000000..9163892b8dfe
--- /dev/null
+++ b/net-dialup/sercd/Manifest
@@ -0,0 +1 @@
+DIST sercd-3.0.0.tar.gz 116284 BLAKE2B 9988a877d2897a2c6142e17e7a570dfa54d4ac9bee459654ca4d3bd11332639c20d292d04bcb3412b2165517bf397d99f045d9a06d0902b2496bf502744ca166 SHA512 5b9539466a26ceb7e84738347de2dcc0504462a551599c9d8b6a9b3b4bf8b4759ea9ad378c3073ef5d861effb7584e4bb4871bcd981f80ff2c8542f23952b61f
diff --git a/net-dialup/sercd/files/sercd.confd b/net-dialup/sercd/files/sercd.confd
new file mode 100644
index 000000000000..4c6e078489c4
--- /dev/null
+++ b/net-dialup/sercd/files/sercd.confd
@@ -0,0 +1,23 @@
+# sercd service configuration file
+
+# Run daemon as this user:group
+SERCD_USER=uucp:uucp
+
+# Serial port
+SERCD_DEVFILE=/dev/modem
+
+# Lock file
+SERCD_LOCKFILE=/run/lock/LCK..modem
+
+# Address on which this daemon listens on
+SERCD_ADDR=0.0.0.0
+SERCD_PORT=7000
+
+# Log level; available values are from 0 (LOG_EMERG) to 7 (LOG_DEBUG).
+SERCD_LOGLEVEL=5
+
+# Uncomment this if you want compatibility with Cisco IOS
+# SERCD_OPTS="-i"
+
+# Poll interval is in milliseconds. 0 means no polling
+SERCD_POLLINTERV=100
diff --git a/net-dialup/sercd/files/sercd.initd b/net-dialup/sercd/files/sercd.initd
new file mode 100644
index 000000000000..3022a01f1ad6
--- /dev/null
+++ b/net-dialup/sercd/files/sercd.initd
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+PIDFILE=/run/${SVCNAME}.pid
+
+depend() {
+ need net
+}
+
+start() {
+ ebegin "Starting ${SVCNAME}"
+ start-stop-daemon --start --quiet --background --make-pidfile \
+ --exec /usr/sbin/sercd --chuid ${SERCD_USER} --pidfile "${PIDFILE}" \
+ -- ${SERCD_OPTS} -p ${SERCD_PORT} -l ${SERCD_ADDR} \
+ ${SERCD_LOGLEVEL} "${SERCD_DEVFILE}" "${SERCD_LOCKFILE}" ${SERCD_POLLINTERV}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ${SVCNAME}"
+ start-stop-daemon --stop --quiet --name sercd --pidfile "${PIDFILE}"
+ eend $?
+}
diff --git a/net-dialup/sercd/files/sercd.xinetd b/net-dialup/sercd/files/sercd.xinetd
new file mode 100644
index 000000000000..8b95a3d08223
--- /dev/null
+++ b/net-dialup/sercd/files/sercd.xinetd
@@ -0,0 +1,15 @@
+# default: on
+# description: RFC 2217 compliant Telnet serial port redirector
+service sredir
+{
+ type = UNLISTED
+ flags = REUSE
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ user = uucp
+ server = /usr/sbin/sercd
+ server_args = 5 /dev/modem /run/lock/LCK..modem 100
+ port = 7000
+ disable = yes
+}
diff --git a/net-dialup/sercd/metadata.xml b/net-dialup/sercd/metadata.xml
new file mode 100644
index 000000000000..e36647e80475
--- /dev/null
+++ b/net-dialup/sercd/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <longdescription>sercd is an RFC 2217-compliant serial port redirector.
+It lets you share a serial port through network.</longdescription>
+ <upstream>
+ <remote-id type="sourceforge">sercd</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/sercd/sercd-3.0.0-r3.ebuild b/net-dialup/sercd/sercd-3.0.0-r3.ebuild
new file mode 100644
index 000000000000..730b5f321112
--- /dev/null
+++ b/net-dialup/sercd/sercd-3.0.0-r3.ebuild
@@ -0,0 +1,28 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="RFC2217-compliant serial port redirector"
+HOMEPAGE="https://sourceforge.net/projects/sercd/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="xinetd"
+
+RDEPEND="xinetd? ( virtual/inetd )"
+
+DOCS=( AUTHORS README )
+
+src_install() {
+ default
+
+ newinitd "${FILESDIR}/${PN}.initd" "${PN}"
+ newconfd "${FILESDIR}/${PN}.confd" "${PN}"
+ if use xinetd ; then
+ insinto /etc/xinetd.d
+ newins "${FILESDIR}/${PN}.xinetd" "${PN}"
+ fi
+}
diff --git a/net-dialup/speedtouch-usb/Manifest b/net-dialup/speedtouch-usb/Manifest
new file mode 100644
index 000000000000..59c3975e338e
--- /dev/null
+++ b/net-dialup/speedtouch-usb/Manifest
@@ -0,0 +1 @@
+DIST SpeedTouch330_firmware_3012.zip 769125 BLAKE2B 4f7569ab3d123837f3854af02aaf53972dca6a031fcbb7c1bd965f6b389509ff588de78488ad19a5b7f58997aaa9f53462713a7df0b0d7a05d8e77a2562ee0af SHA512 d4ec1b609eb58b15b0c569fc2c96e453517f6a8141c706f342549093c2c7bbdc09bbc3f05ecf75f3018e54f03a974b84e625fb9401f02d4f4143b721eee0b3c3
diff --git a/net-dialup/speedtouch-usb/files/README b/net-dialup/speedtouch-usb/files/README
new file mode 100644
index 000000000000..8df4e231ed3f
--- /dev/null
+++ b/net-dialup/speedtouch-usb/files/README
@@ -0,0 +1,253 @@
+Introduction
+============
+
+This ebuild enables kernel-space support for Alcatel/Thomson SpeedTouch
+USB modems, which first appeared in kernel 2.6.10.
+
+Configuration
+=============
+
+Most SpeedTouch USB modems are connected via the ATM protocol, rather
+than Ethernet. For ATM, run the following:
+ euse -E atm && emerge net-dialup/ppp net-dialup/speedtouch-usb
+
+It is necessary to choose an interface number for the connection. This
+is arbitrary - the only requirement is that the connection number is
+not already in use. The first available number is 0, and it is usual to
+choose the lowest unused number. For the purposes of this document, 0
+will be chosen.
+
+Add the following lines from the appropriate section below to
+/etc/conf.d/net, then customize them as per the inline comments.
+
+
+a) PPPoATM configuration:
+
+config_ppp0='ppp' # Runs /lib/rcscripts/net/pppd.sh
+# The 2 numbers represent the VPI & VCI of your ISP, and they are separated
+# by a dot. Choose here, or ask your ISP:
+# http://www.linux-usb.org/SpeedTouch/faq/index.html#q12
+link_ppp0='0.38'
+plugins_ppp0='pppoa'
+# 'man pppd' shows other options. Compression is disabled because it is
+# rarely taken advantage of, and may interfere with the connection.
+# Add option 'usepeerdns' to populate /etc/resolv.conf
+pppd_ppp0='updetach noauth debug defaultroute noaccomp nobsdcomp noccp
+ nodeflate nopcomp novj novjccomp child-timeout 60'
+username_ppp0='username@isp.com' # ADSL login, assigned by your ISP
+password_ppp0='password' # ADSL password, assigned by your ISP
+
+# If the kernel modules are not built-in, then they must be loaded
+# before starting the PPP daemon:
+function preup() {
+ if [[ "$1" = "ppp0" ]] ; then
+ modprobe -q speedtch
+ return 0
+ fi
+}
+
+
+b) PPPoE configuration:
+
+# Configure first the RFC2684 bridge interface
+config_nas0='null'
+# Use "-e 0" for LLC mux or "-e 1" for VC mux.
+# The 2 numbers after "-a" represent the VPI & VCI of your ISP, and
+# they are separated by a dot. Ask your ISP about those numbers.
+br2684ctl_nas0='-e 0 -a 0.38'
+
+config_ppp0='ppp' # Runs /lib/rcscripts/net/pppd.sh
+link_ppp0='nas0' # The name of the RFC2684 bridge interface
+plugins_ppp0='pppoe'
+# 'man pppd' shows other options. Compression is disabled because it is
+# rarely taken advantage of, and may interfere with the connection.
+# Add option 'usepeerdns' to populate /etc/resolv.conf
+pppd_ppp0='updetach noauth debug defaultroute noaccomp nobsdcomp noccp
+ nodeflate nopcomp novj novjccomp child-timeout 60'
+username_ppp0='username@isp.com' # ADSL login, assigned by your ISP
+password_ppp0='password' # ADSL password, assigned by your ISP
+
+depend_ppp0() {
+ need net.nas0
+}
+
+# If the kernel modules are not built-in, then they must be loaded
+# before starting the RFC2684 bridge:
+function preup() {
+ if [[ "$1" = "nas0" ]] ; then
+ modprobe -q speedtch
+ return 0
+ fi
+}
+
+
+
+Configuration continued
+=======================
+
+Create a symlink for the new network interface, for it to be enabled by
+baselayout:
+ cd /etc/init.d && ln -sfn net.lo net.ppp0
+If you use PPPoE, you should also create the symlink for the RFC2684
+bridge interface:
+ cd /etc/init.d && ln -sfn net.lo net.nas0
+
+The "debug" option adds some extra commentary from pppd regarding the
+connection to /var/log/messages, e.g.:
+"sent [LCP ConfReq id=0x1 <magic 0x7bea6ef1>]". It is wise to keep the
+option on permanently, due to its usefulness when debugging.
+
+Set RC_NET_STRICT_CHECKING="yes" in /etc/conf.d/rc, to prevent Internet
+services in /etc/init.d/ from starting before the Internet connection
+is established. Other options are to start/stop programs in
+/etc/ppp/ip-{up,down}.local, and to customize initscript dependencies
+as described in:
+ http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=4
+
+
+Starting the Connection
+=======================
+
+To start manually, with the modem connected:
+ /etc/init.d/net.ppp0 start
+
+To start automatically when the PC boots:
+ rc-update add net.ppp0 default
+
+
+Kernel Configuration
+====================
+
+The ebuild, during an emerge, checks that the required kernel modules
+are present.
+
+Note that in the list below, "[*]" means that the option is compiled
+into the kernel, whereas "[M]" means that the option can either be
+compiled into the kernel, or as a module. Compiling them into the
+kernel is recommended, to guarantee that the modules are already loaded
+when they are needed, and it will improve the bootup time by a couple
+of seconds.
+
+In "make menuconfig", you can press "/" and search on e.g. "speedtouch"
+to see exactly where an option is - the location of an option and its
+dependencies can change between kernel versions.
+
+Check that the following kernel options are configured as shown (this
+list includes the prerequisites, e.g. USB_SPEEDTOUCH depends on USB):
+
+ Code maturity level options --->
+ [*] Prompt for development and/or incomplete code/drivers
+ - CONFIG_EXPERIMENTAL
+
+ General setup --->
+ [*] Kernel Userspace Events - CONFIG_KOBJECT_UEVENT
+ (for kernels < 2.6.16 *ONLY*)
+
+ Device Drivers --->
+ Generic Driver Options --->
+ [ ] Select only drivers that don't need compile-time external
+ firmware (*unselected*) - CONFIG_STANDALONE
+ [*] Hotplug firmware loading support - CONFIG_FW_LOADER
+
+ Networking --->
+ [*] Networking support - CONFIG_NET
+ Networking options --->
+ [*] Packet socket - CONFIG_PACKET
+ [M] Asynchronous Transfer Mode (ATM) - CONFIG_ATM
+ [M] RFC1483/2684 Bridged protocols - CONFIG_ATM_BR2684 (only needed for PPPoE)
+
+ Device Drivers --->
+ Network device support --->
+ [*] Network device support - CONFIG_NETDEVICES
+ [*] PPP (point-to-point protocol) support - CONFIG_PPP
+ [M] PPP Deflate compression - CONFIG_PPP_DEFLATE (only useful if
+ compression is supported - rare)
+ [M] PPP BSD-Compress compression - CONFIG_PPP_BSDCOMP (only useful
+ if compression is supported - rare)
+ [M] PPP over Ethernet - CONFIG_PPPOE (only needed for PPPoE)
+ [M] PPP over ATM - CONFIG_PPPOATM (only needed for PPPoATM)
+ USB support --->
+ [*] Support for Host-side USB - CONFIG_USB
+ [*] USB device filesystem - CONFIG_USB_DEVICEFS
+ [M] (O or U)HCI HCD support
+ USB DSL modem support --->
+ [M] USB DSL modem support - CONFIG_USB_ATM
+ [M] Speedtouch USB support - CONFIG_USB_SPEEDTOUCH
+
+
+
+Troubleshooting
+===============
+
+Try "emerge speedtouch-usb" again, because the ebuild checks that the
+required kernel modules are present (showing a warning message if
+appropriate), and creates the firmware files and symlinks in
+/lib/firmware/
+
+If the modem is unresponsive, then run "/etc/init.d/net.ppp0 stop" and
+unplug the modem for 30 seconds, to drain its memory. Then reconnect
+the modem to the PC and run "/etc/init.d/net.ppp0 start"
+
+To check the modem's connection progress, run:
+ tail -f /var/log/messages
+/var/log/messages should show e.g.:
+
+usb n-n: new full speed USB device using xxxx_hcd and address n
+usb n-n: found stage 1 firmware speedtch-1.bin
+usb n-n: found stage 2 firmware speedtch-2.bin
+pppd[nnn]: Plugin pppoatm.so loaded.
+pppd[nnn]: pppd n.n.n started by root, uid 0
+pppd[nnn]: Using interface ppp0
+pppd[nnn]: Connect: ppp0 <--> n.nn
+ADSL line is synchronising
+DSL line goes up
+ADSL line is up (nnn Kib/s down | nnn Kib/s up)
+pppd[nnn]: CHAP authentication succeeded
+pppd[nnn]: local IP address nnn.nnn.nnn.nnn
+pppd[nnn]: remote IP address nnn.nnn.nnn.nnn
+
+
+If the authentification fails, then check username_ppp0 and
+password_ppp0.
+
+If the ADSL connection is not established, then check the options in
+pppd_ppp0. "man pppd" explains all the options in that file.
+
+If the ADSL connection seems to have worked, but no websites can be
+contacted, then check that /etc/resolv.conf is populated, and possibly
+add the "usepeerdns" option (to use the ISP's DNS) to pppd_ppp0 in
+/etc/conf.d/net .
+
+If the problem is still not resolved, post to the Gentoo Forums
+at http://forums.gentoo.org/. If there is no answer, then
+file a bug at http://bugs.gentoo.org/ .
+
+
+Compression
+===========
+
+Some ISPs require compression to be disabled in order for the
+connection to work, so the default configuration described above
+disables compression. Few ISPs support ADSL compression anyway. If you
+are lucky enough to have an ISP which *does* support compression
+(Google is your best friend for determining this), then compression can
+be enabled by following these steps:
+
+* Compile the kernel modules CONFIG_PPP_DEFLATE and CONFIG_PPP_BSDCOMP
+(only one is strictly necessary - pppd prefers "deflate" compression).
+Add them to /etc/modules.autoload.d/kernel-2.6 or /etc/conf.d/net above
+the "pppoatm" line, if they are not built-in.
+* Remove the following options in pppd_ppp0:
+ noaccomp nobsdcomp noccp nodeflate nopcomp novj novjccomp
+* Ensure that "debug" is in the pppd_ppp0 options, to check that
+compression is being utilized. Note that "module registered" in
+/var/log/messages only confirms that the kernel module is loaded -
+it does not indicate that the connection is compressed.
+
+
+Links
+=====
+
+SpeedTouch ebuilds: https://packages.gentoo.org/packages/search?q=speedtouch
+SpeedTouch hardware: http://www.speedtouch.com/support.htm
+SpeedTouch firmware: http://www.speedtouch.com/driver_upgrade_lx_3.0.1.2.htm
diff --git a/net-dialup/speedtouch-usb/metadata.xml b/net-dialup/speedtouch-usb/metadata.xml
new file mode 100644
index 000000000000..85e4ed814fa2
--- /dev/null
+++ b/net-dialup/speedtouch-usb/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<!-- maintainer-needed -->
+</pkgmetadata>
diff --git a/net-dialup/speedtouch-usb/speedtouch-usb-3.0.1.2-r4.ebuild b/net-dialup/speedtouch-usb/speedtouch-usb-3.0.1.2-r4.ebuild
new file mode 100644
index 000000000000..1431187f2355
--- /dev/null
+++ b/net-dialup/speedtouch-usb/speedtouch-usb-3.0.1.2-r4.ebuild
@@ -0,0 +1,75 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo linux-info optfeature
+
+DESCRIPTION="Firmware and configuration instructions for Alcatel SpeedTouch USB modems"
+HOMEPAGE="http://www.speedtouch.com/"
+SRC_URI="http://www.speedtouch.com/download/drivers/USB/SpeedTouch330_firmware_${PV//./}.zip"
+S=${WORKDIR}
+
+# Taken from http://www.speedtouch.com/driver_upgrade_lx_3.0.1.2.htm
+LICENSE="SpeedTouch-USB-Firmware"
+SLOT="0"
+KEYWORDS="~amd64 x86"
+
+RDEPEND="net-dialup/ppp"
+BDEPEND="app-arch/unzip"
+
+pkg_pretend() {
+ if [[ ${MERGE_TYPE} != buildonly ]]; then
+ local CONFIG_CHECK="~FW_LOADER ~NET ~PACKET ~ATM ~NETDEVICES ~USB_DEVICEFS ~USB_ATM ~USB_SPEEDTOUCH \
+ ~PPP ~PPPOATM ~PPPOE ~ATM_BR2684"
+ local WARNING_PPPOATM="CONFIG_PPPOATM:\t is not set (required for PPPoA links)"
+ local WARNING_PPPOE="CONFIG_PPPOE:\t is not set (required for PPPoE links)"
+ local WARNING_ATM_BR2684="CONFIG_ATM_BR2684:\t is not set (required for PPPoE links)"
+ check_extra_config
+ fi
+}
+
+src_compile() {
+ local VER=$(ver_rs 2-4 '') # {major_ver}.{minor_digits}
+
+ # Extract the "stage 1" portion of the firmware
+ edob -m "Extraction of stage 1 firmware (step 1)" \
+ dd if=KQD6_${VER} of="${T}/speedtch-1.bin.2" ibs=1 obs=991 count=991 skip=36
+ edob -m "Extraction of stage 1 firmware (step 2)" \
+ dd if=ZZZL_${VER} of="${T}/speedtch-1.bin.4" ibs=1 obs=935 count=935 skip=32
+
+ # Extract the "stage 2" portion of the firmware
+ edob -m "Extraction of stage 2 firmware (step 1)" \
+ dd if=KQD6_${VER} of="${T}/speedtch-2.bin.2" ibs=1 obs=762650 count=762650 skip=1027
+ edob -m "Extraction of stage 2 firmware (step 2)" \
+ dd if=ZZZL_${VER} of="${T}/speedtch-2.bin.4" ibs=1 obs=775545 count=775545 skip=967
+}
+
+src_install() {
+ # Copy to the firmware directory
+ insinto /lib/firmware
+ insopts -m 600
+ doins "${T}"/speedtch-{1,2}.bin.{2,4}
+
+ # Symlinks for other revisions of the modem
+ for n in 1 2 ; do
+ dosym speedtch-${n}.bin.2 /lib/firmware/speedtch-${n}.bin.0
+ dosym speedtch-${n}.bin.2 /lib/firmware/speedtch-${n}.bin.1
+ # Seems like a reasonable guess, for revision 3
+ dosym speedtch-${n}.bin.4 /lib/firmware/speedtch-${n}.bin.3
+ done
+
+ # Documentation necessary to complete the setup
+ dodoc "${FILESDIR}/README"
+}
+
+pkg_postinst() {
+ [[ -e /etc/hotplug/usb.usermap ]] && grep -E -q " 0x06[bB]9 +0x4061 " /etc/hotplug/usb.usermap && \
+ ewarn "Please remove the SpeedTouch line from /etc/hotplug/usb.usermap"
+
+ optfeature "connecting via PPPoA protocol" "net-dialup/ppp[atm]"
+ optfeature "connecting via PPPoE protocol" "net-dialup/linux-atm"
+
+ ewarn "To complete the installation, you must read the documentation in"
+ ewarn " ${ROOT}/usr/share/doc/${PF}"
+}
diff --git a/net-dialup/syncterm/Manifest b/net-dialup/syncterm/Manifest
new file mode 100644
index 000000000000..02af807d11b0
--- /dev/null
+++ b/net-dialup/syncterm/Manifest
@@ -0,0 +1 @@
+DIST syncterm-1.1-src.tgz 18270212 BLAKE2B 91043a31374d73d29a447ab425007aad95ee7d22ded3ea4a518c1fa05958b5f20a4a83df9f575e9cb3962301cc31b55ab876e96addd617e045627d34e56fd922 SHA512 b5280e8f64ce12101f810dbee38a113e03450356a1fbc46a7c63a57eb8ca382e99ec1586b0a3527e336c9725efedae2ce80c5d4b372456eba1f090ec0f8c80eb
diff --git a/net-dialup/syncterm/files/syncterm-1.1_disable-parallel-build.patch b/net-dialup/syncterm/files/syncterm-1.1_disable-parallel-build.patch
new file mode 100644
index 000000000000..2c77ba1c1de7
--- /dev/null
+++ b/net-dialup/syncterm/files/syncterm-1.1_disable-parallel-build.patch
@@ -0,0 +1,16 @@
+Disable parallel make jobs so that `st_crypt.h` can find `<cryptlib.h>`.
+As of writing, I have no idea how to fix this otherwise.
+
+From: Seth M. Price <sprice623@aol.com>
+
+--- a/src/syncterm/GNUmakefile
++++ b/src/syncterm/GNUmakefile
+@@ -96,6 +96,8 @@ ifndef bcc
+ endif
+ endif
+
++.NOTPARALLEL:
++
+ $(MTOBJODIR)$(DIRSEP)ciolib_res$(OFILE):
+ cd ${MTOBJODIR} && $(AR) -x ../${CIOLIB-MT} ciolib_res$(OFILE)
+
diff --git a/net-dialup/syncterm/files/syncterm-1.1_do-not-strip-3rdp-test.patch b/net-dialup/syncterm/files/syncterm-1.1_do-not-strip-3rdp-test.patch
new file mode 100644
index 000000000000..d5ef4bfb2d1a
--- /dev/null
+++ b/net-dialup/syncterm/files/syncterm-1.1_do-not-strip-3rdp-test.patch
@@ -0,0 +1,40 @@
+Remove an unnecessary direct call to `strip` found in some sort
+of test/check for an included dependency.
+
+From: Seth M. Price <sprice623@aol.com>
+Bug: https://bugs.gentoo.org/933185
+Depends: syncterm-1.1_use-sched-yield-instead-of-pthread-yield.patch
+
+--- a/3rdp/build/GNUmakefile
++++ b/3rdp/build/GNUmakefile
+@@ -67,7 +67,7 @@ $(CRYPT_SRC): | $(3RDPSRCDIR)
+ $(CRYPT_IDIR): | $(3RDPODIR)
+ $(QUIET)$(IFNOTEXIST) mkdir $(CRYPT_IDIR)
+
+-$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-linux-yield.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
++$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-linux-yield.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-strip.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
+ @echo Creating $@ ...
+ $(QUIET)-rm -rf $(CRYPT_SRC)/*
+ $(QUIET)unzip -oa $(3RDPDISTDIR)$(DIRSEP)cryptlib.zip -d $(CRYPT_SRC)
+@@ -113,6 +113,7 @@ $(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)b
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-just-use-cc.patch
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-learn-numbers.patch
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-linux-yield.patch
++ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-no-strip.patch
+ ifeq ($(CC),mingw32-gcc)
+ $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
+ $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
+
+--- /dev/null
++++ b/3rdp/build/cl-no-strip.patch
+@@ -0,0 +1,10 @@
++--- tools/ccopts.sh
+++++ tools/ccopts.sh
++@@ -48,7 +48,6 @@ if [ ! -s ./tools/endian ] ; then
++ else
++ $CC ./tools/endian.c -o ./tools/endian > /dev/null ;
++ fi ;
++- strip tools/endian ;
++ if [ ! -s ./tools/endian ] ; then
++ echo "Couldn't build endianness-checking program ./tools/endian" >&2 ;
++ exit 1 ;
diff --git a/net-dialup/syncterm/files/syncterm-1.1_respect-toolchain-variables.patch b/net-dialup/syncterm/files/syncterm-1.1_respect-toolchain-variables.patch
new file mode 100644
index 000000000000..309122197a5b
--- /dev/null
+++ b/net-dialup/syncterm/files/syncterm-1.1_respect-toolchain-variables.patch
@@ -0,0 +1,89 @@
+Respect CFLAGS, AR and other environment variables when building
+cryptlib.
+
+From: Seth M. Price <sprice623@aol.com>
+Bug: https://bugs.gentoo.org/933184
+Depends: syncterm-1.1_do-not-strip-3rdp-test.patch
+
+--- a/3rdp/build/GNUmakefile
++++ b/3rdp/build/GNUmakefile
+@@ -67,7 +67,7 @@ $(CRYPT_SRC): | $(3RDPSRCDIR)
+ $(CRYPT_IDIR): | $(3RDPODIR)
+ $(QUIET)$(IFNOTEXIST) mkdir $(CRYPT_IDIR)
+
+-$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-linux-yield.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-strip.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
++$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-linux-yield.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-strip.patch $(3RDP_ROOT)$(DIRSEP)build/cl-respect-env-vars.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
+ @echo Creating $@ ...
+ $(QUIET)-rm -rf $(CRYPT_SRC)/*
+ $(QUIET)unzip -oa $(3RDPDISTDIR)$(DIRSEP)cryptlib.zip -d $(CRYPT_SRC)
+@@ -114,6 +114,7 @@ $(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)b
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-learn-numbers.patch
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-linux-yield.patch
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-no-strip.patch
++ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-respect-env-vars.patch
+ ifeq ($(CC),mingw32-gcc)
+ $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
+ $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
+
+--- /dev/null
++++ b/3rdp/build/cl-respect-env-vars.patch
+@@ -0,0 +1,59 @@
++--- makefile
+++++ makefile
++@@ -90,16 +90,16 @@ DYLIBNAME = lib$(PROJ).$(MAJ).$(MIN).dylib
++ # Further cc flags are gathered dynamically at runtime via the ccopts.sh
++ # script.
++
++-CFLAGS = -c -D__UNIX__ -DNDEBUG -I.
+++CFLAGS += -c -D__UNIX__ -I. -DNDEBUG
++ CFLAGS_DEBUG = -c -D__UNIX__ -I. -g -O1
++-CFLAGS_DEBUGGCC = -c -D__UNIX__ -I. -ggdb3 -fno-omit-frame-pointer -O1
++-CFLAGS_ANALYSE = -c -D__UNIX__ -I.
++-CFLAGS_COVERAGE = -c -D__UNIX__ -I. -ggdb3 -fno-omit-frame-pointer -O1 --coverage -fprofile-arcs -ftest-coverage
++-CFLAGS_FUZZ = -c -D__UNIX__ -I. -ggdb3 -fno-omit-frame-pointer -funwind-tables -fsanitize=address -O1 -DCONFIG_FUZZ
++-CFLAGS_LIBFUZZER = -c -D__UNIX__ -I. -g -fno-omit-frame-pointer -fsanitize=fuzzer,address,undefined -O1 -DCONFIG_FUZZ -DCONFIG_LIBFUZZER
++-CFLAGS_HONGGFUZZ = -c -D__UNIX__ -I. -g -fno-omit-frame-pointer -O1 -DCONFIG_FUZZ -DCONFIG_LIBFUZZER
++-CFLAGS_UBSAN = -c -D__UNIX__ -I. -ggdb3 -fno-omit-frame-pointer -funwind-tables -fsanitize=undefined -fsanitize-blacklist=ubsan_blacklist.txt -O1
++-CFLAGS_VALGRIND = -c -D__UNIX__ -I. -ggdb3 -fno-omit-frame-pointer -O1
+++CFLAGS_DEBUGGCC = $(CFLAGS) -ggdb3 -fno-omit-frame-pointer -O1
+++CFLAGS_ANALYSE = $(CFLAGS)
+++CFLAGS_COVERAGE = $(CFLAGS) -ggdb3 -fno-omit-frame-pointer -O1 --coverage -fprofile-arcs -ftest-coverage
+++CFLAGS_FUZZ = $(CFLAGS) -ggdb3 -fno-omit-frame-pointer -funwind-tables -fsanitize=address -O1 -DCONFIG_FUZZ
+++CFLAGS_LIBFUZZER = $(CFLAGS) -g -fno-omit-frame-pointer -fsanitize=fuzzer,address,undefined -O1 -DCONFIG_FUZZ -DCONFIG_LIBFUZZER
+++CFLAGS_HONGGFUZZ = $(CFLAGS) -g -fno-omit-frame-pointer -O1 -DCONFIG_FUZZ -DCONFIG_LIBFUZZER
+++CFLAGS_UBSAN = $(CFLAGS) -ggdb3 -fno-omit-frame-pointer -funwind-tables -fsanitize=undefined -fsanitize-blacklist=ubsan_blacklist.txt -O1
+++CFLAGS_VALGRIND = $(CFLAGS) -ggdb3 -fno-omit-frame-pointer -O1
++
++ # Paths and command names. We have to be careful with comments attached to
++ # path defines because some makes don't strip trailing spaces.
++@@ -115,9 +115,6 @@ STATIC_OBJ_PATH = $(STATIC_OBJ_DIR)/
++ SHARED_OBJ_PATH = $(SHARED_OBJ_DIR)/
++ CPP = $(CC) -E
++ LD = $(CC)
++-MAKE = make
++-AR = ar
++-STRIP = strip
++ SHELL = /bin/sh
++ OSNAME = `uname`
++ LINKFILE = link.tmp
++
++--- tools/buildall.sh
+++++ tools/buildall.sh
++@@ -195,13 +195,13 @@ fi
++ # we add an extra character to the comparison string to avoid syntax errors.
++
++ if [ $ANALYSE -gt 0 ] ; then
++- CFLAGS="$(./tools/ccopts.sh analyse $CC $OSNAME)" ;
+++ CFLAGS="$CFLAGS $(./tools/ccopts.sh analyse $CC $OSNAME)" ;
++ elif [ $ISSPECIAL -gt 0 ] ; then
++- CFLAGS="$(./tools/ccopts.sh special $CC $OSNAME)" ;
+++ CFLAGS="$CFLAGS $(./tools/ccopts.sh special $CC $OSNAME)" ;
++ elif [ $SHARED -gt 0 ] ; then
++- CFLAGS="$(./tools/ccopts.sh shared $CC $OSNAME)" ;
+++ CFLAGS="$CFLAGS $(./tools/ccopts.sh shared $CC $OSNAME)" ;
++ else
++- CFLAGS="$(./tools/ccopts.sh $CC $OSNAME)" ;
+++ CFLAGS="$CFLAGS $(./tools/ccopts.sh $CC $OSNAME)" ;
++ fi
++ if [ '$(CFLAGS)x' = 'x' ] ; then
++ echo "$0: Couldn't get compiler flags via tools/ccopts.sh." >&2 ;
diff --git a/net-dialup/syncterm/files/syncterm-1.1_use-sched-yield-instead-of-pthread-yield.patch b/net-dialup/syncterm/files/syncterm-1.1_use-sched-yield-instead-of-pthread-yield.patch
new file mode 100644
index 000000000000..630ba0ca5c13
--- /dev/null
+++ b/net-dialup/syncterm/files/syncterm-1.1_use-sched-yield-instead-of-pthread-yield.patch
@@ -0,0 +1,41 @@
+Use `sched_yield()` instead of nonstandard `pthread_yield()`.
+Fixes compiler error.
+
+From: Rob Swindell <rob@synchro.net>
+From: Seth M. Price <sprice623@aol.com>
+Bug: https://gitlab.synchro.net/main/sbbs/-/issues/299
+
+--- a/3rdp/build/GNUmakefile
++++ b/3rdp/build/GNUmakefile
+@@ -67,7 +67,7 @@ $(CRYPT_SRC): | $(3RDPSRCDIR)
+ $(CRYPT_IDIR): | $(3RDPODIR)
+ $(QUIET)$(IFNOTEXIST) mkdir $(CRYPT_IDIR)
+
+-$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
++$(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)build/terminal-params.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw32-static.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ranlib.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-noasm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zz-country.patch $(3RDP_ROOT)$(DIRSEP)build/cl-algorithms.patch $(3RDP_ROOT)$(DIRSEP)build/cl-allow-duplicate-ext.patch $(3RDP_ROOT)$(DIRSEP)build/cl-macosx-minver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-endian.patch $(3RDP_ROOT)$(DIRSEP)build/cl-cryptodev.patch $(3RDP_ROOT)$(DIRSEP)build/cl-posix-me-gently.patch $(3RDP_ROOT)$(DIRSEP)build/cl-tpm-linux.patch $(3RDP_ROOT)$(DIRSEP)build/cl-PAM-noprompts.patch $(3RDP_ROOT)$(DIRSEP)build/cl-zlib.patch $(3RDP_ROOT)$(DIRSEP)build/Dynamic-linked-static-lib.patch $(3RDP_ROOT)$(DIRSEP)build/SSL-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bigger-maxattribute.patch $(3RDP_ROOT)$(DIRSEP)build/cl-vcxproj.patch $(3RDP_ROOT)$(DIRSEP)build/cl-mingw-vcver.patch $(3RDP_ROOT)$(DIRSEP)build/cl-win32-build-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-gcc-non-const-time-val.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-odbc.patch $(3RDP_ROOT)$(DIRSEP)build/cl-noasm-defines.patch $(3RDP_ROOT)$(DIRSEP)build/cl-bn-noasm64-fix.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-RSA-suites.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ECC-RSA.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC.patch $(3RDP_ROOT)$(DIRSEP)build/cl-prefer-ECC-harder.patch $(3RDP_ROOT)$(DIRSEP)build/cl-more-RSA-ECC-fixes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-DH-key-init.patch $(3RDP_ROOT)$(DIRSEP)build/cl-clear-GCM-flag.patch $(3RDP_ROOT)$(DIRSEP)build/cl-use-ssh-ctr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-list-ctr-modes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssh-incCtr.patch $(3RDP_ROOT)$(DIRSEP)build/cl-ssl-suite-blocksizes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-tpm.patch $(3RDP_ROOT)$(DIRSEP)build/cl-no-via-aes.patch $(3RDP_ROOT)$(DIRSEP)build/cl-fix-ssh-ecc-ephemeral.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-just-use-cc.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-learn-numbers.patch $(3RDP_ROOT)$(DIRSEP)/build/cl-linux-yield.patch | $(CRYPT_SRC) $(CRYPT_IDIR)
+ @echo Creating $@ ...
+ $(QUIET)-rm -rf $(CRYPT_SRC)/*
+ $(QUIET)unzip -oa $(3RDPDISTDIR)$(DIRSEP)cryptlib.zip -d $(CRYPT_SRC)
+@@ -112,6 +112,7 @@ $(CRYPTLIB_BUILD): $(3RDP_ROOT)$(DIRSEP)dist/cryptlib.zip $(3RDP_ROOT)$(DIRSEP)b
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-fix-ssh-ecc-ephemeral.patch
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-just-use-cc.patch
+ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-learn-numbers.patch
++ $(QUIET)patch -p0 -d $(CRYPT_SRC) < cl-linux-yield.patch
+ ifeq ($(CC),mingw32-gcc)
+ $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make directories
+ $(QUIET)cd $(CRYPT_SRC) && env - PATH="$(PATH)" CC="$(CC)" AR="$(AR)" RANLIB="$(RANLIB)" make toolscripts
+
+--- /dev/null
++++ b/3rdp/build/cl-linux-yield.patch
+@@ -0,0 +1,11 @@
++--- old/thread.h 2021-10-19 12:34:08.766649958 -0700
+++++ kernel/thread.h 2021-10-19 12:34:43.794072316 -0700
++@@ -3005,7 +3005,7 @@
++ #endif /* Slowaris 5.7 / 7.x or newer */
++ #elif defined( _AIX ) || defined( __Android__ ) || defined( __CYGWIN__ ) || \
++ ( defined( __hpux ) && ( OSVERSION >= 11 ) ) || \
++- defined( __NetBSD__ ) || defined( __QNX__ ) || defined( __UCLIBC__ )
+++ defined( __NetBSD__ ) || defined( __QNX__ ) || defined( __UCLIBC__ ) || defined(__linux__)
++ #define THREAD_YIELD() sched_yield()
++ #elif defined( __XMK__ )
++ /* The XMK underlying scheduling object is the process context, for which
diff --git a/net-dialup/syncterm/metadata.xml b/net-dialup/syncterm/metadata.xml
new file mode 100644
index 000000000000..00b56688b09c
--- /dev/null
+++ b/net-dialup/syncterm/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <name>Seth M. Price</name>
+ <email>sprice623@aol.com</email>
+ </maintainer>
+ <longdescription lang="en">
+ A cross-platform ANSI-BBS terminal designed to connect to
+ remote BBSs via telnet, rlogin, or SSH. Supports ANSI music
+ and the IBM charset when possible. Will run from a console,
+ under X11 using XLib, or using SDL.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://sourceforge.net/p/syncterm/tickets/</bugs-to>
+ <remote-id type="sourceforge">syncterm</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/syncterm/syncterm-1.1.ebuild b/net-dialup/syncterm/syncterm-1.1.ebuild
new file mode 100644
index 000000000000..8af4bf8708e8
--- /dev/null
+++ b/net-dialup/syncterm/syncterm-1.1.ebuild
@@ -0,0 +1,54 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop toolchain-funcs
+
+DESCRIPTION="BBS (bulletin board system) terminal"
+HOMEPAGE="https://syncterm.bbsdev.net/"
+SRC_URI="https://sourceforge.net/projects/syncterm/files/syncterm/syncterm-${PV}/syncterm-${PV}-src.tgz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="ncurses sdl X"
+
+DEPEND="ncurses? ( sys-libs/ncurses )
+ sdl? ( media-libs/libsdl2 )
+ X? ( x11-libs/libX11 )"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ tc-export AR STRIP
+ eapply "${FILESDIR}/${P}_use-sched-yield-instead-of-pthread-yield.patch"
+ eapply "${FILESDIR}/${P}_do-not-strip-3rdp-test.patch"
+ eapply "${FILESDIR}/${P}_disable-parallel-build.patch"
+ eapply "${FILESDIR}/${P}_respect-toolchain-variables.patch"
+ eapply_user
+}
+
+src_compile() {
+ # FIXME: probably bad form
+ cd "${S}/src/syncterm"
+
+ # NOTE: build system automatically detects whether
+ # optional dependencies are there, strangely
+
+ emake
+ emake syncterm.man
+
+ # doman complains about wrong filename otherwise
+ cp syncterm.man syncterm.1
+}
+
+src_install() {
+ # Regular ‘emake install’ violates policy in multiple ways
+ dobin src/syncterm/gcc.linux.x64.exe.debug/syncterm
+ doicon src/syncterm/syncterm.png
+ domenu src/syncterm/syncterm.desktop
+ doman src/syncterm/syncterm.1
+
+ # Things not installed by ‘emake install’
+ dodoc src/syncterm/CHANGES
+}
diff --git a/net-dialup/syncterm/syncterm-9999.ebuild b/net-dialup/syncterm/syncterm-9999.ebuild
new file mode 100644
index 000000000000..af31be2acdb8
--- /dev/null
+++ b/net-dialup/syncterm/syncterm-9999.ebuild
@@ -0,0 +1,44 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit git-r3 desktop
+
+DESCRIPTION="BBS (bulletin board system) terminal"
+HOMEPAGE="https://syncterm.bbsdev.net/"
+EGIT_REPO_URI="https://gitlab.synchro.net/main/sbbs"
+
+LICENSE="GPL-2+"
+SLOT="0"
+IUSE="ncurses sdl X"
+
+DEPEND="ncurses? ( sys-libs/ncurses )
+ sdl? ( media-libs/libsdl2 )
+ X? ( x11-libs/libX11 )"
+RDEPEND="${DEPEND}"
+
+src_compile() {
+ # FIXME: probably bad form
+ cd "${S}/src/syncterm"
+
+ # NOTE: build system automatically detects whether
+ # optional dependencies are there, strangely
+
+ emake
+ emake syncterm.man
+
+ # doman complains about wrong filename otherwise
+ cp syncterm.man syncterm.1
+}
+
+src_install() {
+ # Regular ‘emake install’ violates policy in multiple ways
+ dobin src/syncterm/gcc.linux.x64.exe.debug/syncterm
+ doicon src/syncterm/syncterm.png
+ domenu src/syncterm/syncterm.desktop
+ doman src/syncterm/syncterm.1
+
+ # Things not installed by ‘emake install’
+ dodoc src/syncterm/CHANGES
+}
diff --git a/net-dialup/tcpser/Manifest b/net-dialup/tcpser/Manifest
new file mode 100644
index 000000000000..982ac4d76bb6
--- /dev/null
+++ b/net-dialup/tcpser/Manifest
@@ -0,0 +1 @@
+DIST tcpser-1.1.4.tar.gz 111605 BLAKE2B bc45e6c5870f9ba5bd84cb36721c4833d869ec180491cb0f1cbd1c71fff6b0e5fa60a0864ad055f0e6e840bd7b570b99ffe918c166fdf0e79b6ab7964161d3db SHA512 08b80984b30b8a56fe9fb6690e7d82827b3d9d191e13094a040334e20edd9669b0098abad66d5022a1e022ef95bcea236123c791f7f84948420dfca10e449d4a
diff --git a/net-dialup/tcpser/files/tcpser-1.1.4_dont-hardcode-cflags-and-ldflags.patch b/net-dialup/tcpser/files/tcpser-1.1.4_dont-hardcode-cflags-and-ldflags.patch
new file mode 100644
index 000000000000..14246d31fc33
--- /dev/null
+++ b/net-dialup/tcpser/files/tcpser-1.1.4_dont-hardcode-cflags-and-ldflags.patch
@@ -0,0 +1,17 @@
+Don’t hardcode CFLAGS and LDFLAGS into Makefile.
+
+From: Seth M. Price <sprice623@aol.com>
+
+--- a/Makefile
++++ b/Makefile
+@@ -3,8 +3,8 @@ SRCS = $(SRC)/bridge.c $(SRC)/debug.c $(SRC)/getcmd.c $(SRC)/ip.c $(SRC)/init.c
+ OBJS = $(SRC)/bridge.o $(SRC)/debug.o $(SRC)/getcmd.o $(SRC)/ip.o $(SRC)/init.o $(SRC)/modem_core.o $(SRC)/nvt.o $(SRC)/serial.o $(SRC)/ip232.o $(SRC)/util.o $(SRC)/phone_book.o $(SRC)/tcpser.o $(SRC)/dce.o $(SRC)/line.o
+ CC ?= gcc
+ DEF =
+-CFLAGS = -O $(DEF) -Wall
+-LDFLAGS = -lpthread
++CFLAGS +=
++LDFLAGS += -lpthread
+ DEPEND = makedepend $(DEF) $(CFLAGS)
+
+ all: tcpser
diff --git a/net-dialup/tcpser/metadata.xml b/net-dialup/tcpser/metadata.xml
new file mode 100644
index 000000000000..638cb98495ac
--- /dev/null
+++ b/net-dialup/tcpser/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <name>Seth M. Price</name>
+ <email>sprice623@aol.com</email>
+ </maintainer>
+ <longdescription lang="en">
+ TCPSER turns a PC serial port into an emulated Hayes compatible
+ modem that uses TCP/IP for incoming and outgoing connections.
+ It can be used to allow older applications and systems designed
+ for modem use to operate on the Internet. TCPSER supports all
+ standard Hayes commands, and understands extended and vendor
+ proprietary commands (though it does not implement many of
+ them). TCPSER can be used for both inbound and outbound
+ connections.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/go4retro/tcpser/issues</bugs-to>
+ <remote-id type="github">go4retro/tcpser</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/tcpser/tcpser-1.1.4.ebuild b/net-dialup/tcpser/tcpser-1.1.4.ebuild
new file mode 100644
index 000000000000..405bde7cb86f
--- /dev/null
+++ b/net-dialup/tcpser/tcpser-1.1.4.ebuild
@@ -0,0 +1,27 @@
+# Copyright 2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Hayes Smartmodem emulator over TCP/IP"
+HOMEPAGE="https://github.com/go4retro/tcpser"
+SRC_URI="https://github.com/go4retro/tcpser/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+src_compile() {
+ # Fix CR-LF incompatibility with patch
+ eapply --binary "${FILESDIR}/${P}_dont-hardcode-cflags-and-ldflags.patch"
+
+ make all CC=$(tc-getCC)
+}
+
+src_install() {
+ dobin tcpser
+ doman man/tcpser.1
+ dodoc README.md
+}
diff --git a/net-dialup/tio/Manifest b/net-dialup/tio/Manifest
new file mode 100644
index 000000000000..40c4df1f14f0
--- /dev/null
+++ b/net-dialup/tio/Manifest
@@ -0,0 +1 @@
+DIST tio-3.9.tar.xz 3460500 BLAKE2B eee634fb540a2910706d9aec686e386727cc665bff9d5febe438e08a38d2df3c2faab64bc9e87757caf8758f456a79a8ef18e1f7c1601be40ad1f96895cfc36b SHA512 36873ecf32a42023838853012cf640a4e3007faeeda5dc9e0fb4511cccab98776a0b74ee179de2d324c438bd042aa8bf87783bc593d81eaabe8627157968605d
diff --git a/net-dialup/tio/metadata.xml b/net-dialup/tio/metadata.xml
new file mode 100644
index 000000000000..124259ef1903
--- /dev/null
+++ b/net-dialup/tio/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>kurt@kmk-computers.de</email>
+ <name>Kurt Kanzenbach</name>
+ </maintainer>
+ <longdescription lang="en">
+ "tio" is a simple TTY terminal application which features a straightforward
+ commandline interface to easily connect to TTY devices for basic
+ input/output.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">tio/tio</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/tio/tio-3.9.ebuild b/net-dialup/tio/tio-3.9.ebuild
new file mode 100644
index 000000000000..376c56c1268c
--- /dev/null
+++ b/net-dialup/tio/tio-3.9.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit lua-single meson bash-completion-r1
+
+DESCRIPTION="Simple TTY terminal application"
+HOMEPAGE="https://tio.github.io/"
+SRC_URI="https://github.com/${PN}/${PN}/releases/download/v${PV}/${P}.tar.xz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+REQUIRED_USE="${LUA_REQUIRED_USE}"
+RDEPEND="
+ ${LUA_DEPS}
+ dev-libs/glib
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_configure() {
+ local emesonargs=(
+ -Dbashcompletiondir="$(get_bashcompdir)"
+ )
+
+ meson_src_configure
+}
diff --git a/net-dialup/xl2tpd/Manifest b/net-dialup/xl2tpd/Manifest
new file mode 100644
index 000000000000..2f1bed7c71f4
--- /dev/null
+++ b/net-dialup/xl2tpd/Manifest
@@ -0,0 +1,4 @@
+DIST xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch 4074 BLAKE2B d1566a22c51dfc448df41424722571206dbedb36b48bafe19a629b5c0c3eadce17a899d387c5aa241f4367cbfef86f09322f4a7dd429eeb1fd82539a81f7aa76 SHA512 8a10ddfbb6998a4caeaf8a55334d5e4a3fdbe10e0b71652699fda5bb27cd8f1e0b88c7dd50fb95cea3385353b91a4d9208003e436cc3d4e8023828a80cbbeb19
+DIST xl2tpd-1.3.18.tar.gz 534937 BLAKE2B ce745855709ac79d5d6aefbe2fb31a4e799f01c6ad31ad2e436c276933e079116daf32bcdc97b7459e4792aa2bd1ddbb600d798d8b28d1432681ffd319fe0829 SHA512 d1114777de5f3895429409fd5474da91fe9e9c218615eb989c9294de3e4e36dea7d8ea880a9b1b1ca18760e5709c8b8156c80d81401db479eaf215c026c3d861
+DIST xl2tpd-1.3.20-ditch-select-use-poll.patch 24347 BLAKE2B 8a13a52fb64a8135ccb4ccb618039c9345cccc28f31c08c58349e98b739994c7eddbfa629d1d4c79646e2060aef4cf1331ee57864413f16e105edd275768ce8b SHA512 bcfe9d0f90b8332078221e921307ca111eb3b0ed5c6b11716fc13f5bf9223ea58a667d46f38f8fdc3d062f596533da8550e5fb9312f0b6fefd9f799bf2a21407
+DIST xl2tpd-1.3.20.tar.gz 537558 BLAKE2B 98a5c0c6884aa77fe277ffc8a2310a472d5a5db86d39a4ae7da9f97eed53e033b6680a683b1bb52433320711f966ec1f3f02174ce15fbe52fb88d8287a1f8231 SHA512 d227e1dafbb1d7ca64d42084397eaf013f89958bc705d602ca9717e355b2a420756ccbf71663f920b44a6624411a59bf52fd039ba50a7d45a976e9af03ed4dc5
diff --git a/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r1-close-calls-when-pppd-terminates.patch b/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r1-close-calls-when-pppd-terminates.patch
new file mode 100644
index 000000000000..ee70ca91cf2e
--- /dev/null
+++ b/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r1-close-calls-when-pppd-terminates.patch
@@ -0,0 +1,51 @@
+https://github.com/xelerance/xl2tpd/pull/261
+From 65a0473569c51a07309bbc0836ff4262b72297c7 Mon Sep 17 00:00:00 2001
+From: Jaco Kroon <jaco@uls.co.za>
+Date: Fri, 1 Sep 2023 11:05:29 +0200
+Subject: [PATCH] xl2tpd: Close calls when underlying pppd terminate.
+
+Unsure the cause, but we found that upon ppp terminating xl2tpd would
+only reap the PID, but not actually close the inner call, then at a
+later stage would issue a kill() for that PID.
+
+In our environment with high call turnover this would eventually result
+in xl2tpd kill()'ing other critical services like mariadb and/or
+syslog-ng which would upon reloads and rotations have a tendency to
+re-use PIDs that were previously used by pppd processes.
+
+We also believe that this should sort out the problem where IPs wouldn't
+get cycled and re-used.
+
+Closes: #252
+Closes: #255
+Signed-off-by: Jaco Kroon <jaco@uls.co.za>
+---
+ xl2tpd.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/xl2tpd.c b/xl2tpd.c
+index 791d5a4..4047bca 100644
+--- a/xl2tpd.c
++++ b/xl2tpd.c
+@@ -257,6 +257,9 @@ static void child_handler (int sig)
+ {
+ if (c->pppd == pid)
+ {
++ /* pid is no longer valid, avoid killing it later by accident in destroy_call() */
++ c->pppd = 0;
++
+ if ( WIFEXITED( status ) )
+ {
+ l2tp_log (LOG_DEBUG, "%s : pppd exited for call %d with code %d\n", __FUNCTION__,
+@@ -283,6 +286,8 @@ static void child_handler (int sig)
+ #endif
+ close (c->fd);
+ #ifdef USE_KERNEL
++ } else {
++ call_close (c);
+ }
+ #endif
+ c->fd = -1;
+--
+2.41.0
+
diff --git a/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch b/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch
new file mode 100644
index 000000000000..7d491b3c6542
--- /dev/null
+++ b/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch
@@ -0,0 +1,116 @@
+From b81956418ca6590d8c3b1a6758dccc0f2f05eb54 Mon Sep 17 00:00:00 2001
+From: Jaco Kroon <jaco@uls.co.za>
+Date: Tue, 18 Oct 2022 12:46:11 +0200
+Subject: [PATCH] Pass remotenumber to pppd.
+
+By default this will be the IP address of the remote peer, but it could
+be the remote's number as provided by way of AVP should the newly added
+'trust remotenumber' LNS option be set to yes.
+
+Signed-off-by: Jaco Kroon <jaco@uls.co.za>
+---
+ doc/l2tpd.conf.sample | 1 +
+ doc/xl2tpd.conf.5 | 6 ++++++
+ file.c | 17 +++++++++++++++++
+ file.h | 1 +
+ xl2tpd.c | 8 ++++++++
+ 5 files changed, 33 insertions(+)
+
+diff --git a/doc/l2tpd.conf.sample b/doc/l2tpd.conf.sample
+index 8f8fcb5..f6f0359 100644
+--- a/doc/l2tpd.conf.sample
++++ b/doc/l2tpd.conf.sample
+@@ -47,6 +47,7 @@
+ ; rx bps = 10000000 ; Receive tunnel speed
+ ; tx bps = 10000000 ; Transmit tunnel speed
+ ; bps = 100000 ; Define both receive and transmit speed in one option
++; trust remotenumber = no ; Trust dialing number AVP?
+
+ ; [lac marko] ; Example VPN LAC definition
+ ; lns = lns.marko.net ; * Who is our LNS?
+diff --git a/doc/xl2tpd.conf.5 b/doc/xl2tpd.conf.5
+index 2b1acbc..173a453 100644
+--- a/doc/xl2tpd.conf.5
++++ b/doc/xl2tpd.conf.5
+@@ -175,6 +175,12 @@ This will enable the debug for pppd.
+ .B pass peer
+ Pass the peer's IP address to pppd as ipparam. Enabled by default.
+
++.TP
++.B trust remotenumber
++When this is set to yes xl2tpd will trust the dialing number AVP and provide
++that as the remotenumber to pppd rather than the peer's IP address. Default is
++not trusted.
++
+ .TP
+ .B pppoptfile
+ Specify the path for a file which contains pppd configuration parameters
+diff --git a/file.c b/file.c
+index 17dc377..29fcb66 100644
+--- a/file.c
++++ b/file.c
+@@ -676,6 +676,22 @@ int set_pass_peer (char *word, char *value, int context, void *item)
+ return 0;
+ }
+
++int set_trust_remotenumber (char *word, char *value, int context, void *item)
++{
++ switch (context & ~CONTEXT_DEFAULT)
++ {
++ case CONTEXT_LNS:
++ if (set_boolean (word, value, &(((struct lns *) item)->trust_remotenumber)))
++ return -1;
++ break;
++ default:
++ snprintf (filerr, sizeof (filerr), "'%s' not valid in this context\n",
++ word);
++ return -1;
++ }
++ return 0;
++}
++
+ int set_pppoptfile (char *word, char *value, int context, void *item)
+ {
+ struct lac *l = (struct lac *) item;
+@@ -1611,6 +1627,7 @@ struct keyword words[] = {
+ {"hostname", &set_hostname},
+ {"ppp debug", &set_debug},
+ {"pass peer", &set_pass_peer},
++ {"trust remotenumber", &set_trust_remotenumber},
+ {"pppoptfile", &set_pppoptfile},
+ {"call rws", &set_rws},
+ {"tunnel rws", &set_rws},
+diff --git a/file.h b/file.h
+index a2707c2..9d76359 100644
+--- a/file.h
++++ b/file.h
+@@ -97,6 +97,7 @@ struct lns
+ int proxyauth; /* Allow proxy authentication? */
+ int debug; /* Debug PPP? */
+ int pass_peer; /* Pass peer IP to pppd as ipparam? */
++ int trust_remotenumber; /* Whether or not to trust remotely supplied "Dialing Number" AVP */
+ char pppoptfile[STRLEN]; /* File containing PPP options */
+ struct tunnel *t; /* Tunnel of this, if it's ready */
+ };
+diff --git a/xl2tpd.c b/xl2tpd.c
+index 3195988..b551146 100644
+--- a/xl2tpd.c
++++ b/xl2tpd.c
+@@ -495,6 +495,14 @@ int start_pppd (struct call *c, struct ppp_opts *opts)
+ }
+
+ {
++ stropt[pos++] = strdup("remotenumber");
++ if (c->dialing[0] && (!c->lns || c->lns->trust_remotenumber)) {
++ /* if a remotenumber is available, and we're a LAC or the remote "dialing number" AVP is trusted */
++ stropt[pos++] = strdup(c->dialing);
++ } else {
++ stropt[pos++] = strdup(IPADDY(c->container->peer.sin_addr));
++ }
++
+ struct ppp_opts *p = opts;
+ int maxn_opts = sizeof(stropt) / sizeof(stropt[0]) - 1;
+ while (p && pos < maxn_opts)
+--
+2.44.2
+
diff --git a/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r3-Fix-compiling-with-C23.patch b/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r3-Fix-compiling-with-C23.patch
new file mode 100644
index 000000000000..0bd9199554ff
--- /dev/null
+++ b/net-dialup/xl2tpd/files/xl2tpd-1.3.18-r3-Fix-compiling-with-C23.patch
@@ -0,0 +1,37 @@
+From 07f0a12f1f3c10f5be31e4474bcb5422d0d5e9b3 Mon Sep 17 00:00:00 2001
+From: Jaco Kroon <jaco@uls.co.za>
+Date: Thu, 21 Nov 2024 00:12:29 +0200
+Subject: [PATCH] Fix compiling with C23.
+
+https://bugs.gentoo.org/944070
+Signed-off-by: Jaco Kroon <jaco@uls.co.za>
+---
+ xl2tpd.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/xl2tpd.c b/xl2tpd.c
+index 791d5a4..4bf15fd 100644
+--- a/xl2tpd.c
++++ b/xl2tpd.c
+@@ -74,7 +74,7 @@ static int control_handle_lac_hangup(FILE* resf, char* bufp);
+ static int control_handle_lac_disconnect(FILE* resf, char* bufp);
+ static int control_handle_lac_add_modify(FILE* resf, char* bufp);
+ static int control_handle_lac_remove(FILE* resf, char* bufp);
+-static int control_handle_lac_status();
++static int control_handle_lac_status(FILE* resf, char* bufp);
+ static int control_handle_lns_remove(FILE* resf, char* bufp);
+
+ static struct control_requests_handler control_handlers[] = {
+@@ -1549,7 +1549,8 @@ static int control_handle_lac_remove(FILE* resf, char* bufp){
+ return 1;
+ }
+
+-static int control_handle_lac_status(){
++static int control_handle_lac_status(FILE*, char*)
++{
+ show_status ();
+ return 1;
+ }
+--
+2.44.2
+
diff --git a/net-dialup/xl2tpd/files/xl2tpd-init-r1 b/net-dialup/xl2tpd/files/xl2tpd-init-r1
new file mode 100644
index 000000000000..82366c69f57c
--- /dev/null
+++ b/net-dialup/xl2tpd/files/xl2tpd-init-r1
@@ -0,0 +1,11 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/sbin/xl2tpd"
+pidfile="/run/xl2tpd.pid"
+required_files="/etc/xl2tpd/xl2tpd.conf"
+
+start_pre() {
+ checkpath -d /run/xl2tpd
+}
diff --git a/net-dialup/xl2tpd/files/xl2tpd.conf b/net-dialup/xl2tpd/files/xl2tpd.conf
new file mode 100644
index 000000000000..32119f564439
--- /dev/null
+++ b/net-dialup/xl2tpd/files/xl2tpd.conf
@@ -0,0 +1 @@
+d /run/xl2tpd
diff --git a/net-dialup/xl2tpd/files/xl2tpd.service b/net-dialup/xl2tpd/files/xl2tpd.service
new file mode 100644
index 000000000000..37d46cc63493
--- /dev/null
+++ b/net-dialup/xl2tpd/files/xl2tpd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Layer 2 Tunneling Protocol Daemon (L2TP)
+After=syslog.target network.target
+After=ipsec.service
+
+[Service]
+ExecStart=/usr/sbin/xl2tpd -D
+KillSignal=SIGINT
+SuccessExitStatus=1
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-dialup/xl2tpd/metadata.xml b/net-dialup/xl2tpd/metadata.xml
new file mode 100644
index 000000000000..5fa88d8f1e46
--- /dev/null
+++ b/net-dialup/xl2tpd/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>jkroon@gentoo.org</email>
+ <name>Jaco Kroon</name>
+ </maintainer>
+ <longdescription>xl2tpd is a fork of l2tpd Layer 2 Tunneling Protocol (L2TP) daemon that can be used to transfer frames of OSI layer 2 protocols through an IP tunnel. While it provides authentication via CHAP or PAP it does not provide encryption itself and should therefore be externally secured (via IPSEC).</longdescription>
+ <use>
+ <flag name="kernel">Enable kernel interface for PPPoL2TP</flag>
+ <flag name="poll">Use experimental patch to use poll rather than select (scalability patch)</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">xelerance/xl2tpd</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/net-dialup/xl2tpd/xl2tpd-1.3.18-r2.ebuild b/net-dialup/xl2tpd/xl2tpd-1.3.18-r2.ebuild
new file mode 100644
index 000000000000..ff6f45940c9a
--- /dev/null
+++ b/net-dialup/xl2tpd/xl2tpd-1.3.18-r2.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit systemd toolchain-funcs tmpfiles
+
+DESCRIPTION="A modern version of the Layer 2 Tunneling Protocol (L2TP) daemon"
+HOMEPAGE="https://github.com/xelerance/xl2tpd"
+SRC_URI="https://github.com/xelerance/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ~mips ~ppc ppc64 ~riscv x86"
+IUSE="+kernel"
+
+DEPEND="
+ net-libs/libpcap
+ >=sys-kernel/linux-headers-2.6"
+
+RDEPEND="
+ ${DEPEND}
+ net-dialup/ppp"
+
+DOCS=( CREDITS README.md BUGS CHANGES TODO doc/README.patents )
+
+PATCHES=(
+ "${FILESDIR}/xl2tpd-1.3.18-r1-close-calls-when-pppd-terminates.patch"
+ "${FILESDIR}/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch"
+)
+
+src_prepare() {
+ default
+ sed -e 's:/var/run/:/run/:' -i \
+ file.h \
+ l2tp.h \
+ xl2tpd-control.c \
+ doc/l2tp-secrets.5 \
+ doc/xl2tpd.8 \
+ doc/xl2tpd.conf.5 \
+ || die "Error updating /var/run to /run"
+}
+
+src_compile() {
+ tc-export CC
+ local OSFLAGS="-DLINUX"
+ use kernel && OSFLAGS+=" -DUSE_KERNEL"
+ emake OSFLAGS="${OSFLAGS}"
+}
+
+src_install() {
+ emake PREFIX=/usr DESTDIR="${D}" install
+
+ newinitd "${FILESDIR}"/xl2tpd-init-r1 xl2tpd
+
+ systemd_dounit "${FILESDIR}"/xl2tpd.service
+ dotmpfiles "${FILESDIR}"/xl2tpd.conf
+
+ einstalldocs
+
+ insinto /etc/xl2tpd
+ newins doc/l2tpd.conf.sample xl2tpd.conf
+ insopts -m 0600
+ newins doc/l2tp-secrets.sample l2tp-secrets
+}
+
+pkg_postinst() {
+ tmpfiles_process xl2tpd.conf
+}
diff --git a/net-dialup/xl2tpd/xl2tpd-1.3.18-r3.ebuild b/net-dialup/xl2tpd/xl2tpd-1.3.18-r3.ebuild
new file mode 100644
index 000000000000..f7d1daac0569
--- /dev/null
+++ b/net-dialup/xl2tpd/xl2tpd-1.3.18-r3.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit systemd toolchain-funcs tmpfiles
+
+DESCRIPTION="A modern version of the Layer 2 Tunneling Protocol (L2TP) daemon"
+HOMEPAGE="https://github.com/xelerance/xl2tpd"
+SRC_URI="https://github.com/xelerance/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ~mips ~ppc ppc64 ~riscv x86"
+IUSE="+kernel"
+
+DEPEND="
+ net-libs/libpcap
+ >=sys-kernel/linux-headers-2.6"
+
+RDEPEND="
+ ${DEPEND}
+ net-dialup/ppp"
+
+DOCS=( CREDITS README.md BUGS CHANGES TODO doc/README.patents )
+
+PATCHES=(
+ "${FILESDIR}/xl2tpd-1.3.18-r1-close-calls-when-pppd-terminates.patch"
+ "${FILESDIR}/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch"
+ "${FILESDIR}/xl2tpd-1.3.18-r3-Fix-compiling-with-C23.patch"
+)
+
+src_prepare() {
+ default
+ sed -e 's:/var/run/:/run/:' -i \
+ file.h \
+ l2tp.h \
+ xl2tpd-control.c \
+ doc/l2tp-secrets.5 \
+ doc/xl2tpd.8 \
+ doc/xl2tpd.conf.5 \
+ || die "Error updating /var/run to /run"
+}
+
+src_compile() {
+ tc-export CC
+ local OSFLAGS="-DLINUX"
+ use kernel && OSFLAGS+=" -DUSE_KERNEL"
+ emake OSFLAGS="${OSFLAGS}"
+}
+
+src_install() {
+ emake PREFIX=/usr DESTDIR="${D}" install
+
+ newinitd "${FILESDIR}"/xl2tpd-init-r1 xl2tpd
+
+ systemd_dounit "${FILESDIR}"/xl2tpd.service
+ dotmpfiles "${FILESDIR}"/xl2tpd.conf
+
+ einstalldocs
+
+ insinto /etc/xl2tpd
+ newins doc/l2tpd.conf.sample xl2tpd.conf
+ insopts -m 0600
+ newins doc/l2tp-secrets.sample l2tp-secrets
+}
+
+pkg_postinst() {
+ tmpfiles_process xl2tpd.conf
+}
diff --git a/net-dialup/xl2tpd/xl2tpd-1.3.20.ebuild b/net-dialup/xl2tpd/xl2tpd-1.3.20.ebuild
new file mode 100644
index 000000000000..af4e7237e4f8
--- /dev/null
+++ b/net-dialup/xl2tpd/xl2tpd-1.3.20.ebuild
@@ -0,0 +1,73 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit systemd toolchain-funcs tmpfiles
+
+DESCRIPTION="A modern version of the Layer 2 Tunneling Protocol (L2TP) daemon"
+HOMEPAGE="https://github.com/xelerance/xl2tpd"
+SRC_URI="
+ https://github.com/xelerance/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz
+ https://downloads.uls.co.za/patches/${PN}/${PN}-1.3.18-r2-Pass-remotenumber-to-pppd.patch
+ poll? ( https://downloads.uls.co.za/patches/${PN}/${PN}-1.3.20-ditch-select-use-poll.patch )
+"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ~mips ~ppc ppc64 ~riscv x86"
+IUSE="+kernel poll"
+
+DEPEND="
+ net-libs/libpcap
+ >=sys-kernel/linux-headers-2.6"
+
+RDEPEND="
+ ${DEPEND}
+ net-dialup/ppp"
+
+DOCS=( CREDITS README.md BUGS CHANGES TODO doc/README.patents )
+
+PATCHES=(
+ "${DISTDIR}/xl2tpd-1.3.18-r2-Pass-remotenumber-to-pppd.patch"
+)
+
+src_prepare() {
+ default
+ use poll && epatch "${DISTDIR}/xl2tpd-1.3.20-ditch-select-use-poll.patch"
+ sed -e 's:/var/run/:/run/:' -i \
+ file.h \
+ l2tp.h \
+ xl2tpd-control.c \
+ doc/l2tp-secrets.5 \
+ doc/xl2tpd.8 \
+ doc/xl2tpd.conf.5 \
+ || die "Error updating /var/run to /run"
+}
+
+src_compile() {
+ tc-export CC
+ local OSFLAGS="-DLINUX"
+ use kernel && OSFLAGS+=" -DUSE_KERNEL"
+ emake OSFLAGS="${OSFLAGS}"
+}
+
+src_install() {
+ emake PREFIX=/usr DESTDIR="${D}" install
+
+ newinitd "${FILESDIR}"/xl2tpd-init-r1 xl2tpd
+
+ systemd_dounit "${FILESDIR}"/xl2tpd.service
+ dotmpfiles "${FILESDIR}"/xl2tpd.conf
+
+ einstalldocs
+
+ insinto /etc/xl2tpd
+ newins doc/l2tpd.conf.sample xl2tpd.conf
+ insopts -m 0600
+ newins doc/l2tp-secrets.sample l2tp-secrets
+}
+
+pkg_postinst() {
+ tmpfiles_process xl2tpd.conf
+}