diff --git a/net/pfSense-pkg-freeradius3/files/usr/local/pkg/freeradius.inc b/net/pfSense-pkg-freeradius3/files/usr/local/pkg/freeradius.inc index 7244e73bb87c3753a6e0241a86600ad1dfca2b9d..15b1ace1eb0a002aa1171790710aefa4f77982a3 100644 --- a/net/pfSense-pkg-freeradius3/files/usr/local/pkg/freeradius.inc +++ b/net/pfSense-pkg-freeradius3/files/usr/local/pkg/freeradius.inc @@ -78,7 +78,6 @@ function freeradius_get_libdir() { } function freeradius_deinstall_command() { - global $config; $pidFile = "/var/run/radiusd.pid"; $i = 0; @@ -90,17 +89,24 @@ function freeradius_deinstall_command() { } /* Remove package settings from config if 'Keep Settings' is disabled */ - init_config_arr(array('installedpackages', 'freeradiussettings', 'config', 0)); - if (isset($config['installedpackages']['freeradiussettings']['config'][0]['keep_settings']) && - empty($config['installedpackages']['freeradiussettings']['config'][0]['keep_settings'])) { + if (!config_path_enabled('installedpackages/freeradiussettings/config/0/', 'keep_settings')) { + $uninstall = array( + 'installedpackages/freeradius', + 'installedpackages/freeradiusauthorizedmacs', + 'installedpackages/freeradiusclients', + 'installedpackages/freeradiusinterfaces', + 'installedpackages/freeradiussettings', + 'installedpackages/freeradiuseapconf', + 'installedpackages/freeradiussqlconf', + 'installedpackages/freeradiusmodulesldap', + 'installedpackages/freeradiussync' + ); + log_error("[freeRADIUS] Removing all FreeRADIUS settings since 'Keep Settings/Data' is disabled..."); - $uninstall = array('freeradius', 'freeradiusauthorizedmacs', 'freeradiusclients', 'freeradiusinterfaces', - 'freeradiussettings', 'freeradiuseapconf', 'freeradiussqlconf', 'freeradiusmodulesldap', 'freeradiussync'); - foreach ($uninstall as $unin) { - if (is_array($config['installedpackages'][$unin])) { - unset($config['installedpackages'][$unin]); - } + foreach ($uninstall as $path) { + config_del_path($path); } + rmdir_recursive(FREERADIUS_RADDB, false); write_config("[freeRADIUS] Package uninstalled."); } @@ -130,26 +136,27 @@ function freeradius_chown_recursive($dir, $user = "root", $group = "wheel") { } function freeradius_upgrade_config() { - global $config; - // FreeRADIUS built-in certificate manager was removed (Bug #7170) - if (is_array($config['installedpackages']['freeradiuscerts'])) { - unset($config['installedpackages']['freeradiuscerts']); - log_error(gettext("freeRADIUS: Removing deprecated built-in certificate manager configuration.")); - } - if (is_array($config['installedpackages']['freeradiuseapconf']['config'][0])) { - if (isset($config['installedpackages']['freeradiuseapconf']['config'][0]['vareapconfchoosecertmanager'])) { - unset($config['installedpackages']['freeradiuseapconf']['config'][0]['vareapconfchoosecertmanager']); - } - if (isset($config['installedpackages']['freeradiuseapconf']['config'][0]['vareapconfprivatekeypassword'])) { - unset($config['installedpackages']['freeradiuseapconf']['config'][0]['vareapconfprivatekeypassword']); + $deprecated_config_paths = array( + 'installedpackages/freeradiuscerts', + 'installedpackages/freeradiuseapconf/config/0/vareapconfchoosecertmanager', + 'installedpackages/freeradiuseapconf/config/0/vareapconfprivatekeypassword' + ); + + $isremoved = false; + foreach ($deprecated_config_paths as $path) { + if (config_get_path($path)) { + $isremoved = true; + config_del_path($path); } } + + if ($isremoved) { + log_error(gettext("freeRADIUS: Removed deprecated built-in certificate manager configuration.")); + } } function freeradius_install_command() { - global $config; - // We create here different folders for different counters. safe_mkdir("/var/log/radacct/datacounter/daily"); safe_mkdir("/var/log/radacct/datacounter/weekly"); @@ -282,7 +289,6 @@ EOD; } function freeradius_settings_resync($restart_svc = true) { - global $config; $conf = ''; // put the constant to a variable @@ -303,11 +309,7 @@ function freeradius_settings_resync($restart_svc = true) { touch("/var/log/radwtmp"); } - if (is_array($config['installedpackages']['freeradiussettings']['config'][0])) { - $varsettings = $config['installedpackages']['freeradiussettings']['config'][0]; - } else { - $varsettings = array(); - } + $varsettings = config_get_path('installedpackages/freeradiussettings/config/0', []); // Variables: General configuration $varsettingsmaxrequests = ($varsettings['varsettingsmaxrequests'] ?: '1024'); @@ -340,11 +342,7 @@ function freeradius_settings_resync($restart_svc = true) { $varsettingsmaxrequestsperserver = ($varsettings['varsettingsmaxrequestsperserver'] ?: '0'); // For more details look at freeradius_sqlconf_resync() - if (is_array($config['installedpackages']['freeradiussqlconf']['config'][0])) { - $sqlconf = $config['installedpackages']['freeradiussqlconf']['config'][0]; - } else { - $sqlconf = array(); - } + $sqlconf = config_get_path('installedpackages/freeradiussqlconf/config/0', []); // Dis-/Enable SQL in "instatiate" section in freeradius_settings_resync() and radiusd.conf SQL SERVER 2 if ($sqlconf['varsqlconf2includeenable'] == 'on') { @@ -479,10 +477,9 @@ EOD; } function freeradius_users_resync($via_rpc = false) { - global $config; $conf = ''; - $arrausers = config_get_path('installedpackages/freeradius/config', []); + $arrusers = config_get_path('installedpackages/freeradius/config', []); if (!empty($arrusers)) { foreach ($arrusers as $users) { @@ -802,7 +799,6 @@ EOD; } } - function freeradius_authorizedmacs_resync($restart_svc = true, $via_rpc = false) { $conf = ''; @@ -1157,16 +1153,11 @@ EOD; } } - - function freeradius_eapconf_resync($restart_svc = true) { - global $config; $conf = ''; - if (!is_array($config['installedpackages']['freeradiuseapconf']['config'][0])) { - $config['installedpackages']['freeradiuseapconf']['config'][0] = array(); - } - $eapconf = & $config['installedpackages']['freeradiuseapconf']['config'][0]; + $eapconf_path = 'installedpackages/freeradiuseapconf/config/0'; + $eapconf = config_get_path($eapconf_path); // Disable weak EAP types like MD5, and GTC if ($eapconf['vareapconfdisableweakeaptypes'] == '') { @@ -1194,12 +1185,6 @@ EOD; // Variables: EAP-TLS $vareapconffragmentsize = ($eapconf['vareapconffragmentsize'] ?: '1024'); $vareapconfincludelength = ($eapconf['vareapconfincludelength'] ?: 'yes'); - $vareapconfcountry = ($eapconf['vareapconfcountry'] ?: ''); - $vareapconfstate = ($eapconf['vareapconfstate'] ?: ''); - $vareapconfcity = ($eapconf['vareapconfcity'] ?: ''); - $vareapconforganization = ($eapconf['vareapconforganization'] ?: ''); - $vareapconfemail = ($eapconf['vareapconfemail'] ?: ''); - $vareapconfcommonname = ($eapconf['vareapconfcommonname'] ?: 'internal-ca'); // Variables: Cache $vareapconfcacheenablecache = ($eapconf['vareapconfcacheenablecache'] ?: 'no'); @@ -1221,7 +1206,6 @@ EOD; $vareapconfpeapdefaulteaptype = ($eapconf['vareapconfpeapdefaulteaptype'] ?: 'mschapv2'); $vareapconfpeapcopyrequesttotunnel = ($eapconf['vareapconfpeapcopyrequesttotunnel'] ?: 'no'); $vareapconfpeapusetunneledreply = ($eapconf['vareapconfpeapusetunneledreply'] ? 1 : 0); - $vareapconfpeapsohenable = ($eapconf['vareapconfpeapsohenable'] ?: 'Disable'); // This is for enable/disbable MS SoH in EAP-PEAP and the virtuial-server "soh-server" if ($eapconf['vareapconfpeapsohenable'] == 'Enable') { @@ -1238,20 +1222,9 @@ EOD; unlink_if_exists(FREERADIUS_SITESENABLED . "/soh"); } - // For pfSense cert manager $ca_cert = lookup_ca($eapconf["ssl_ca_cert"]); if ($ca_cert == false) { - if (!is_array($config['ca'])) { - $config['ca'] = array(); - } - $a_ca =& $config['ca']; - - if (!is_array($config['cert'])) { - $config['cert'] = array(); - } - $a_cert =& $config['cert']; - /* Generate CA with generic details */ $ca = array(); $ca['refid'] = uniqid(); @@ -1264,7 +1237,9 @@ EOD; } else { $eapconf["ssl_ca_cert"] = $ca['refid']; $ca_cert = $ca; + $a_ca = config_get_path('ca'); $a_ca[] = $ca; + config_set_path('ca', $a_ca); $cert = array(); $cert['refid'] = uniqid(); $cert['descr'] = "FreeRADIUS Server Certificate"; @@ -1276,7 +1251,9 @@ EOD; file_notice("FreeRADIUS", gettext("Cannot create temporary FreeRADIUS certificate. Visit Services > FreeRADIUS > EAP tab and configure server certificates in the 'Certificates for TLS' section: " . openssl_error_string())); $cert_error = true; } else { + $a_cert = config_get_path('cert'); $a_cert[] = $cert; + config_set_path('cert', $a_cert); $eapconf["ssl_server_cert"] = $cert['refid']; } } @@ -1304,7 +1281,7 @@ EOD; file_put_contents(FREERADIUS_CERTS . "/server_key.pem", base64_decode($svr_cert['prv'])); } if (base64_decode($svr_cert['crt'])) { - file_put_contents(FREERADIUS_CERTS . "/server_cert.pem", + file_put_contents(FREERADIUS_CERTS . "/server_cert.pem", base64_decode($svr_cert['crt']) . "\n" . ca_chain($svr_cert)); } @@ -1354,6 +1331,8 @@ EOD; $vareapconftlsminversion = '1.0'; } + config_set_path($eapconf_path, $eapconf); + $conf .= << 'none', 'descr' => 'none'); - if (is_array($config['crl'])) { - foreach ($config['crl'] as $crl) { - $crl_arr[] = array('refid' => $crl['refid'], 'descr' => $crl['descr']); - } + foreach (config_get_path('crl', []) as $crl) { + $crl_arr[] = array('refid' => $crl['refid'], 'descr' => $crl['descr']); } return $crl_arr; } @@ -1706,7 +1681,7 @@ function freeradius_get_ca_crl() { function freeradius_sqlconf_resync() { $conf = ''; - $sqlconf = config_get_path('installedpackages/freeradiussqlconf/config', []); + $sqlconf = config_get_path('installedpackages/freeradiussqlconf/config/0', []); // Variables: SQL DATABASE 1 $varsqlconfdatabase = ($sqlconf['varsqlconfdatabase'] ?: 'mysql'); @@ -1893,7 +1868,6 @@ sqlcounter expire_on_login { \$INCLUDE \${modconfdir}/sql/counter/\${dialect}/\${.:instance}.conf } - EOD; $filename = FREERADIUS_MODSENABLED . '/sqlcounter'; @@ -1921,7 +1895,8 @@ EOD; function freeradius_serverdefault_resync() { $conf = ''; - $arrmodulesldap = config_get_path('installedpackages/freeradiusmodulesldap/config', []); + // Get Variables from freeradiusmodulesldap.xml + $arrmodulesldap = config_get_path('installedpackages/freeradiusmodulesldap/config/0', []); // failover/loadbalancing mode $varmodulesldap2failover = ($arrmodulesldap['varmodulesldap2failover'] ?: 'redundant'); @@ -1983,18 +1958,8 @@ EOD; @unlink_if_exists(FREERADIUS_MODSENABLED . '/ldap'); } - $sqlconf = config_get_path('installedpackages/freeradiussqlconf/config', []); - - $varsqlconfenableauthorize = ($sqlconf['varsqlconfenableauthorize'] ?: 'Disable'); - $varsqlconfenableaccounting = ($sqlconf['varsqlconfenableaccounting'] ?: 'Disable'); - $varsqlconfenablesession = ($sqlconf['varsqlconfenablesession'] ?: 'Disable'); - $varsqlconfenablepostauth = ($sqlconf['varsqlconfenablepostauth'] ?: 'Disable'); - - // Get Variables from freeradiussqlconf.xml for DATABASE 2 - $varsqlconf2enableauthorize = ($sqlconf['varsqlconf2enableauthorize'] ?: 'Disable'); - $varsqlconf2enableaccounting = ($sqlconf['varsqlconf2enableaccounting'] ?: 'Disable'); - $varsqlconf2enablesession = ($sqlconf['varsqlconf2enablesession'] ?: 'Disable'); - $varsqlconf2enablepostauth = ($sqlconf['varsqlconf2enablepostauth'] ?: 'Disable'); + // Get Variables from freeradiussqlconf.xml for DATABASE 1 + $sqlconf = config_get_path('installedpackages/freeradiussqlconf/config/0', []); // authorize section DATABASE 2 if (($sqlconf['varsqlconf2includeenable'] == 'on') && ($sqlconf['varsqlconf2enableauthorize'] == 'Enable')) { @@ -2108,7 +2073,9 @@ EOD; $varsqlconfpostauthtypereject = '# sql'; } - $varsettings = config_get_path('installedpackages/freeradiussettings/config', []); + // Changing authorize section for plain mac auth + // Variables: If not using 802.1x, mac address must be known + $varsettings = config_get_path('installedpackages/freeradiussettings/config/0', []); // If unchecked we need the normal EAP section. if (!$varsettings['varsettingsenablemacauth']) { @@ -2209,7 +2176,6 @@ EOD; } // endforeach } // endif empty - $conf .= <<setCredentials($username, $password); - if ($g['debug']) { + if (g_has('debug')) { $cli->setDebug(1); } /* Send our XMLRPC message and timeout after defined sync timeout value */ @@ -2635,7 +2592,6 @@ function freeradius_all_after_XMLRPC_resync() { } function freeradius_modulescounter_resync() { - global $config; $conf = ''; $conf .= << "/var/log/radacct/datacounter/\$TIMERANGE/used-octets-\$USERNAME" @@ -3656,7 +3599,6 @@ EOD; } function freeradius_datacounter_acct_resync() { - global $config; $conf = ''; $conf .= <<