summaryrefslogtreecommitdiff
path: root/net-dialup/freeradius
diff options
context:
space:
mode:
Diffstat (limited to 'net-dialup/freeradius')
-rw-r--r--net-dialup/freeradius/Manifest6
-rw-r--r--net-dialup/freeradius/files/freeradius-3.0.20-py3-fixes.patch472
-rw-r--r--net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch57
-rw-r--r--net-dialup/freeradius/freeradius-3.0.20.ebuild266
-rw-r--r--net-dialup/freeradius/metadata.xml3
5 files changed, 803 insertions, 1 deletions
diff --git a/net-dialup/freeradius/Manifest b/net-dialup/freeradius/Manifest
index 193159582feb..7c915ce24453 100644
--- a/net-dialup/freeradius/Manifest
+++ b/net-dialup/freeradius/Manifest
@@ -1,6 +1,8 @@
AUX freeradius-3.0.18-libressl.patch 2503 BLAKE2B 45b5ca45af2bb145f5876892d02686f0896fb0cdafdf0deb00789e5c927c74b4a6793b9084208a3ae282947241d949ef1a84c621bbd7c9c90907624062d1a1cd SHA512 4dd638736c23af2428481ff6f1dd247f29ee11205bc88b9f59347a9d0baa504f67bc4139c854e52a8ca95a39ab70e72c54bcc58a18f752b07f62bf029626204a
AUX freeradius-3.0.18-systemd-service.patch 1131 BLAKE2B 468fb9e26d5890c643f8fef2d6677a9d8fea8c6457c7d540ff6f1c7a3a8e9cd91afe67acaf7349e0e8063d8b15bf776e7fb6d005ae397de25dab71619c2af1d6 SHA512 ef28a98720fceeddaeabc5d99b3448322b59ef00848604a872067d9ebdf5288a0d7bdd857436e0769fe9e26c83cc220df9cf569e90a72588e6f2d6c081bbaf48
AUX freeradius-3.0.19-systemd-service.patch 1894 BLAKE2B a82f328e15141ad725530031b083b687ead04f55af5a8225feb6342b07e471f9d0dc4158e08e72cd6554b394caf94291f920b54d91eac729b0c1a3499eb6a2d0 SHA512 6e24202101a40937d91a1faed198e7855b9a1b115f1d652783b5e0632bef84667303f220465327c18709a4e51cf9c4d1378822909d9bdd5733bd276492cfca46
+AUX freeradius-3.0.20-py3-fixes.patch 15422 BLAKE2B 29f10c53b02603c2c854c0100056c01e02c1282a78731e67453101dc6be49d64f57e1f39b8a32459034939a1d47c74bca48270f119095deaa067942b2c2d3b5c SHA512 5a565aa55fab059995870c78f176fa525fca4bd8732c2a2ecc4f625a6635979a51b3fc53999fb7741bc2da37a6260afa43350f61490f0b3548ced5bc81dfdaea
+AUX freeradius-3.0.20-systemd-service.patch 2162 BLAKE2B 3aa32e5a15efa223aab7880b0cb651edca6695a3727b4df7692f656d1f34366a2a16c364c2a5b544a0ad04bca795be269d4d7dc37bc4c3c6d28387bc3e411ad8 SHA512 8a9f5ecaf559132932ed2e46151ff41e5570df3e844f33ee49004ace0aa7b458a6000ec0d1ed01c34b6236c3dde2ca72cb1031b4badcfa4d6826dbf16ca28259
AUX freeradius.service 392 BLAKE2B c45290bf56e49244da8f135fb7f1726db7e73d66b24b970926065100e047bd8abcff55d164f5274b092a6735132eca898e271666ed9c9e9062b01fe4ef145f84 SHA512 c2e153f0e8543758dff81835b17c6221ca031fc66f17828b6380d40501c8b6f6ed7e33096218e44326f731245c24386427bb3c9eda48ac185b67104fc878b692
AUX freeradius.tmpfiles 36 BLAKE2B 612c6ca79a678a3a82114ec142d33aa831b5b19c3e6774b2332334bffbeeb592aeac43d443a5f8fc1380528f3a5de4cfe125eb388d36c0b4f1f7f84f2bfb36bc SHA512 cf364cd860588318d49089946739bb30a6259a5aa7977c768155449fbb495473fe24c1ddccc75dc822e25b1f0d404589d7606590fd2018cc6503dd2767463a7c
AUX radius.conf-r4 465 BLAKE2B 1c17f57c088be0612b3db23e8a909d7e1f6fc114d3ff31ee1c82f199e3962db57f3042498cf135b3a29c8a730695ed99612e490e0b3253f0644462d28f61215d SHA512 4142869fb61b2938232002c9cb5b843590785560da7db4f2b2a9c9d55c76d0e2d4a6cb946a5347dfa505cd82f5e86c7315cf71f3443a86632090cf4bd025748a
@@ -9,8 +11,10 @@ DIST freeradius-server-3.0.15.tar.gz 4818244 BLAKE2B 24cded2c4f0c6fc6a6135058c40
DIST freeradius-server-3.0.17.tar.gz 4843020 BLAKE2B 9e1f54a9f5ad8ede471881ffe4ec987c3ac655a3c39fcd920094760c006102be02f3b7f25b14379a0bac876ac0944e8698c2781bbd804cd22d8b915b6c13a693 SHA512 381222e452288c56a1bf68953be57379a5568f0c92de022abc3004cc6a15078d46535b867b31801de3eb096ba7af92e745e79decfa7cc8151a1ffb371b1aea79
DIST freeradius-server-3.0.18.tar.gz 4884192 BLAKE2B 21df490f5eba4e0eca42127181fa02a9451abf5fc2b0d7c5e6d0c5c287eda739585500a31f480dccc618c3bbb4096fbe9258c1b2d3a2047951abf85d68784862 SHA512 b81c40cd22170adb1126b9dde6dd84411dfafce33e27da6c4665cb4fc524aab854a7cd4c80757db50899604d7980aec7216e1c53b8184af482c7113692a26458
DIST freeradius-server-3.0.19.tar.gz 4886632 BLAKE2B 6e9b73eaa29344e4efca6ad19d8e86df8c625921441712b71cb54c2b0db78fc909748da42be837a9170fb6312be22f236956f0d2b169050a37ac8c4de143cc96 SHA512 8a914e2ad1fbeb4cf8c00aaf7eaa154ea17f70e4d58734716bfaf71b3ddef9f8f63a4d3217bdc07dfa776273e5bf090bc98f7bb16f5b565339ddc3b9c13e091f
+DIST freeradius-server-3.0.20.tar.gz 5002727 BLAKE2B f481ad22105694a4af3f0f0c1b4f6e395e8da0fe65274e32ebeed07e3c9b1869029e6ffbc655cfa41d5de2a1dcba54acee33a7a10d28bfbfce791b7ccd0fc57a SHA512 513ed0a5d9e6b9a8d89a9b02c86ff528a9ff14d928f4c1040ca44702465abd711588fe6afa35554cb2c8e8bd7f19dd5be3dbc78445c62c7b00bf5cbc4c621312
EBUILD freeradius-3.0.15.ebuild 6054 BLAKE2B 9b9f62eb1f4a3aa24d9640e6ff82df0b0185105e9808976ddf04881ccf81ed430c0e8695d9c8c9c020a16adb329b0f378421a5e041ac4e8070ea953a2ef61c86 SHA512 a040769cb5aa338017eddd9b440920b847860565bd8ac29e020a520714dc52e2e7007fabb82226db006bf108502230822a92e1601c59294545b157ea7d900a07
EBUILD freeradius-3.0.17.ebuild 6727 BLAKE2B 0f42808b329fef66e7eb28e6ae5abc32108b138714f5429348bb00373f620b5ea68662812e16bec992d2664ea37adf9a800b07c883fd2d4b978ebace1b56e650 SHA512 c3ed93033d57754f53ea2d5b0d1cab63119561784ae761423c357e5aeea8f1963729f80b19a9a7beb253fd51a601a5e2751f301c55de39ce22a9ab3a27762638
EBUILD freeradius-3.0.18-r1.ebuild 6874 BLAKE2B b35457da5edffb5679a6baa9af427d5efc8ebd9eec314beae928a20ae7b0be3523914e30bc6225a0bb9e471f2e8fd8b4630113ed3bcc82da7be26d6505cfda73 SHA512 a44785b4c7629c44af02bb29f60a1f6a973b351dded93b0470e39d29a2a2861a68e187ccd7a6f239c38b46c86b833c7fff7e9956a5045d57b949443d9a628a18
EBUILD freeradius-3.0.19.ebuild 6855 BLAKE2B ff9866d2d69ccfd9b9fd0e9d9689140b8d84f1103dd7d5f85053954d79ecb3189e98c475272dd0c01957e9ca048aea995401a1ca6aeeadf50b4209cbcb6b1556 SHA512 9cf421d3ecc09ba3c40ba6e60bb2111f4587aa2e84a90040c19e040d6b5a1cc6f46e71ca0c2ff5d7e44f41d6502609ead1030cd3ba9d5ca2b4deedbbe3d590d1
-MISC metadata.xml 783 BLAKE2B c543f46ba6b40f3a290a1610016a65be011feeb5f9876c44f4c0957580dadef153f90a0779717d435f5f74da66c6ae2b00db43a7f1292c7543a3ec426181ec5d SHA512 77860b155c6fd58008b229cc5ad1b36644efdb9ccddcf1767e36afed25ab975a43726bcde80b17399a19644577212631aa1043e8e6a430a560c33969d8ac613b
+EBUILD freeradius-3.0.20.ebuild 7584 BLAKE2B 9058ed180c90492da0e4b79a2847018c6357faefd31973a5eea4b7aa9b43081ece91029d65c1e09c30b0a3c2d8a3260ff574a4dcbde04178507fb39e7cf33b1d SHA512 5fd71f36f7e6e9246a65700653bdd0eebf7c0d22d2194d421722eb91c03928cf23cdbe8b87789f6de7a4e4aa78090054de1bf1e30657d6a047a3cd333fb99a47
+MISC metadata.xml 864 BLAKE2B 5df7dfc698cebaaf850dfffedd8bfc9b7f30a947fdc7072b86b6e557bcf0f2548564260fb2ae073ea5adb5d1a37a5363e122691f748588561e26f5e452176934 SHA512 e36f1c6447cc565efb1523b931f670e944a5cd5eac9176bf42be13db907c7afea6d8ab860f77e739beec25f1b74012fe53987da5c48e6a7b928e335614e679cc
diff --git a/net-dialup/freeradius/files/freeradius-3.0.20-py3-fixes.patch b/net-dialup/freeradius/files/freeradius-3.0.20-py3-fixes.patch
new file mode 100644
index 000000000000..83dc20090ed2
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-3.0.20-py3-fixes.patch
@@ -0,0 +1,472 @@
+diff --git a/raddb/mods-available/python3 b/raddb/mods-available/python3
+index 246dfd74ce..0593c69f1a 100644
+--- a/raddb/mods-available/python3
++++ b/raddb/mods-available/python3
+@@ -13,7 +13,7 @@ python3 {
+ # item is GLOBAL TO THE SERVER. That is, you cannot have two
+ # instances of the python module, each with a different path.
+ #
+-# python_path="/path/to/python/files:/another_path/to/python_files/"
++# python_path="${modconfdir}/${.:name}:/another_path/to/python_files"
+
+ module = example
+
+diff --git a/src/modules/rlm_python3/configure.ac b/src/modules/rlm_python3/configure.ac
+index a00320fda4..295a2486d2 100644
+--- a/src/modules/rlm_python3/configure.ac
++++ b/src/modules/rlm_python3/configure.ac
+@@ -8,128 +8,75 @@ if test x$with_[]modname != xno; then
+ AC_PROG_CC
+ AC_PROG_CPP
+
+- dnl extra argument: --with-rlm-python3-bin
+- PYTHON3_BIN=
+- AC_ARG_WITH(rlm-python3-bin,
+- [ --with-rlm-python3-bin=PATH Path to python3 binary []],
++ dnl extra argument: --with-rlm-python3-config-bin
++ PYTHON3_CONFIG_BIN=
++ AC_ARG_WITH(rlm-python3-config-bin,
++ [ --with-rlm-python3-config-bin=PATH Path to python-config3 binary []],
+ [ case "$withval" in
+ no)
+- AC_MSG_ERROR(Need rlm-python3-bin)
++ AC_MSG_ERROR(Need rlm-python3-config-bin)
+ ;;
+ yes)
+ ;;
+ *)
+- PYTHON3_BIN="$withval"
++ PYTHON3_CONFIG_BIN="$withval"
+ ;;
+ esac ]
+ )
+
+- if test "x$PYTHON3_BIN" = x; then
+- AC_CHECK_PROGS(PYTHON3_BIN, [ python3 ], not-found, [${PATH}:/usr/bin:/usr/local/bin])
++ if test "x$PYTHON3_CONFIG_BIN" = x; then
++ AC_CHECK_PROGS(PYTHON3_CONFIG_BIN, [ python3-config ], not-found, [${PATH}:/usr/bin:/usr/local/bin])
+ fi
+
+- if test "x$PYTHON3_BIN" = "xnot-found"; then
+- fail="python-binary"
+- fi
+-
+- dnl extra argument: --with-rlm-python3-lib-dir
+- PY_LIB_DIR=
+- AC_ARG_WITH(rlm-python3-lib-dir,
+- [ --with-rlm-python3-lib-dir=DIR Directory for Python library files []],
+- [ case "$withval" in
+- no)
+- AC_MSG_ERROR(Need rlm-python3-lib-dir)
+- ;;
+- yes)
+- ;;
+- *)
+- PY_LIB_DIR="$withval"
+- ;;
+- esac ]
+- )
+-
+- dnl extra argument: --with-rlm-python3-include-dir
+- PY_INC_DIR=
+- AC_ARG_WITH(rlm-python3-include-dir,
+- [ --with-rlm-python3-include-dir=DIR Directory for Python include files []],
+- [ case "$withval" in
+- no)
+- AC_MSG_ERROR(Need rlm-python3-include-dir)
+- ;;
+- yes)
+- ;;
+- *)
+- PY_INC_DIR="$withval"
+- ;;
+- esac ]
+- )
+-
+- if test x$fail = x; then
+- PY_PREFIX=`${PYTHON3_BIN} -c 'import sys ; print(sys.prefix)'`
+- AC_MSG_NOTICE([Python sys.prefix \"${PY_PREFIX}\"])
+-
+- PY_EXEC_PREFIX=`${PYTHON3_BIN} -c 'import sys ; print(sys.exec_prefix)'`
+- AC_MSG_NOTICE([Python sys.exec_prefix \"${PY_EXEC_PREFIX}\"])
+-
+- PY_SYS_VERSION=`${PYTHON3_BIN} -c 'import sys ; print(sys.version[[0:3]])'`
+- AC_MSG_NOTICE([Python sys.version \"${PY_SYS_VERSION}\"])
+-
+- if test "x$PY_LIB_DIR" = "x"; then
+- PY_LIB_DIR="$PY_EXEC_PREFIX/lib/python${PY_SYS_VERSION}/config"
+- PY_LIB_LOC="-L$PY_EXEC_PREFIX/lib/python${PY_SYS_VERSION}/config"
+- fi
+-
+- PY_MAKEFILE="$PY_EXEC_PREFIX/lib/python${PY_SYS_VERSION}/config/Makefile"
+- if test -f ${PY_MAKEFILE}; then
+- PY_LOCAL_MOD_LIBS=`sed -n -e 's/^LOCALMODLIBS=\(.*\)/\1/p' $PY_MAKEFILE | sed -e 's/[[[:blank:]]]/ /g;s/^ *//;s/ *$//'`
+- AC_MSG_NOTICE([Python local_mod_libs \"${PY_LOCAL_MOD_LIBS}\"])
+-
+- PY_BASE_MOD_LIBS=`sed -n -e 's/^BASEMODLIBS=\(.*\)/\1/p' $PY_MAKEFILE | sed -e 's/[[[:blank:]]]/ /g;s/^ *//;s/ *$//'`
+- AC_MSG_NOTICE([Python base_mod_libs \"${PY_BASE_MOD_LIBS}\"])
+-
+- PY_OTHER_LIBS=`sed -n -e 's/^LIBS=\(.*\)/\1/p' $PY_MAKEFILE | sed -e 's/[[[:blank:]]]/ /g;s/ / /g;s/^ *//;s/ *$//'`
+- PY_OTHER_LDFLAGS=`sed -n -e 's/^LINKFORSHARED=\(.*\)/\1/p' $PY_MAKEFILE | sed -e 's/[[[:blank:]]]/ /g;s/ / /g;s/^ *//;s/ *$//'`
+- AC_MSG_NOTICE([Python other_libs \"${PY_OTHER_LDFLAGS} ${PY_OTHER_LIBS}\"])
+- fi
+- PY_EXTRA_LIBS="$PY_LOCALMODLIBS $PY_BASE_MOD_LIBS $PY_OTHER_LIBS"
++ if test "x$PYTHON3_CONFIG_BIN" = xnot-found; then
++ fail="$fail python3-config"
++ else
++ dnl #
++ dnl # It is necessary due to a weird behavior with 'python3-config'
++ dnl #
++ old_CFLAGS="$CFLAGS"
++ unset CFLAGS
++
++ python3_cflags=`${PYTHON3_CONFIG_BIN} --cflags`
++ AC_MSG_NOTICE([${PYTHON3_CONFIG_BIN}'s cflags were \"${python3_cflags}\"])
++
++ dnl # Convert -I to -isystem to get rid of warnings about issues in Python headers
++ dnl # Strip -systemroot
++ dnl # Strip optimisation flags (-O[0-9]?). We decide our optimisation level, not python.
++ dnl # -D_FORTIFY_SOURCE needs -O.
++ dnl # Strip debug symbol flags (-g[0-9]?). We decide on debugging symbols, not python
++ dnl # Strip -W*, we decide what warnings are important
++ dnl # Strip -DNDEBUG
++ mod_cflags=`echo $python3_cflags | sed -e '\
++ s/-I/-isystem/g;\
++ s/-isysroot[[ =]]\{0,1\}[[^-]]*//g;\
++ s/-O[[^[[:blank:]]]]*//g;\
++ s/-Wp,-D_FORTIFY_SOURCE=[[[:digit:]]]//g;\
++ s/-g[[^ ]]*//g;\
++ s/-W[[^ ]]*//g;\
++ s/-DNDEBUG[[[:blank:]]]*//g;
++ '`
++ AC_MSG_NOTICE([Sanitized cflags were \"${mod_cflags}\"])
++
++ python3_ldflags=`${PYTHON3_CONFIG_BIN} --ldflags`
++ AC_MSG_NOTICE([${PYTHON3_CONFIG_BIN}'s ldflags were \"$python3_ldflags}\"])
++
++ dnl # Strip -Wl,-O1... Is -O even a valid linker flag??
++ dnl # Strip -Wl,-Bsymbolic-functions as thats not always supported or required
++ dnl # Strip -Xlinker -export-dynamic as it causes weird linking issues on Linux
++ dnl # See: https://bugs.python.org/issue36508
++ mod_ldflags=`echo $python3_ldflags | sed -e '\
++ s/-Wl,-O[[[:digit:]]][[[:blank:]]]*//g;\
++ s/-Wl,-Bsymbolic-functions[[[:blank:]]]*//g;\
++ s/-Xlinker -export-dynamic//g;\
++ s/-Wl,-stack_size,[[[:digit:]]]*[[[:blank:]]]//g;
++ '`
++ AC_MSG_NOTICE([Sanitized ldflags were \"${mod_ldflags}\"])
+
+- old_CFLAGS=$CFLAGS
+- CFLAGS="$CFLAGS $PY_CFLAGS"
+- smart_try_dir="$PY_PREFIX/include/python$PY_SYS_VERSION"
+- FR_SMART_CHECK_INCLUDE(Python.h)
+ CFLAGS=$old_CFLAGS
+
+- if test "x$ac_cv_header_Python_h" = "xyes"; then
+- mod_cflags="$SMART_CPPFLAGS"
+- else
+- fail="$fail Python.h"
+- targetname=
+- fi
+-
+- old_LIBS=$LIBS
+- LIBS="$LIBS $PY_LIB_LOC $PY_EXTRA_LIBS -lm"
+- smart_try_dir=$PY_LIB_DIR
+- FR_SMART_CHECK_LIB(python${PY_SYS_VERSION}, Py_Initialize)
+- LIBS=$old_LIBS
+-
+- eval t=\${ac_cv_lib_${sm_lib_safe}_${sm_func_safe}}
+- if test "x$t" = "xyes"; then
+- mod_ldflags="$PY_LIB_LOC $PY_EXTRA_LIBS $SMART_LIBS -lm"
+- targetname=modname
+- else
+- FR_SMART_CHECK_LIB(python${PY_SYS_VERSION}m, Py_Initialize)
+- eval t=\${ac_cv_lib_${sm_lib_safe}_${sm_func_safe}}
+- if test "x$t" = "xyes"; then
+- mod_ldflags="$PY_LIB_LOC $PY_EXTRA_LIBS $SMART_LIBS -lm"
+- targetname=modname
+- else
+- targetname=
+- fail="$fail libpython$PY_SYS_VERSION"
+- fi
+- fi
++ targetname="rlm_python3"
+ fi
+-
+- AC_CHECK_FUNCS([dl_iterate_phdr])
+ else
+ targetname=
+ echo \*\*\* module modname is disabled.
+diff --git a/src/modules/rlm_python3/rlm_python3.c b/src/modules/rlm_python3/rlm_python3.c
+index 06187e4ffa..8e893a0eaa 100644
+--- a/src/modules/rlm_python3/rlm_python3.c
++++ b/src/modules/rlm_python3/rlm_python3.c
+@@ -67,8 +67,10 @@ static CONF_PARSER module_config[] = {
+ A(preacct)
+ A(accounting)
+ A(checksimul)
++#ifdef WITH_PROXY
+ A(pre_proxy)
+ A(post_proxy)
++#endif
+ A(post_auth)
+ #ifdef WITH_COA
+ A(recv_coa)
+@@ -98,7 +100,9 @@ static struct {
+ A(L_AUTH)
+ A(L_INFO)
+ A(L_ERR)
++#ifdef WITH_PROXY
+ A(L_PROXY)
++#endif
+ A(L_ACCT)
+ A(L_DBG_WARN)
+ A(L_DBG_ERR)
+@@ -510,6 +514,7 @@ static rlm_rcode_t do_python_single(REQUEST *request, PyObject *pFunc, char cons
+ goto finish;
+ }
+
++#ifdef WITH_PROXY
+ /* fill proxy vps */
+ if (request->proxy) {
+ if (!mod_populate_vps(pArgs, 4, request->proxy->vps)) {
+@@ -517,10 +522,13 @@ static rlm_rcode_t do_python_single(REQUEST *request, PyObject *pFunc, char cons
+ ret = RLM_MODULE_FAIL;
+ goto finish;
+ }
+- } else {
++ } else
++#endif
++ {
+ mod_populate_vps(pArgs, 4, NULL);
+ }
+
++#ifdef WITH_PROXY
+ /* fill proxy_reply vps */
+ if (request->proxy_reply) {
+ if (!mod_populate_vps(pArgs, 5, request->proxy_reply->vps)) {
+@@ -528,7 +536,9 @@ static rlm_rcode_t do_python_single(REQUEST *request, PyObject *pFunc, char cons
+ ret = RLM_MODULE_FAIL;
+ goto finish;
+ }
+- } else {
++ } else
++#endif
++ {
+ mod_populate_vps(pArgs, 5, NULL);
+ }
+
+@@ -550,9 +560,14 @@ static rlm_rcode_t do_python_single(REQUEST *request, PyObject *pFunc, char cons
+ PyDict_SetItemString(pDictInput, "request", PyTuple_GET_ITEM(pArgs, 0)) ||
+ PyDict_SetItemString(pDictInput, "reply", PyTuple_GET_ITEM(pArgs, 1)) ||
+ PyDict_SetItemString(pDictInput, "config", PyTuple_GET_ITEM(pArgs, 2)) ||
+- PyDict_SetItemString(pDictInput, "session-state", PyTuple_GET_ITEM(pArgs, 3)) ||
++ PyDict_SetItemString(pDictInput, "session-state", PyTuple_GET_ITEM(pArgs, 3))
++#ifdef WITH_PROXY
++ ||
+ PyDict_SetItemString(pDictInput, "proxy-request", PyTuple_GET_ITEM(pArgs, 4)) ||
+- PyDict_SetItemString(pDictInput, "proxy-reply", PyTuple_GET_ITEM(pArgs, 5))) {
++ PyDict_SetItemString(pDictInput, "proxy-reply", PyTuple_GET_ITEM(pArgs, 5))
++#endif
++ ) {
++
+ ERROR("%s:%d, %s - PyDict_SetItemString failed", __func__, __LINE__, funcname);
+ ret = RLM_MODULE_FAIL;
+ goto finish;
+@@ -819,8 +834,10 @@ MOD_FUNC(authorize)
+ MOD_FUNC(preacct)
+ MOD_FUNC(accounting)
+ MOD_FUNC(checksimul)
++#ifdef WITH_PROXY
+ MOD_FUNC(pre_proxy)
+ MOD_FUNC(post_proxy)
++#endif
+ MOD_FUNC(post_auth)
+ #ifdef WITH_COA
+ MOD_FUNC(recv_coa)
+@@ -1102,7 +1119,7 @@ static int python_interpreter_init(rlm_python_t *inst, CONF_SECTION *conf)
+ python_dlhandle = dlopen_libpython(RTLD_NOW | RTLD_GLOBAL);
+ if (!python_dlhandle) WARN("Failed loading libpython symbols into global symbol table");
+
+-#if PY_VERSION_HEX > 0x03050000
++#if PY_VERSION_HEX >= 0x03050000
+ {
+ wchar_t *name;
+
+@@ -1110,13 +1127,6 @@ static int python_interpreter_init(rlm_python_t *inst, CONF_SECTION *conf)
+ Py_SetProgramName(name); /* The value of argv[0] as a wide char string */
+ PyMem_RawFree(name);
+ }
+-#elif PY_VERSION_HEX > 0x0300000
+- {
+- wchar_t *name;
+-
+- MEM(name = _Py_char2wchar(main_config.name, NULL));
+- Py_SetProgramName(inst->wide_name); /* The value of argv[0] as a wide char string */
+- }
+ #else
+ {
+ char *name;
+@@ -1163,37 +1173,34 @@ static int python_interpreter_init(rlm_python_t *inst, CONF_SECTION *conf)
+ * the lifetime of the module.
+ */
+ if (inst->python_path) {
++ char *p, *path;
++ PyObject *sys = PyImport_ImportModule("sys");
++ PyObject *sys_path = PyObject_GetAttrString(sys, "path");
++
++ memcpy(&p, &inst->python_path, sizeof(path));
++
++ for (path = strtok(p, ":"); path != NULL; path = strtok(NULL, ":")) {
+ #if PY_VERSION_HEX > 0x03050000
+- {
+- wchar_t *path;
+- PyObject* sys = PyImport_ImportModule("sys");
+- PyObject* sys_path = PyObject_GetAttrString(sys,"path");
+-
+- MEM(path = Py_DecodeLocale(inst->python_path, NULL));
+- PyList_Append(sys_path, PyUnicode_FromWideChar(path,-1));
+- PyObject_SetAttrString(sys,"path",sys_path);
+- PyMem_RawFree(path);
+- }
++ wchar_t *py_path;
++
++ MEM(py_path = Py_DecodeLocale(path, NULL));
++ PyList_Append(sys_path, PyUnicode_FromWideChar(py_path, -1));
++ PyMem_RawFree(py_path);
+ #elif PY_VERSION_HEX > 0x03000000
+- {
+- wchar_t *path;
+- PyObject* sys = PyImport_ImportModule("sys");
+- PyObject* sys_path = PyObject_GetAttrString(sys,"path");
+-
+- MEM(path = _Py_char2wchar(inst->python_path, NULL));
+- PyList_Append(sys_path, PyUnicode_FromWideChar(path,-1));
+- PyObject_SetAttrString(sys,"path",sys_path);
+- }
+-#else
+- {
+- char *path;
++ wchar_t *py_path;
+
+- memcpy(&path, &inst->python_path, sizeof(path));
+- Py_SetPath(path);
+- }
++ MEM(py_path = _Py_char2wchar(path, NULL));
++ PyList_Append(sys_path, PyUnicode_FromWideChar(py_path, -1));
++ PyMem_RawFree(py_path);
++#else
++ PyList_Append(sys_path, PyLong_FromString(path));
+ #endif
+- }
++ }
+
++ PyObject_SetAttrString(sys, "path", sys_path);
++ Py_DecRef(sys);
++ Py_DecRef(sys_path);
++ }
+ } else {
+ inst->module = main_module;
+ Py_IncRef(inst->module);
+@@ -1220,7 +1227,7 @@ static int python_interpreter_init(rlm_python_t *inst, CONF_SECTION *conf)
+ static int mod_instantiate(CONF_SECTION *conf, void *instance)
+ {
+ rlm_python_t *inst = instance;
+- int code = 0;
++ int code = RLM_MODULE_OK;
+
+ inst->name = cf_section_name2(conf);
+ if (!inst->name) inst->name = cf_section_name1(conf);
+@@ -1245,8 +1252,10 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
+ PYTHON_FUNC_LOAD(preacct);
+ PYTHON_FUNC_LOAD(accounting);
+ PYTHON_FUNC_LOAD(checksimul);
++#ifdef WITH_PROXY
+ PYTHON_FUNC_LOAD(pre_proxy);
+ PYTHON_FUNC_LOAD(post_proxy);
++#endif
+ PYTHON_FUNC_LOAD(post_auth);
+ #ifdef WITH_COA
+ PYTHON_FUNC_LOAD(recv_coa);
+@@ -1257,12 +1266,14 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
+ /*
+ * Call the instantiate function.
+ */
+- code = do_python_single(NULL, inst->instantiate.function, "instantiate", inst->pass_all_vps, inst->pass_all_vps_dict);
+- if (code < 0) {
+- error:
+- python_error_log(); /* Needs valid thread with GIL */
+- PyEval_SaveThread();
+- return -1;
++ if (inst->instantiate.function) {
++ code = do_python_single(NULL, inst->instantiate.function, "instantiate", inst->pass_all_vps, inst->pass_all_vps_dict);
++ if (code < 0) {
++ error:
++ python_error_log(); /* Needs valid thread with GIL */
++ PyEval_SaveThread();
++ return -1;
++ }
+ }
+ PyEval_SaveThread();
+
+@@ -1272,22 +1283,31 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
+ static int mod_detach(void *instance)
+ {
+ rlm_python_t *inst = instance;
+- int ret;
++ int ret = RLM_MODULE_OK;
+
+ /*
+ * Call module destructor
+ */
+ PyEval_RestoreThread(inst->sub_interpreter);
+
+- ret = do_python_single(NULL, inst->detach.function, "detach", inst->pass_all_vps, inst->pass_all_vps_dict);
++ if (inst->detach.function) ret = do_python_single(NULL, inst->detach.function, "detach", inst->pass_all_vps, inst->pass_all_vps_dict);
+
+ #define PYTHON_FUNC_DESTROY(_x) python_function_destroy(&inst->_x)
+ PYTHON_FUNC_DESTROY(instantiate);
+- PYTHON_FUNC_DESTROY(authorize);
+ PYTHON_FUNC_DESTROY(authenticate);
++ PYTHON_FUNC_DESTROY(authorize);
+ PYTHON_FUNC_DESTROY(preacct);
+ PYTHON_FUNC_DESTROY(accounting);
+ PYTHON_FUNC_DESTROY(checksimul);
++#ifdef WITH_PROXY
++ PYTHON_FUNC_DESTROY(pre_proxy);
++ PYTHON_FUNC_DESTROY(post_proxy);
++#endif
++ PYTHON_FUNC_DESTROY(post_auth);
++#ifdef WITH_COA
++ PYTHON_FUNC_DESTROY(recv_coa);
++ PYTHON_FUNC_DESTROY(send_coa);
++#endif
+ PYTHON_FUNC_DESTROY(detach);
+
+ Py_DecRef(inst->pythonconf_dict);
+@@ -1313,14 +1333,8 @@ static int mod_detach(void *instance)
+ PyThreadState_Swap(main_interpreter); /* Swap to the main thread */
+ Py_Finalize();
+ dlclose(python_dlhandle);
+-
+-#if PY_VERSION_HEX > 0x03050000
+- //if (inst->wide_name) PyMem_RawFree(inst->wide_name);
+- //if (inst->wide_path) PyMem_RawFree(inst->wide_path);
+-#endif
+ }
+
+-
+ return ret;
+ }
+
+@@ -1348,8 +1362,10 @@ module_t rlm_python3 = {
+ [MOD_PREACCT] = mod_preacct,
+ [MOD_ACCOUNTING] = mod_accounting,
+ [MOD_SESSION] = mod_checksimul,
++#ifdef WITH_PROXY
+ [MOD_PRE_PROXY] = mod_pre_proxy,
+ [MOD_POST_PROXY] = mod_post_proxy,
++#endif
+ [MOD_POST_AUTH] = mod_post_auth,
+ #ifdef WITH_COA
+ [MOD_RECV_COA] = mod_recv_coa,
diff --git a/net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch b/net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch
new file mode 100644
index 000000000000..04223657d5f5
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-3.0.20-systemd-service.patch
@@ -0,0 +1,57 @@
+diff --git a/debian/freeradius.service b/debian/freeradius.service
+index 378702d184..ee33c2a294 100644
+--- a/debian/freeradius.service
++++ b/debian/freeradius.service
+@@ -7,7 +7,6 @@ Documentation=man:radiusd(8) man:radiusd.conf(5) http://wiki.freeradius.org/ htt
+ Type=notify
+ WatchdogSec=60
+ NotifyAccess=all
+-EnvironmentFile=-/etc/default/freeradius
+
+ # FreeRADIUS can do static evaluation of policy language rules based
+ # on environmental variables which is very useful for doing per-host
+@@ -25,16 +24,15 @@ MemoryLimit=2G
+ # Ensure the daemon can still write its pidfile after it drops
+ # privileges. Combination of options that work on a variety of
+ # systems. Test very carefully if you alter these lines.
+-RuntimeDirectory=freeradius
++RuntimeDirectory=radiusd
+ RuntimeDirectoryMode=0775
+ # This does not work on Debian Jessie:
+-User=freerad
+-Group=freerad
+-# This does not work on Ubuntu Bionic:
+-ExecStartPre=/bin/chown freerad:freerad /var/run/freeradius
++User=radius
++Group=radius
+
+-ExecStartPre=/usr/sbin/freeradius $FREERADIUS_OPTIONS -Cx -lstdout
+-ExecStart=/usr/sbin/freeradius -f $FREERADIUS_OPTIONS
++ExecStartPre=/usr/sbin/radiusd $RADIUSD_OPTIONS -Cx -lstdout
++ExecStart=/usr/sbin/radiusd -f $RADIUSD_OPTIONS
++ExecReload=/bin/kill -HUP $MAINPID
+ Restart=on-failure
+ RestartSec=5
+
+@@ -42,7 +40,7 @@ RestartSec=5
+ NoNewPrivileges=true
+
+ # Allow binding to secure ports, broadcast addresses, and raw interfaces.
+-#CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETUID CAP_SETGID CAP_CHOWN CAP_DAC_OVERRIDE
++CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SETUID CAP_SETGID CAP_CHOWN CAP_DAC_OVERRIDE
+
+ # Private /tmp that isn't shared by other processes
+ PrivateTmp=true
+@@ -60,10 +58,10 @@ ProtectKernelTunables=true
+ SystemCallArchitectures=native
+
+ # We shouldn't be writing to the configuration directory
+-ReadOnlyDirectories=/etc/freeradius/
++ReadOnlyDirectories=/etc/raddb/
+
+ # We can read and write to the log directory.
+-ReadWriteDirectories=/var/log/freeradius/
++ReadWriteDirectories=/var/log/radius/
+
+ [Install]
+ WantedBy=multi-user.target
diff --git a/net-dialup/freeradius/freeradius-3.0.20.ebuild b/net-dialup/freeradius/freeradius-3.0.20.ebuild
new file mode 100644
index 000000000000..5d43f28c636d
--- /dev/null
+++ b/net-dialup/freeradius/freeradius-3.0.20.ebuild
@@ -0,0 +1,266 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{6,7,8} )
+inherit autotools pam python-single-r1 systemd
+
+MY_P="${PN}-server-${PV}"
+
+DESCRIPTION="Highly configurable free RADIUS server"
+SRC_URI="
+ ftp://ftp.freeradius.org/pub/radius/${MY_P}.tar.gz
+ ftp://ftp.freeradius.org/pub/radius/old/${MY_P}.tar.gz
+"
+HOMEPAGE="http://www.freeradius.org/"
+
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~sparc ~x86"
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="
+ debug firebird iodbc kerberos ldap libressl memcached mysql mongodb odbc oracle pam
+ pcap postgres python readline redis rest samba sqlite ssl systemd
+"
+RESTRICT="test firebird? ( bindist )"
+
+# NOTE: Temporary freeradius doesn't support linking with mariadb client
+# libs also if code is compliant, will be available in the next release.
+# (http://lists.freeradius.org/pipermail/freeradius-devel/2018-October/013228.html)a
+
+# TODO: rlm_mschap works with both samba library or without. I need to avoid
+# linking of samba library if -samba is used.
+RDEPEND="acct-group/radius
+ acct-user/radius
+ !net-dialup/cistronradius
+ dev-lang/perl:=
+ sys-libs/gdbm:=
+ sys-libs/talloc
+ 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-basic )
+ pam? ( sys-libs/pam )
+ pcap? ( net-libs/libpcap )
+ postgres? ( dev-db/postgresql:= )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline:0= )
+ redis? ( dev-libs/hiredis:= )
+ rest? ( dev-libs/json-c:= )
+ samba? ( net-fs/samba )
+ sqlite? ( dev-db/sqlite:3 )
+ ssl? (
+ !libressl? ( dev-libs/openssl:0=[-bindist] )
+ libressl? ( dev-libs/libressl:0= )
+ )
+ systemd? ( sys-apps/systemd )"
+DEPEND="${RDEPEND}"
+
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.0.18-libressl.patch
+ "${FILESDIR}"/${P}-systemd-service.patch
+ # Fix rlm_python3 build
+ # Backport from rlm_python changes to rlm_python3
+ "${FILESDIR}"/${P}-py3-fixes.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 of python2
+ rm -r src/modules/rlm_python || die
+ use python || { rm -r src/modules/rlm_python3 || die ; }
+ use rest || { rm -r src/modules/rlm_rest || 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
+ rm -r src/modules/rlm_eap/types/rlm_eap_tnc || die # requires TNCS library
+ rm -r src/modules/rlm_eap/types/rlm_eap_ikev2 || die # requires libeap-ikev2
+ rm -r src/modules/rlm_opendirectory || die # requires some membership.h
+ 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
+ # build shared libraries using jlibtool --shared
+ sed -i \
+ -e '/$(LIBTOOL)/s|--quiet ||g' \
+ -e 's:--mode=\(compile\|link\):& --shared:g' \
+ Make.inc.in || die
+
+ 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
+ --with-system-libtool
+ --with-system-libltdl
+ --with-ascend-binary
+ --with-udpfromto
+ --with-dhcp
+ --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 ssl openssl)
+ $(use_with systemd systemd)
+ )
+ # fix 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
+
+ use readline || export ac_cv_lib_readline=no
+ use pcap || export ac_cv_lib_pcap_pcap_open_live=no
+
+ 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 (#509498)
+ emake -j1 \
+ Q='' ECHO=true \
+ LOCAL_CERT_PRODUCTS='' \
+ R="${D}" \
+ install
+
+ pamd_mimic_system radiusd auth account password session
+
+ dodoc CREDITS
+
+ rm "${ED}/usr/sbin/rc.radiusd" || die
+
+ newinitd "${FILESDIR}/radius.init-r3" radiusd
+ newconfd "${FILESDIR}/radius.conf-r4" 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_newtmpfilesd "${FILESDIR}"/freeradius.tmpfiles freeradius.conf
+ 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."
+ fowners root:radius "${ROOT}"/etc/raddb/certs
+ fowners root:radius "${ROOT}"/etc/raddb/certs/ca.pem
+ fowners root:radius "${ROOT}"/etc/raddb/certs/server.{key,crt,pem}
+ 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
index 0f82cd9f9ed5..6d8b1cc66234 100644
--- a/net-dialup/freeradius/metadata.xml
+++ b/net-dialup/freeradius/metadata.xml
@@ -22,5 +22,8 @@
<flag name="redis">
Include support for Redis database
</flag>
+ <flag name="mongodb">
+ Include support for MongoDB database
+ </flag>
</use>
</pkgmetadata>