From 7c5bebc943557d771d0310bb7d82fbfbcc51b62b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 11 Dec 2017 16:10:38 +0100 Subject: [dnbd3] Allow configuring alternative IP address for managed proxy --- modules-available/dnbd3/page.inc.php | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'modules-available/dnbd3/page.inc.php') diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 74a23021..39500f83 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -39,6 +39,34 @@ class Page_Dnbd3 extends Page } $bgr = Request::post('bgr', false, 'bool'); $firewall = Request::post('firewall', false, 'bool'); + $overrideIp = false; + $sip = Request::post('fixedip', null, 'string'); + if (empty($sip)) { + $overrideIp = null; + } elseif ($server['fixedip'] !== $overrideIp) { + $ip = ip2long(trim($sip)); + if ($ip !== false) { + $ip = long2ip($ip); + } + if ($ip === false) { + Message::addError('invalid-ipv4', $sip); + return; + } + $res = Database::queryFirst('SELECT serverid FROM dnbd3_server s + LEFT JOIN machine m USING (machineuuid) + WHERE s.fixedip = :ip OR m.clientip = :ip', compact('ip')); + if ($res !== false) { + Message::addError('server-already-exists', $ip); + return; + } + $overrideIp = $ip; + } + if ($overrideIp !== false) { + Database::exec('UPDATE dnbd3_server SET fixedip = :fixedip WHERE machineuuid = :uuid', array( + 'uuid' => $server['machineuuid'], + 'fixedip' => $overrideIp, + )); + } RunMode::setRunMode($server['machineuuid'], 'dnbd3', 'proxy', json_encode(compact('bgr', 'firewall')), false); } @@ -310,10 +338,10 @@ class Page_Dnbd3 extends Page Message::addError('server-non-existent', 'server'); Util::redirect('?do=dnbd3'); } - if (!is_null($server['clientip'])) { - $server['ip'] = $server['clientip']; - } elseif (!is_null($server['fixedip'])) { + if (!is_null($server['fixedip'])) { $server['ip'] = $server['fixedip']; + } elseif (!is_null($server['clientip'])) { + $server['ip'] = $server['clientip']; } else { $server['ip'] = '127.0.0.1'; } -- cgit v1.2.3-55-g7522