[Web] Fix some transport verifications
parent
7fed117aac
commit
79ab962d50
|
@ -272,7 +272,7 @@ if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CAC
|
||||||
<form class="form" data-id="rlyhost" role="form" method="post">
|
<form class="form" data-id="rlyhost" role="form" method="post">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="hostname"><?=$lang['admin']['host'];?></label>
|
<label for="hostname"><?=$lang['admin']['host'];?></label>
|
||||||
<input class="form-control input-sm" name="hostname" placeholder='host:25, host, [host]:25, [0.0.0.0]:25' required>
|
<input class="form-control input-sm" name="hostname" placeholder='[0.0.0.0], [0.0.0.0]:25, host:25, host, [host]:25' required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="username"><?=$lang['admin']['username'];?></label>
|
<label for="username"><?=$lang['admin']['username'];?></label>
|
||||||
|
|
|
@ -843,7 +843,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2" for="nexthop"><?=$lang['edit']['nexthop'];?></label>
|
<label class="control-label col-sm-2" for="nexthop"><?=$lang['edit']['nexthop'];?></label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="nexthop" value="<?=htmlspecialchars($result['nexthop'], ENT_QUOTES, 'UTF-8');?>" required>
|
<input type="text" class="form-control" name="nexthop" placeholder='[0.0.0.0], [0.0.0.0]:25, host:25, host, [host]:25' value="<?=htmlspecialchars($result['nexthop'], ENT_QUOTES, 'UTF-8');?>" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|
|
@ -23,9 +23,37 @@ if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admi
|
||||||
if (!empty($transport_details)) {
|
if (!empty($transport_details)) {
|
||||||
// Remove [ and ]
|
// Remove [ and ]
|
||||||
$hostname_w_port = preg_replace('/\[|\]/', '', $nexthop);
|
$hostname_w_port = preg_replace('/\[|\]/', '', $nexthop);
|
||||||
|
preg_match('/\[.+\](:.+)/', $nexthop, $hostname_port_match);
|
||||||
|
preg_match('/\[\d\.\d\.\d\.\d\](:.+)/', $nexthop, $ipv4_port_match);
|
||||||
|
$has_bracket_and_port = (isset($hostname_port_match[1])) ? true : false;
|
||||||
|
$is_ipv4_and_has_port = (isset($ipv4_port_match[1])) ? true : false;
|
||||||
$skip_lookup_mx = strpos($nexthop, '[');
|
$skip_lookup_mx = strpos($nexthop, '[');
|
||||||
// Explode to hostname and port
|
// Explode to hostname and port
|
||||||
list($hostname, $port) = explode(':', $hostname_w_port);
|
if ($has_bracket_and_port) {
|
||||||
|
$port = substr($hostname_w_port, strrpos($hostname_w_port, ':') + 1);
|
||||||
|
$hostname = rtrim($hostname_w_port, ':' . $port);
|
||||||
|
if (filter_var($hostname, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
||||||
|
$hostname = '[' . $hostname . ']:';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ($is_ipv4_and_has_port) {
|
||||||
|
$port = substr($hostname_w_port, strrpos($hostname_w_port, ':') + 1);
|
||||||
|
$hostname = rtrim($hostname_w_port, ':' . $port);
|
||||||
|
}
|
||||||
|
if (filter_var($hostname_w_port, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
|
||||||
|
$hostname = $hostname_w_port;
|
||||||
|
$port = null;
|
||||||
|
}
|
||||||
|
elseif (filter_var($hostname_w_port, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
||||||
|
$hostname = '[' . $hostname_w_port . ']';
|
||||||
|
$port = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo "Invalid transport";
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
}
|
||||||
// Try to get MX if host is not [host]
|
// Try to get MX if host is not [host]
|
||||||
if ($skip_lookup_mx === false) {
|
if ($skip_lookup_mx === false) {
|
||||||
getmxrr($hostname, $mx_records, $mx_weight);
|
getmxrr($hostname, $mx_records, $mx_weight);
|
||||||
|
|
|
@ -190,6 +190,9 @@ function transport($_action, $_data = null) {
|
||||||
$active = intval($_data['active']);
|
$active = intval($_data['active']);
|
||||||
$lookup_mx = intval($_data['lookup_mx']);
|
$lookup_mx = intval($_data['lookup_mx']);
|
||||||
$nexthop = trim($_data['nexthop']);
|
$nexthop = trim($_data['nexthop']);
|
||||||
|
if (filter_var($nexthop, FILTER_VALIDATE_IP)) {
|
||||||
|
$nexthop = '[' . $nexthop . ']';
|
||||||
|
}
|
||||||
preg_match('/\[(.+)\].*/', $nexthop, $next_hop_matches);
|
preg_match('/\[(.+)\].*/', $nexthop, $next_hop_matches);
|
||||||
$next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;
|
$next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;
|
||||||
$username = str_replace(':', '\:', trim($_data['username']));
|
$username = str_replace(':', '\:', trim($_data['username']));
|
||||||
|
@ -323,6 +326,9 @@ function transport($_action, $_data = null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
preg_match('/\[(.+)\].*/', $nexthop, $next_hop_matches);
|
preg_match('/\[(.+)\].*/', $nexthop, $next_hop_matches);
|
||||||
|
if (filter_var($nexthop, FILTER_VALIDATE_IP)) {
|
||||||
|
$nexthop = '[' . $nexthop . ']';
|
||||||
|
}
|
||||||
$next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;
|
$next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;
|
||||||
$transports = transport('get');
|
$transports = transport('get');
|
||||||
if (!empty($transports)) {
|
if (!empty($transports)) {
|
||||||
|
|
Loading…
Reference in New Issue