|
@@ -1,56 +1,44 @@
|
|
|
<?php
|
|
|
header('Content-Type: text/plain');
|
|
|
-require_once "vars.inc.php";
|
|
|
-
|
|
|
ini_set('error_reporting', 0);
|
|
|
|
|
|
-function in_net($addr, $net)
|
|
|
-{
|
|
|
- $net = explode('/', $net);
|
|
|
- if (count($net) > 1)
|
|
|
- $mask = $net[1];
|
|
|
- $net = inet_pton($net[0]);
|
|
|
- $addr = inet_pton($addr);
|
|
|
-
|
|
|
- $length = strlen($net); // 4 for IPv4, 16 for IPv6
|
|
|
- if (strlen($net) != strlen($addr))
|
|
|
- return FALSE;
|
|
|
- if (!isset($mask))
|
|
|
- $mask = $length * 8;
|
|
|
+$redis = new Redis();
|
|
|
+$redis->connect('redis-mailcow', 6379);
|
|
|
|
|
|
- $addr_bin = '';
|
|
|
- $net_bin = '';
|
|
|
- for ($i = 0; $i < $length; ++$i)
|
|
|
- {
|
|
|
- $addr_bin .= str_pad(decbin(ord(substr($addr, $i, $i+1))), 8, '0', STR_PAD_LEFT);
|
|
|
- $net_bin .= str_pad(decbin(ord(substr($net, $i, $i+1))), 8, '0', STR_PAD_LEFT);
|
|
|
- }
|
|
|
-
|
|
|
- return substr($addr_bin, 0, $mask) == substr($net_bin, 0, $mask);
|
|
|
+function in_net($addr, $net) {
|
|
|
+ $net = explode('/', $net);
|
|
|
+ if (count($net) > 1) {
|
|
|
+ $mask = $net[1];
|
|
|
+ }
|
|
|
+ $net = inet_pton($net[0]);
|
|
|
+ $addr = inet_pton($addr);
|
|
|
+ $length = strlen($net); // 4 for IPv4, 16 for IPv6
|
|
|
+ if (strlen($net) != strlen($addr)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!isset($mask)) {
|
|
|
+ $mask = $length * 8;
|
|
|
+ }
|
|
|
+ $addr_bin = '';
|
|
|
+ $net_bin = '';
|
|
|
+ for ($i = 0; $i < $length; ++$i) {
|
|
|
+ $addr_bin .= str_pad(decbin(ord(substr($addr, $i, $i+1))), 8, '0', STR_PAD_LEFT);
|
|
|
+ $net_bin .= str_pad(decbin(ord(substr($net, $i, $i+1))), 8, '0', STR_PAD_LEFT);
|
|
|
+ }
|
|
|
+ return substr($addr_bin, 0, $mask) == substr($net_bin, 0, $mask);
|
|
|
}
|
|
|
|
|
|
-$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;
|
|
|
-$opt = [
|
|
|
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
|
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
|
- PDO::ATTR_EMULATE_PREPARES => false,
|
|
|
-];
|
|
|
try {
|
|
|
- $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
|
|
|
- $stmt = $pdo->query("SELECT host FROM `forwarding_hosts`");
|
|
|
- $networks = $stmt->fetchAll(PDO::FETCH_COLUMN);
|
|
|
- foreach ($networks as $network)
|
|
|
- {
|
|
|
- if (in_net($_GET['host'], $network))
|
|
|
- {
|
|
|
- echo '200 permit';
|
|
|
+ foreach ($redis->hGetAll('WHITELISTED_FWD_HOST') as $host => $source) {
|
|
|
+ if (in_net($_GET['host'], $host)) {
|
|
|
+ echo '200 PERMIT';
|
|
|
exit;
|
|
|
}
|
|
|
}
|
|
|
- echo '200 dunno';
|
|
|
+ echo '200 DUNNO';
|
|
|
}
|
|
|
-catch (PDOException $e) {
|
|
|
- echo '200 dunno';
|
|
|
+catch (RedisException $e) {
|
|
|
+ echo '200 DUNNO';
|
|
|
exit;
|
|
|
}
|
|
|
?>
|