diff --git a/src/crons/root_signals.php b/src/crons/root_signals.php index 23cc744..d59866e 100644 --- a/src/crons/root_signals.php +++ b/src/crons/root_signals.php @@ -1,4 +1,7 @@ /dev/null'); + + if ($route && preg_match('/dev\s+([^\s]+)/', $route, $m)) { + $interface = $m[1]; + } else { + return null; + } + } + + // Get interface IP + $output = shell_exec( + 'ip -j addr show ' . escapeshellarg($interface) . ' 2>/dev/null' + ); + + if (!$output) { + return null; + } + + $data = json_decode($output, true); + if (empty($data[0]['addr_info'])) { + return null; + } + + foreach ($data[0]['addr_info'] as $addr) { + if (($addr['family'] ?? null) === 'inet') { + return $addr['local'] ?? null; + } + } + + return null; +} + function loadCron() { global $db; global $rSaveIPTables; + global $AutoUpdateServerIP; CoreUtilities::$rServers = CoreUtilities::getServers(true); $db->query("SELECT `signal_id` FROM `signals` WHERE `server_id` = ? AND `custom_data` = '{\"action\":\"flush\"}' AND `cache` = 0;", SERVER_ID); if (0 < $db->num_rows()) { @@ -153,6 +233,14 @@ function loadCron() { $rReload = true; } } + + //Check curent server IP and update if needed + $rServerIP = getServerIP((CoreUtilities::$rServers[SERVER_ID]['network_interface'] == 'auto' ? null : CoreUtilities::$rServers[SERVER_ID]['network_interface'])); + if ($rServerIP && $rServerIP != CoreUtilities::$rServers[SERVER_ID]['server_ip'] && $AutoUpdateServerIP) { + echo 'Updating server IP from ' . CoreUtilities::$rServers[SERVER_ID]['server_ip'] . ' to ' . $rServerIP . '...' . "\n"; + $db->query('UPDATE `servers` SET `server_ip` = ? WHERE `id` = ?;', $rServerIP, SERVER_ID); + CoreUtilities::$rServers[SERVER_ID]['server_ip'] = $rServerIP; + } } if (0 < CoreUtilities::$rServers[SERVER_ID]['limit_requests']) { $rLimitConf = 'limit_req_zone global zone=two:10m rate=' . intval(CoreUtilities::$rServers[SERVER_ID]['limit_requests']) . 'r/s;'; @@ -319,7 +407,7 @@ function loadCron() { if ($rCurrentCron != $rActualCron) { echo 'Updating Crons...' . "\n"; unlink(TMP_PATH . 'crontab'); - }else{ + } else { echo "Crons valid.\n"; } } @@ -508,25 +596,7 @@ function loadCron() { exit(); } } -function getBlockedIPs() { - $rReturn = array(); - exec('sudo iptables -nL --line-numbers -t filter', $rLines); - foreach ($rLines as $rLine) { - $rLine = explode(' ', preg_replace('!\\s+!', ' ', $rLine)); - if ($rLine[1] == 'DROP') { - $rReturn[] = $rLine[4]; - } - } - $rLines = ''; - exec('sudo ip6tables -nL --line-numbers -t filter', $rLines); - foreach ($rLines as $rLine) { - $rLine = explode(' ', preg_replace('!\\s+!', ' ', $rLine)); - if ($rLine[1] == 'DROP') { - $rReturn[] = $rLine[3]; - } - } - return $rReturn; -} + function shutdown() { global $db; global $rIdentifier;