diff --git a/admin_domains.php b/admin_domains.php
index b892e999..fc2a3dae 100644
--- a/admin_domains.php
+++ b/admin_domains.php
@@ -47,8 +47,6 @@ if($page == 'domains'
$log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_domains");
$fields = array(
'd.domain' => $lng['domains']['domainname'],
- 'ip.ip' => $lng['admin']['ipsandports']['ip'],
- 'ip.port' => $lng['admin']['ipsandports']['port'],
'c.name' => $lng['customer']['name'],
'c.firstname' => $lng['customer']['firstname'],
'c.company' => $lng['customer']['company'],
@@ -57,7 +55,7 @@ if($page == 'domains'
);
$paging = new paging($userinfo, $db, TABLE_PANEL_DOMAINS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']);
$domains = '';
- $result = $db->query("SELECT `d`.*, `c`.`loginname`, `c`.`name`, `c`.`firstname`, `c`.`company`, `c`.`standardsubdomain`, `ad`.`id` AS `aliasdomainid`, `ad`.`domain` AS `aliasdomain`, `ip`.`id` AS `ipid`, `ip`.`ip`, `ip`.`port` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` " . "LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d`.`aliasdomain`=`ad`.`id` " . "LEFT JOIN `" . TABLE_PANEL_IPSANDPORTS . "` `ip` ON (`d`.`ipandport` = `ip`.`id`) " . "WHERE `d`.`parentdomainid`='0' " . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = '" . (int)$userinfo['adminid'] . "' ") . " " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
+ $result = $db->query("SELECT `d`.*, `c`.`loginname`, `c`.`name`, `c`.`firstname`, `c`.`company`, `c`.`standardsubdomain`, `ad`.`id` AS `aliasdomainid`, `ad`.`domain` AS `aliasdomain` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` " . "LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d`.`aliasdomain`=`ad`.`id` WHERE `d`.`parentdomainid`='0' " . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = '" . (int)$userinfo['adminid'] . "' ") . " " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
$paging->setEntries($db->num_rows($result));
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
@@ -70,14 +68,21 @@ if($page == 'domains'
$row['domain'] = $idna_convert->decode($row['domain']);
$row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']);
- if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
+ $resultips = $db->query("SELECT `ips`.* FROM `".TABLE_DOMAINTOIP . "` AS `dti`, `".TABLE_PANEL_IPSANDPORTS."` AS `ips` WHERE `dti`.`id_ipandports` = `ips`.`id` AND `dti`.`id_domain` = " . (int)$row['id']);
+
+ $row['ipandport'] = '';
+ while ($rowip = $db->fetch_array($resultips))
{
- $row['ipandport'] = '[' . $row['ip'] . ']:' . $row['port'];
- }
- else
- {
- $row['ipandport'] = $row['ip'] . ':' . $row['port'];
+ if(filter_var($rowip['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
+ {
+ $row['ipandport'] .= '[' . $rowip['ip'] . ']:' . $rowip['port'] . "\n";
+ }
+ else
+ {
+ $row['ipandport'] .= $rowip['ip'] . ':' . $rowip['port'] . "\n";
+ }
}
+ $row['ipandport'] = substr($row['ipandport'], 0, -1);
if(!isset($domain_array[$row['domain']]))
{
@@ -123,6 +128,8 @@ if($page == 'domains'
{
$row['customername'] = getCorrectFullUserDetails($row);
$row = htmlentities_array($row);
+ // display a nice list of IP's
+ $row['ipandport'] = str_replace("\n", "
", $row['ipandport']);
eval("\$domains.=\"" . getTemplate("domains/domains_domain") . "\";");
$count++;
}
@@ -190,6 +197,7 @@ if($page == 'domains'
$db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `subdomains_used` = `subdomains_used` - " . (int)($deleted_domains - 1) . " WHERE `customerid` = '" . (int)$result['customerid'] . "'");
$db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` - 1 WHERE `adminid` = '" . (int)$userinfo['adminid'] . "'");
$db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `standardsubdomain`=\'0\' WHERE `standardsubdomain`=\'' . (int)$result['id'] . '\' AND `customerid`=\'' . (int)$result['customerid'] . '\'');
+ $db->query("DELETE FROM `" . TABLE_DOMAINTOIP . "` WHERE `id_domain` = '" . (int)$id . "'");
$db->query("DELETE FROM `" . TABLE_PANEL_DOMAINREDIRECTS . "` WHERE `did` = '".(int)$id."'");
$log->logAction(ADM_ACTION, LOG_INFO, "deleted domain/subdomains (#" . $result['id'] . ")");
updateCounters();
@@ -396,42 +404,63 @@ if($page == 'domains'
$additional_ip_condition = '';
}
- $ipandport = intval($_POST['ipandport']);
- $ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ipandport) . "' AND `ssl` = '0'" . $additional_ip_condition);
-
- if(!isset($ipandport_check['id'])
- || $ipandport_check['id'] == '0'
- || $ipandport_check['id'] != $ipandport)
- {
- standard_error('ipportdoesntexist');
+ $ipandports = array();
+ if (isset($_POST['ipandport']) && !is_array($_POST['ipandport'])) {
+ $_POST['ipandport'] = unserialize($_POST['ipandport']);
}
- if($settings['system']['use_ssl'] == "1"
- && isset($_POST['ssl'])
- /*&& isset($_POST['ssl_redirect'])*/
- && isset($_POST['ssl_ipandport'])
- && $_POST['ssl'] != '0')
- {
- $ssl = 1; // if ssl is set and != 0 it can only be 1
+ if (isset($_POST['ipandport']) && is_array($_POST['ipandport'])) {
+ foreach($_POST['ipandport'] as $ipandport) {
+ $ipandport = intval($ipandport);
+ $ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ipandport) . "' " . $additional_ip_condition);
+ if(!isset($ipandport_check['id'])
+ || $ipandport_check['id'] == '0'
+ || $ipandport_check['id'] != $ipandport
+ ) {
+ standard_error('ipportdoesntexist');
+ } else {
+ $ipandports[] = $ipandport;
+ }
+ }
+ }
+
+ if ($settings['system']['use_ssl'] == "1"
+ && isset($_POST['ssl_ipandport'])
+ ) {
$ssl_redirect = 0;
if (isset($_POST['ssl_redirect'])) {
$ssl_redirect = (int)$_POST['ssl_redirect'];
}
- $ssl_ipandport = (int)$_POST['ssl_ipandport'];
- $ssl_ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ssl_ipandport) . "' AND `ssl` = '1'" . $additional_ip_condition);
- if(!isset($ssl_ipandport_check['id'])
- || $ssl_ipandport_check['id'] == '0'
- || $ssl_ipandport_check['id'] != $ssl_ipandport)
- {
- standard_error('ipportdoesntexist');
+ $ssl_ipandports = array();
+ if (isset($_POST['ssl_ipandport']) && !is_array($_POST['ssl_ipandport'])) {
+ $_POST['ssl_ipandport'] = unserialize($_POST['ssl_ipandport']);
}
+
+ // Verify SSL-Ports
+ if (isset($_POST['ssl_ipandport']) && is_array($_POST['ssl_ipandport']))
+ {
+ foreach($_POST['ssl_ipandport'] as $ssl_ipandport)
+ {
+ $ssl_ipandport = intval($ssl_ipandport);
+ $ssl_ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ssl_ipandport) . "' " . $additional_ip_condition);
+ if(!isset($ssl_ipandport_check['id'])
+ || $ssl_ipandport_check['id'] == '0'
+ || $ssl_ipandport_check['id'] != $ssl_ipandport)
+ {
+ standard_error('ipportdoesntexist');
+ }
+ else
+ {
+ $ssl_ipandports[] = $ssl_ipandport;
+ }
+ }
+ }
+
}
else
{
- $ssl = 0;
$ssl_redirect = 0;
- $ssl_ipandport = 0;
}
if(!preg_match('/^https?\:\/\//', $documentroot))
@@ -453,10 +482,23 @@ if($page == 'domains'
if($aliasdomain != 0)
{
+ // Overwrite given ipandports with these of the "main" domain
+ $ipandports = array();
+ $origipresult = $db->query("SELECT `id_ipandports` FROM `" . TABLE_DOMAINTOIP ."` WHERE `id_domain` = '" . (int)$aliasdomain . "'");
+ while($origip = $db->fetch_array($origipresult))
+ {
+ $ipandports[] = $origip['id_ipandports'];
+ }
+
// also check ip/port combination to be the same, #176
$aliasdomain_check = $db->query_first('SELECT `d`.`id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$customerid . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$customerid . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\' AND `d`.`ipandport` = \''.(int)$ipandport.'\'');
}
+ if(count($ipandports) == 0)
+ {
+ standard_error('noipportgiven');
+ }
+
if($openbasedir != '1')
{
$openbasedir = '0';
@@ -557,10 +599,9 @@ if($page == 'domains'
'dkim' => $dkim,
'speciallogfile' => $speciallogfile,
'wwwserveralias' => $wwwserveralias,
- 'ipandport' => $ipandport,
- 'ssl' => $ssl,
+ 'ipandport' => serialize($ipandports),
'ssl_redirect' => $ssl_redirect,
- 'ssl_ipandport' => $ssl_ipandport,
+ 'ssl_ipandport' => serialize($ssl_ipandports),
'openbasedir' => $openbasedir,
'phpsettingid' => $phpsettingid,
'mod_fcgid_starter' => $mod_fcgid_starter,
@@ -591,9 +632,45 @@ if($page == 'domains'
$question_nr++;
}
- $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` (`domain`, `customerid`, `adminid`, `documentroot`, `ipandport`,`aliasdomain`, `zonefile`, `dkim`, `wwwserveralias`, `isbinddomain`, `isemaildomain`, `email_only`, `subcanemaildomain`, `caneditdomain`, `openbasedir`, `speciallogfile`, `specialsettings`, `ssl`, `ssl_redirect`, `ssl_ipandport`, `add_date`, `registration_date`, `phpsettingid`, `mod_fcgid_starter`, `mod_fcgid_maxrequests`, `ismainbutsubto`) VALUES ('" . $db->escape($domain) . "', '" . (int)$customerid . "', '" . (int)$adminid . "', '" . $db->escape($documentroot) . "', '" . $db->escape($ipandport) . "', " . (($aliasdomain != 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ", '" . $db->escape($zonefile) . "', '" . $db->escape($dkim) . "', '" . $db->escape($wwwserveralias) . "', '" . $db->escape($isbinddomain) . "', '" . $db->escape($isemaildomain) . "', '" . $db->escape($email_only) . "', '" . $db->escape($subcanemaildomain) . "', '" . $db->escape($caneditdomain) . "', '" . $db->escape($openbasedir) . "', '" . $db->escape($speciallogfile) . "', '" . $db->escape($specialsettings) . "', '" . $ssl . "', '" . $ssl_redirect . "' , '" . $ssl_ipandport . "', '" . $db->escape(time()) . "', '" . $db->escape($registration_date) . "', '" . (int)$phpsettingid . "', '" . (int)$mod_fcgid_starter . "', '" . (int)$mod_fcgid_maxrequests . "', '".(int)$issubof."')");
+ $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` SET
+ `domain` = '" . $db->escape($domain) . "',
+ `customerid` = '" . (int)$customerid . "',
+ `adminid` = '" . (int)$adminid . "',
+ `documentroot` = '" . $db->escape($documentroot) . "',
+ `aliasdomain` = " . (($aliasdomain != 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ",
+ `zonefile` = '" . $db->escape($zonefile) . "',
+ `dkim` = '" . $db->escape($dkim) . "',
+ `wwwserveralias` = '" . $db->escape($wwwserveralias) . "',
+ `isbinddomain` = '" . $db->escape($isbinddomain) . "',
+ `isemaildomain` = '" . $db->escape($isemaildomain) . "',
+ `email_only` = '" . $db->escape($email_only) . "',
+ `subcanemaildomain` = '" . $db->escape($subcanemaildomain) . "',
+ `caneditdomain` = '" . $db->escape($caneditdomain) . "',
+ `openbasedir` = '" . $db->escape($openbasedir) . "',
+ `speciallogfile` = '" . $db->escape($speciallogfile) . "',
+ `specialsettings` = '" . $db->escape($specialsettings) . "',
+ `ssl_redirect` = '" . $ssl_redirect . "',
+ `add_date` = '" . $db->escape(time()) . "',
+ `registration_date` = '" . $db->escape($registration_date) . "',
+ `phpsettingid` = '" . (int)$phpsettingid . "',
+ `mod_fcgid_starter` = '" . (int)$mod_fcgid_starter . "',
+ `mod_fcgid_maxrequests` = '" . (int)$mod_fcgid_maxrequests . "',
+ `ismainbutsubto` = '".(int)$issubof."'
+ ");
$domainid = $db->insert_id();
$db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` + 1 WHERE `adminid` = '" . (int)$adminid . "'");
+ foreach ($ipandports as $ipportid) {
+ $db->query("INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
+ `id_domain` = '" . $domainid . "',
+ `id_ipandports` = '" . (int)$ipportid . "';
+ ");
+ }
+ foreach ($ssl_ipandports as $ssl_ipportid) {
+ $db->query("INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
+ `id_domain` = '" . $domainid . "',
+ `id_ipandports` = '" . (int)$ssl_ipportid . "';
+ ");
+ }
$log->logAction(ADM_ACTION, LOG_INFO, "added domain '" . $domain . "'");
inserttask('1');
@@ -637,8 +714,8 @@ if($page == 'domains'
$result_ssl_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='1' AND `ip`='" . $admin_ip['ip'] . "' ORDER BY `ip`, `port` ASC");
}
- $ipsandports = '';
-
+ // Build array holding all IPs and Ports available to this admin
+ $ipsandports = array();
while($row_ipandport = $db->fetch_array($result_ipsandports))
{
if(filter_var($row_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
@@ -646,11 +723,10 @@ if($page == 'domains'
$row_ipandport['ip'] = '[' . $row_ipandport['ip'] . ']';
}
- $ipsandports.= makeoption($row_ipandport['ip'] . ':' . $row_ipandport['port'], $row_ipandport['id'], $settings['system']['defaultip']);
+ $ipsandports[] = array('label' => $row_ipandport['ip'] . ':' . $row_ipandport['port'], 'value' => $row_ipandport['id']);
}
- $ssl_ipsandports = '';
-
+ $ssl_ipsandports = array();
while($row_ssl_ipandport = $db->fetch_array($result_ssl_ipsandports))
{
if(filter_var($row_ssl_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
@@ -658,7 +734,7 @@ if($page == 'domains'
$row_ssl_ipandport['ip'] = '[' . $row_ssl_ipandport['ip'] . ']';
}
- $ssl_ipsandports.= makeoption($row_ssl_ipandport['ip'] . ':' . $row_ssl_ipandport['port'], $row_ssl_ipandport['id'], $settings['system']['defaultip']);
+ $ssl_ipsandports[] = array('label' => $row_ssl_ipandport['ip'] . ':' . $row_ssl_ipandport['port'], 'value' => $row_ssl_ipandport['id']);
}
$standardsubdomains = array();
@@ -754,6 +830,13 @@ if($page == 'domains'
}
}
+ $ipsresult = $db->query("SELECT `id_ipandports` FROM `" . TABLE_DOMAINTOIP . "` WHERE `id_domain` = '" . (int)$result['id'] . "'");
+ $usedips = array();
+ while ($ipsresultrow = $db->fetch_array($ipsresult))
+ {
+ $usedips[] = $ipsresultrow['id_ipandports'];
+ }
+
if(isset($_POST['send'])
&& $_POST['send'] == 'send')
{
@@ -930,42 +1013,57 @@ if($page == 'domains'
$additional_ip_condition = '';
}
- $ipandport = intval($_POST['ipandport']);
- $ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ipandport) . "' AND `ssl` = '0'" . $additional_ip_condition);
-
- if(!isset($ipandport_check['id'])
- || $ipandport_check['id'] == '0'
- || $ipandport_check['id'] != $ipandport)
- {
- standard_error('ipportdoesntexist');
+ $ipandports = array();
+ if (isset($_POST['ipandport']) && !is_array($_POST['ipandport'])) {
+ $_POST['ipandport'] = unserialize($_POST['ipandport']);
+ }
+ if (isset($_POST['ipandport']) && is_array($_POST['ipandport'])) {
+ foreach($_POST['ipandport'] as $ipandport) {
+ $ipandport = intval($ipandport);
+ $ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ipandport) . "' " . $additional_ip_condition);
+ if (!isset($ipandport_check['id'])
+ || $ipandport_check['id'] == '0'
+ || $ipandport_check['id'] != $ipandport
+ ) {
+ standard_error('ipportdoesntexist');
+ } else {
+ $ipandports[] = $ipandport;
+ }
+ }
}
if($settings['system']['use_ssl'] == "1"
- && isset($_POST['ssl'])
- /*&& isset($_POST['ssl_redirect'])*/
- && isset($_POST['ssl_ipandport'])
- && $_POST['ssl'] != '0')
+ && isset($_POST['ssl_ipandport']))
{
$ssl = 1; // if ssl is set and != 0, it can only be 1
$ssl_redirect = 0;
if (isset($_POST['ssl_redirect'])) {
$ssl_redirect = (int)$_POST['ssl_redirect'];
}
- $ssl_ipandport = (int)$_POST['ssl_ipandport'];
- $ssl_ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ssl_ipandport) . "' AND `ssl` = '1'" . $additional_ip_condition);
- if(!isset($ssl_ipandport_check['id'])
- || $ssl_ipandport_check['id'] == '0'
- || $ssl_ipandport_check['id'] != $ssl_ipandport)
- {
- standard_error('ipportdoesntexist');
+ $ssl_ipandports = array();
+ if (isset($_POST['ssl_ipandport']) && !is_array($_POST['ssl_ipandport'])) {
+ $_POST['ssl_ipandport'] = unserialize($_POST['ssl_ipandport']);
+ }
+ if (isset($_POST['ssl_ipandport']) && is_array($_POST['ssl_ipandport'])) {
+ foreach ($_POST['ssl_ipandport'] as $ssl_ipandport) {
+ $ssl_ipandport = intval($ssl_ipandport);
+ $ssl_ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ssl_ipandport) . "' " . $additional_ip_condition);
+ if (!isset($ssl_ipandport_check['id'])
+ || $ssl_ipandport_check['id'] == '0'
+ || $ssl_ipandport_check['id'] != $ssl_ipandport
+ ) {
+ standard_error('ipportdoesntexist');
+ } else {
+ $ssl_ipandports[] = $ssl_ipandport;
+ }
+ }
}
}
else
{
- $ssl = 0;
$ssl_redirect = 0;
- $ssl_ipandport = 0;
+ $ssl_ipandports[] = '';
}
if(!preg_match('/^https?\:\/\//', $documentroot))
@@ -1018,10 +1116,23 @@ if($page == 'domains'
'id' => 0
);
- if($aliasdomain != 0)
- {
- // also check ip/port combination to be the same, #176
- $aliasdomain_check = $db->query_first('SELECT `d`.`id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$result['customerid'] . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$result['customerid'] . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\' AND `d`.`ipandport` = \''.(int)$ipandport.'\'');
+ if ($aliasdomain != 0) {
+ // Overwrite given ipandports with these of the "main" domain
+ $ipandports = array();
+ $origipresult = $db->query("SELECT `id_ipandports` FROM `" . TABLE_DOMAINTOIP ."` WHERE `id_domain` = '" . (int)$aliasdomain . "'");
+ while ($origip = $db->fetch_array($origipresult)) {
+ $ipandports[] = $origip['id_ipandports'];
+ }
+ $aliasdomain_check = $db->query_first("SELECT `d`.`id` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c`
+ WHERE `d`.`customerid`='" . (int)$customerid . "'
+ AND `d`.`aliasdomain` IS NULL AND
+ `d`.`id` <> `c`.`standardsubdomain`
+ AND `c`.`customerid`='" . (int)$customerid . "'
+ AND `d`.`id`='" . (int)$aliasdomain . "'");
+ }
+
+ if (count($ipandports) == 0) {
+ standard_error('noipportgiven');
}
if($aliasdomain_check['id'] != $aliasdomain)
@@ -1050,10 +1161,7 @@ if($page == 'domains'
'zonefile' => $zonefile,
'dkim' => $dkim,
'wwwserveralias' => $wwwserveralias,
- 'ipandport' => $ipandport,
- 'ssl' => $ssl,
'ssl_redirect' => $ssl_redirect,
- 'ssl_ipandport' => $ssl_ipandport,
'openbasedir' => $openbasedir,
'phpsettingid' => $phpsettingid,
'mod_fcgid_starter' => $mod_fcgid_starter,
@@ -1061,7 +1169,9 @@ if($page == 'domains'
'specialsettings' => $specialsettings,
'registration_date' => $registration_date,
'issubof' => $issubof,
- 'speciallogfile' => $speciallogfile
+ 'speciallogfile' => $speciallogfile,
+ 'ipandport' => serialize($ipandports),
+ 'ssl_ipandport' => serialize($ssl_ipandports)
);
$security_questions = array(
@@ -1084,10 +1194,7 @@ if($page == 'domains'
}
if($documentroot != $result['documentroot']
- || $ipandport != $result['ipandport']
- || $ssl != $result['ssl']
|| $ssl_redirect != $result['ssl_redirect']
- || $ssl_ipandport != $result['ssl_ipandport']
|| $wwwserveralias != $result['wwwserveralias']
|| $openbasedir != $result['openbasedir']
|| $phpsettingid != $result['phpsettingid']
@@ -1106,8 +1213,7 @@ if($page == 'domains'
if($isbinddomain != $result['isbinddomain']
|| $zonefile != $result['zonefile']
- || $dkim != $result['dkim']
- || $ipandport != $result['ipandport'])
+ || $dkim != $result['dkim'])
{
inserttask('4');
}
@@ -1161,8 +1267,78 @@ if($page == 'domains'
$log->logAction(ADM_ACTION, LOG_INFO, "removed specialsettings on all subdomains of domain #" . $id);
}
- $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `customerid` = '" . (int)$customerid . "', `adminid` = '" . (int)$adminid . "', `documentroot`='" . $db->escape($documentroot) . "', `ipandport`='" . $db->escape($ipandport) . "', `ssl`='" . (int)$ssl . "', `ssl_redirect`='" . (int)$ssl_redirect . "', `ssl_ipandport`='" . (int)$ssl_ipandport . "', `aliasdomain`=" . (($aliasdomain != 0 && $alias_check == 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ", `isbinddomain`='" . $db->escape($isbinddomain) . "', `isemaildomain`='" . $db->escape($isemaildomain) . "', `email_only`='" . $db->escape($email_only) . "', `subcanemaildomain`='" . $db->escape($subcanemaildomain) . "', `dkim`='" . $db->escape($dkim) . "', `caneditdomain`='" . $db->escape($caneditdomain) . "', `zonefile`='" . $db->escape($zonefile) . "', `wwwserveralias`='" . $db->escape($wwwserveralias) . "', `openbasedir`='" . $db->escape($openbasedir) . "', `speciallogfile`='" . $db->escape($speciallogfile) . "', `phpsettingid`='" . $db->escape($phpsettingid) . "', `mod_fcgid_starter`='" . $db->escape($mod_fcgid_starter) . "', `mod_fcgid_maxrequests`='" . $db->escape($mod_fcgid_maxrequests) . "', `specialsettings`='" . $db->escape($specialsettings) . "', `registration_date`='" . $db->escape($registration_date) . "', `ismainbutsubto`='" . (int)$issubof . "' WHERE `id`='" . (int)$id . "'");
- $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `customerid` = '" . (int)$customerid . "', `adminid` = '" . (int)$adminid . "', `ipandport`='" . $db->escape($ipandport) . "', `openbasedir`='" . $db->escape($openbasedir) . "', `speciallogfile`='" . $db->escape($speciallogfile) . "', `phpsettingid`='" . $db->escape($phpsettingid) . "', `mod_fcgid_starter`='" . $db->escape($mod_fcgid_starter) . "', `mod_fcgid_maxrequests`='" . $db->escape($mod_fcgid_maxrequests) . "'" . $upd_specialsettings . $updatechildren . " WHERE `parentdomainid`='" . (int)$id . "'");
+ $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET
+ `customerid` = '" . (int)$customerid . "',
+ `adminid` = '" . (int)$adminid . "',
+ `documentroot`='" . $db->escape($documentroot) . "',
+ `ssl_redirect`='" . (int)$ssl_redirect . "',
+ `aliasdomain`=" . (($aliasdomain != 0 && $alias_check == 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ",
+ `isbinddomain`='" . $db->escape($isbinddomain) . "',
+ `isemaildomain`='" . $db->escape($isemaildomain) . "',
+ `email_only`='" . $db->escape($email_only) . "',
+ `subcanemaildomain`='" . $db->escape($subcanemaildomain) . "',
+ `dkim`='" . $db->escape($dkim) . "',
+ `caneditdomain`='" . $db->escape($caneditdomain) . "',
+ `zonefile`='" . $db->escape($zonefile) . "',
+ `wwwserveralias`='" . $db->escape($wwwserveralias) . "',
+ `openbasedir`='" . $db->escape($openbasedir) . "',
+ `speciallogfile`='" . $db->escape($speciallogfile) . "',
+ `phpsettingid`='" . $db->escape($phpsettingid) . "',
+ `mod_fcgid_starter`='" . $db->escape($mod_fcgid_starter) . "',
+ `mod_fcgid_maxrequests`='" . $db->escape($mod_fcgid_maxrequests) . "',
+ `specialsettings`='" . $db->escape($specialsettings) . "',
+ `registration_date`='" . $db->escape($registration_date) . "',
+ `ismainbutsubto`='" . (int)$issubof . "' WHERE `id`='" . (int)$id . "'
+ ");
+ $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET
+ `customerid` = '" . (int)$customerid . "',
+ `adminid` = '" . (int)$adminid . "',
+ `openbasedir`='" . $db->escape($openbasedir) . "',
+ `phpsettingid`='" . $db->escape($phpsettingid) . "',
+ `mod_fcgid_starter`='" . $db->escape($mod_fcgid_starter) . "',
+ `mod_fcgid_maxrequests`='" . $db->escape($mod_fcgid_maxrequests) . "'
+ " . $upd_specialsettings . $updatechildren . "
+ WHERE `parentdomainid`='" . (int)$id . "'
+ ");
+
+ // FIXME check how many we got and if the amount of assigned IP's
+ // has changed so we can insert a config-rebuild task if only
+ // the ip's of this domain were changed
+
+ // Cleanup domain <-> ip mapping
+ $db->query("DELETE FROM `" . TABLE_DOMAINTOIP . "` WHERE `id_domain` = '" . (int)$id . "'");
+
+ foreach ($ipandports as $ipportid) {
+ $db->query("INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
+ `id_domain` = '" . (int)$id . "',
+ `id_ipandports` = '" . (int)$ipportid . "';
+ ");
+ }
+ foreach ($ssl_ipandports as $ssl_ipportid) {
+ $db->query("INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
+ `id_domain` = '" . (int)$id . "',
+ `id_ipandports` = '" . (int)$ssl_ipportid . "';
+ ");
+ }
+
+ // Cleanup domain <-> ip mapping for subdomains
+ $domainidsresult = $db->query("SELECT `id` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `parentdomainid`='" . (int)$id . "'");
+ while ($row = $db->fetch_array($domainidsresult)) {
+ $db->query("DELETE FROM `" . TABLE_DOMAINTOIP . "` WHERE `id_domain` = '" . (int)$row['id'] . "'");
+ foreach ($ipandports as $ipportid) {
+ $db->query("INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
+ `id_domain` = '" . (int)$row['id'] . "',
+ `id_ipandports` = '" . (int)$ipportid . "';
+ ");
+ }
+ foreach ($ssl_ipandports as $ssl_ipportid) {
+ $db->query("INSERT INTO `" . TABLE_DOMAINTOIP . "` SET
+ `id_domain` = '" . (int)$row['id'] . "',
+ `id_ipandports` = '" . (int)$ssl_ipportid . "';
+ ");
+ }
+ }
+
$log->logAction(ADM_ACTION, LOG_INFO, "edited domain #" . $id);
$redirect_props = Array(
'page' => $page,
@@ -1237,8 +1413,7 @@ if($page == 'domains'
$result_ssl_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='1' AND `ip`='" . $admin_ip['ip'] . "' ORDER BY `ip`, `port` ASC");
}
- $ipsandports = '';
-
+ $ipsandports = array();
while($row_ipandport = $db->fetch_array($result_ipsandports))
{
if(filter_var($row_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
@@ -1246,11 +1421,10 @@ if($page == 'domains'
$row_ipandport['ip'] = '[' . $row_ipandport['ip'] . ']';
}
- $ipsandports.= makeoption($row_ipandport['ip'] . ':' . $row_ipandport['port'], $row_ipandport['id'], $result['ipandport']);
+ $ipsandports[] = array('label' => $row_ipandport['ip'] . ':' . $row_ipandport['port'], 'value' => $row_ipandport['id']);
}
- $ssl_ipsandports = '';
-
+ $ssl_ipsandports = array();
while($row_ssl_ipandport = $db->fetch_array($result_ssl_ipsandports))
{
if(filter_var($row_ssl_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
@@ -1258,7 +1432,7 @@ if($page == 'domains'
$row_ssl_ipandport['ip'] = '[' . $row_ssl_ipandport['ip'] . ']';
}
- $ssl_ipsandports.= makeoption($row_ssl_ipandport['ip'] . ':' . $row_ssl_ipandport['port'], $row_ssl_ipandport['id'], $result['ssl_ipandport']);
+ $ssl_ipsandports[] = array('label' => $row_ssl_ipandport['ip'] . ':' . $row_ssl_ipandport['port'], 'value' => $row_ssl_ipandport['id']);
}
$result['specialsettings'] = $result['specialsettings'];
@@ -1273,8 +1447,7 @@ if($page == 'domains'
$phpconfigs = '';
$phpconfigs_result = $db->query("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "`");
- while($phpconfigs_row = $db->fetch_array($phpconfigs_result))
- {
+ while ($phpconfigs_row = $db->fetch_array($phpconfigs_result)) {
$phpconfigs.= makeoption($phpconfigs_row['description'], $phpconfigs_row['id'], $result['phpsettingid'], true, true);
}
@@ -1293,5 +1466,3 @@ if($page == 'domains'
}
}
}
-
-?>
diff --git a/customer_domains.php b/customer_domains.php
index e0c3a695..6d2c110a 100644
--- a/customer_domains.php
+++ b/customer_domains.php
@@ -241,9 +241,9 @@ elseif($page == 'domains')
$_doredirect = false;
if($aliasdomain != 0)
- {
+ {
// also check ip/port combination to be the same, #176
- $aliasdomain_check = $db->query_first('SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$userinfo['customerid'] . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$userinfo['customerid'] . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\' AND `d`.`ipandport` = \''.(int)$domain_check['ipandport'].'\'');
+ $aliasdomain_check = $db->query_first("SELECT `d`.`id` FROM `" . TABLE_PANEL_DOMAINS . "` `d` , `" . TABLE_PANEL_CUSTOMERS . "` `c` , `".TABLE_DOMAINTOIP."` `dip` WHERE `d`.`aliasdomain` IS NULL AND `d`.`id` = '".(int)$aliasdomain."' AND `c`.`standardsubdomain` <> `d`.`id` AND `d`.`customerid` = '" . (int)$userinfo['customerid'] . "' AND `c`.`customerid` = `d`.`customerid` AND `d`.`id` = `dip`.`id_domain` AND `dip`.`id_ipandports` IN (SELECT `id_ipandports` FROM `".TABLE_DOMAINTOIP."` WHERE `id_domain` = '".(int)$aliasdomain."') GROUP BY `d`.`domain` ORDER BY `d`.`domain` ASC;");
}
if(isset($_POST['url'])
@@ -345,7 +345,6 @@ elseif($page == 'domains')
`customerid` = '" . (int)$userinfo['customerid'] . "',
`domain` = '" . $db->escape($completedomain) . "',
`documentroot` = '" . $db->escape($path) . "',
- `ipandport` = '" . $db->escape($domain_check['ipandport']) . "',
`aliasdomain` = ".(($aliasdomain != 0) ? "'" . $db->escape($aliasdomain) . "'" : "NULL") .",
`parentdomainid` = '" . (int)$domain_check['id'] . "',
`isemaildomain` = '" . ($domain_check['subcanemaildomain'] == '3' ? '1' : '0') . "',
@@ -356,6 +355,8 @@ elseif($page == 'domains')
`ssl_redirect` = '" . $ssl_redirect . "',
`phpsettingid` = '" . $phpsid_result['phpsettingid'] . "'");
+ $result = $db->query("INSERT INTO `".TABLE_DOMAINTOIP."` (`id_domain`, `id_ipandports`) SELECT LAST_INSERT_ID(), `id_ipandports` FROM `".TABLE_DOMAINTOIP."` WHERE `id_domain` = '" . (int)$domain_check['id'] . "';");
+
if($_doredirect)
{
$did = $db->insert_id();
@@ -424,11 +425,13 @@ elseif($page == 'domains')
elseif($action == 'edit'
&& $id != 0)
{
- $result = $db->query_first("SELECT `d`.`id`, `d`.`customerid`, `d`.`domain`, `d`.`documentroot`, `d`.`isemaildomain`, `d`.`iswildcarddomain`, `d`.`parentdomainid`, `d`.`ssl_redirect`, `d`.`aliasdomain`, `d`.`openbasedir`, `d`.`openbasedir_path`, `d`.`ipandport`, `pd`.`subcanemaildomain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_DOMAINS . "` `pd` WHERE `d`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `d`.`id`='" . (int)$id . "' AND ((`d`.`parentdomainid`!='0' AND `pd`.`id`=`d`.`parentdomainid`) OR (`d`.`parentdomainid`='0' AND `pd`.`id`=`d`.`id`)) AND `d`.`caneditdomain`='1'");
+ $result = $db->query_first("SELECT `d`.`id`, `d`.`customerid`, `d`.`domain`, `d`.`documentroot`, `d`.`isemaildomain`, `d`.`iswildcarddomain`, `d`.`parentdomainid`, `d`.`ssl_redirect`, `d`.`aliasdomain`, `d`.`openbasedir`, `d`.`openbasedir_path`, `pd`.`subcanemaildomain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_DOMAINS . "` `pd` WHERE `d`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `d`.`id`='" . (int)$id . "' AND ((`d`.`parentdomainid`!='0' AND `pd`.`id`=`d`.`parentdomainid`) OR (`d`.`parentdomainid`='0' AND `pd`.`id`=`d`.`id`)) AND `d`.`caneditdomain`='1'");
$alias_check = $db->query_first('SELECT COUNT(`id`) AS count FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . (int)$result['id'] . '\'');
$alias_check = $alias_check['count'];
$_doredirect = false;
+
+
if(isset($result['customerid'])
&& $result['customerid'] == $userinfo['customerid'])
{
@@ -571,9 +574,10 @@ elseif($page == 'domains')
else
{
$result['domain'] = $idna_convert->decode($result['domain']);
+
$domains = makeoption($lng['domains']['noaliasdomain'], 0, $result['aliasdomain'], true);
// also check ip/port combination to be the same, #176
- $result_domains = $db->query("SELECT `d`.`id`, `d`.`domain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `d`.`aliasdomain` IS NULL AND `d`.`id`<>'" . (int)$result['id'] . "' AND `c`.`standardsubdomain`<>`d`.`id` AND `d`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `c`.`customerid`=`d`.`customerid` AND `d`.`ipandport` = '".(int)$result['ipandport']."' ORDER BY `d`.`domain` ASC");
+ $result_domains = $db->query("SELECT `d`.`id`, `d`.`domain` FROM `" . TABLE_PANEL_DOMAINS . "` `d` , `" . TABLE_PANEL_CUSTOMERS . "` `c` , `".TABLE_DOMAINTOIP."` `dip` WHERE `d`.`aliasdomain` IS NULL AND `d`.`id` <> '".(int)$result['id']."' AND `c`.`standardsubdomain` <> `d`.`id` AND `d`.`customerid` = '" . (int)$userinfo['customerid'] . "' AND `c`.`customerid` = `d`.`customerid` AND `d`.`id` = `dip`.`id_domain` AND `dip`.`id_ipandports` IN (SELECT `id_ipandports` FROM `".TABLE_DOMAINTOIP."` WHERE `id_domain` = '".(int)$result['id']."') GROUP BY `d`.`domain` ORDER BY `d`.`domain` ASC");
while($row_domain = $db->fetch_array($result_domains))
{
@@ -620,11 +624,26 @@ elseif($page == 'domains')
$openbasedir = makeoption($lng['domain']['docroot'], 0, $result['openbasedir_path'], true) . makeoption($lng['domain']['homedir'], 1, $result['openbasedir_path'], true);
- $result_ipandport = $db->query_first("SELECT `ip` FROM `".TABLE_PANEL_IPSANDPORTS."` WHERE `id`='".(int)$result['ipandport']."'");
+ $resultips = $db->query("SELECT `p`.`ip` AS `ip` FROM `".TABLE_PANEL_IPSANDPORTS."` `p` LEFT JOIN `".TABLE_DOMAINTOIP."` `dip` ON ( `dip`.`id_ipandports` = `p`.`id` ) WHERE `dip`.`id_domain` = '".(int)$result['id']."' GROUP BY `p`.`ip`");
+ $result_ipandport['ip'] = '';
+ while ($rowip = $db->fetch_array($resultips))
+ {
+ if(filter_var($rowip['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
+ {
+ $result_ipandport['ip'] .= '[' . $rowip['ip'] . ']' . " \n";
+ }
+ else
+ {
+ $result_ipandport['ip'] .= $rowip['ip'] . " \n";
+ }
+ }
+
+
if(filter_var($result_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
{
$result_ipandport['ip'] = '[' . $result_ipandport['ip'] . ']';
}
+
$domainip = $result_ipandport['ip'];
$result = htmlentities_array($result);
diff --git a/install/froxlor.sql b/install/froxlor.sql
index a43fe54b..bb1720a5 100644
--- a/install/froxlor.sql
+++ b/install/froxlor.sql
@@ -542,8 +542,7 @@ INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES
('panel', 'phpconfigs_hidestdsubdomain', '0'),
('panel', 'allow_theme_change_admin', '1'),
('panel', 'allow_theme_change_customer', '1'),
- ('panel', 'version', '0.9.29');
-
+ ('panel', 'version', '0.9.29.1-dev1');
DROP TABLE IF EXISTS `panel_tasks`;
@@ -753,7 +752,6 @@ INSERT INTO `panel_phpconfigs` (`id`, `description`, `binary`, `file_extensions`
(1, 'Default Config', '/usr/bin/php-cgi', 'php', '-1', '-1', 'allow_call_time_pass_reference = Off\r\nallow_url_fopen = Off\r\nasp_tags = Off\r\ndisable_classes =\r\ndisable_functions = curl_exec,curl_multi_exec,exec,parse_ini_file,passthru,popen,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,show_source,system\r\ndisplay_errors = Off\r\ndisplay_startup_errors = Off\r\nenable_dl = Off\r\nerror_reporting = E_ALL & ~E_NOTICE\r\nexpose_php = Off\r\nfile_uploads = On\r\ncgi.force_redirect = 1\r\ngpc_order = "GPC"\r\nhtml_errors = Off\r\nignore_repeated_errors = Off\r\nignore_repeated_source = Off\r\ninclude_path = ".:{PEAR_DIR}"\r\nlog_errors = On\r\nlog_errors_max_len = 1024\r\nmagic_quotes_gpc = Off\r\nmagic_quotes_runtime = Off\r\nmagic_quotes_sybase = Off\r\nmax_execution_time = 30\r\nmax_input_time = 60\r\nmemory_limit = 16M\r\n{OPEN_BASEDIR_C}open_basedir = "{OPEN_BASEDIR}"\r\noutput_buffering = 4096\r\npost_max_size = 16M\r\nprecision = 14\r\nregister_argc_argv = Off\r\nregister_globals = Off\r\nreport_memleaks = On\r\nsendmail_path = "/usr/sbin/sendmail -t -i -f {CUSTOMER_EMAIL}"\r\nsession.auto_start = 0\r\nsession.bug_compat_42 = 0\r\nsession.bug_compat_warn = 1\r\nsession.cache_expire = 180\r\nsession.cache_limiter = nocache\r\nsession.cookie_domain =\r\nsession.cookie_lifetime = 0\r\nsession.cookie_path = /\r\nsession.entropy_file = /dev/urandom\r\nsession.entropy_length = 16\r\nsession.gc_divisor = 1000\r\nsession.gc_maxlifetime = 1440\r\nsession.gc_probability = 1\r\nsession.name = PHPSESSID\r\nsession.referer_check =\r\nsession.save_handler = files\r\nsession.save_path = "{TMP_DIR}"\r\nsession.serialize_handler = php\r\nsession.use_cookies = 1\r\nsession.use_trans_sid = 0\r\nshort_open_tag = On\r\nsuhosin.mail.protect = 1\r\nsuhosin.simulation = Off\r\ntrack_errors = Off\r\nupload_max_filesize = 32M\r\nupload_tmp_dir = "{TMP_DIR}"\r\nvariables_order = "GPCS"\r\n');
-
DROP TABLE IF EXISTS `aps_instances`;
CREATE TABLE IF NOT EXISTS `aps_instances` (
`ID` int(4) NOT NULL auto_increment,
@@ -911,7 +909,6 @@ CREATE TABLE IF NOT EXISTS `ipsandports_docrootsettings` (
) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_general_ci;
-
DROP TABLE IF EXISTS `domain_docrootsettings`;
CREATE TABLE IF NOT EXISTS `domain_docrootsettings` (
`id` int(5) NOT NULL auto_increment,
@@ -920,6 +917,7 @@ CREATE TABLE IF NOT EXISTS `domain_docrootsettings` (
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_general_ci;
+
DROP TABLE IF EXISTS `domain_ssl_settings`;
CREATE TABLE IF NOT EXISTS `domain_ssl_settings` (
`id` int(5) NOT NULL auto_increment,
@@ -930,3 +928,11 @@ CREATE TABLE IF NOT EXISTS `domain_ssl_settings` (
`ssl_cert_chainfile` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_general_ci;
+
+
+DROP TABLE IF EXISTS `panel_domaintoip`;
+CREATE TABLE IF NOT EXISTS `panel_domaintoip` (
+ `id_domain` int(11) unsigned NOT NULL,
+ `id_ipandports` int(11) unsigned NOT NULL,
+ PRIMARY KEY (`id_domain`,`id_ipandports`)
+) ENGINE=MyISAM CHARSET=utf8 COLLATE=utf8_general_ci;
diff --git a/install/updates/froxlor/0.9/update_0.9.inc.php b/install/updates/froxlor/0.9/update_0.9.inc.php
index bc9549b1..ef42f7e2 100644
--- a/install/updates/froxlor/0.9/update_0.9.inc.php
+++ b/install/updates/froxlor/0.9/update_0.9.inc.php
@@ -1985,7 +1985,7 @@ if(isFroxlorVersion('0.9.28-svn4')) {
updateToVersion('0.9.28-svn5');
}
-if(isFroxlorVersion('0.9.28-svn5')) {
+if (isFroxlorVersion('0.9.28-svn5')) {
showUpdateStep("Updating from 0.9.28-svn5 to 0.9.28-svn6", true);
lastStepStatus(0);
@@ -2155,3 +2155,55 @@ if (isFroxlorVersion('0.9.29-rc1')) {
lastStepStatus(0);
updateToVersion('0.9.29');
}
+
+if (isFroxlorVersion('0.9.29')) {
+ showUpdateStep("Updating from 0.9.29 to 0.9.29.1-dev1", true);
+ lastStepStatus(0);
+
+ showUpdateStep("Adding new ip to domain - mapping-table");
+ $db->query("DROP TABLE IF EXISTS `panel_domaintoip`;");
+ $sql = "CREATE TABLE `".TABLE_DOMAINTOIP."` (
+ `id_domain` int(11) unsigned NOT NULL,
+ `id_ipandports` int(11) unsigned NOT NULL,
+ PRIMARY KEY (`id_domain`, `id_ipandports`)
+ ) ENGINE=MyISAM ;";
+ $db->query($sql);
+ lastStepStatus(0);
+
+ showUpdateStep("Convert old domain to ip - mappings");
+ $result = $db->query("SELECT `id`, `ipandport`, `ssl_ipandport`, `ssl_redirect`, `parentdomainid` FROM `" . TABLE_PANEL_DOMAINS . "`;");
+
+ while ($row = $db->fetch_array($result)) {
+ if ((int)$row['ipandport'] != 0) {
+ $db->query("INSERT INTO `".TABLE_DOMAINTOIP."` SET
+ `id_domain` = " . (int)$row['id'] . ",
+ `id_ipandports` = " . (int)$row['ipandport']);
+ }
+ if ((int)$row['ssl_ipandport'] != 0) {
+ $db->query("INSERT INTO `".TABLE_DOMAINTOIP."` SET
+ `id_domain` = " . (int)$row['id'] . ",
+ `id_ipandports` = " . (int)$row['ssl_ipandport']);
+ }
+ // Subdomains also have ssl ports if the parent has
+ elseif ((int)$row['ssl_ipandport'] == 0
+ && (int)$row['ssl_redirect'] != 0
+ && (int)$row['parentdomainid'] != 0
+ ) {
+ $db->query("INSERT INTO `".TABLE_DOMAINTOIP."` SET
+ `id_domain` = " . (int)$row['id'] . ",
+ `id_ipandports` = (
+ SELECT `ssl_ipandport` FROM `" . TABLE_PANEL_DOMAINS . "`
+ WHERE `id` = '".(int)$row['parentdomainid']."');"
+ );
+ }
+ }
+ lastStepStatus(0);
+
+ showUpdateStep("Updating table layouts");
+ $db->query("ALTER TABLE `".TABLE_PANEL_DOMAINS."` DROP `ipandport`;");
+ $db->query("ALTER TABLE `".TABLE_PANEL_DOMAINS."` DROP `ssl`;");
+ $db->query("ALTER TABLE `".TABLE_PANEL_DOMAINS."` DROP `ssl_ipandport`;");
+ lastStepStatus(0);
+
+ updateToVersion('0.9.29.1-dev1');
+}
diff --git a/lib/classes/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README b/lib/classes/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README
old mode 100644
new mode 100755
diff --git a/lib/classes/output/class.htmlform.php b/lib/classes/output/class.htmlform.php
index 6aa3a2c3..e6e71781 100644
--- a/lib/classes/output/class.htmlform.php
+++ b/lib/classes/output/class.htmlform.php
@@ -15,7 +15,7 @@
*
*/
-class htmlform
+class htmlform
{
/**
* internal tmp-variable to store form
@@ -39,7 +39,7 @@ class htmlform
{
/*
* here be section title & image
- */
+ */
$title = $section['title'];
$image = $section['image'];
@@ -47,7 +47,7 @@ class htmlform
{
continue;
}
-
+
if (!isset($section['nobuttons']) || $section['nobuttons'] == false) {
eval("self::\$_form .= \"" . getTemplate("misc/form/table_section", "1") . "\";");
} else {
@@ -83,9 +83,9 @@ class htmlform
$data_field = str_replace("\t", "", $data_field);
$data_field = $fielddata['next_to_prefix'].$data_field;
self::$_form = str_replace(
- '{NEXTTOFIELD_'.$fielddata['next_to'].'}',
- $data_field,
- self::$_form
+ '{NEXTTOFIELD_'.$fielddata['next_to'].'}',
+ $data_field,
+ self::$_form
);
$nexto = false;
}
@@ -150,8 +150,8 @@ class htmlform
$extras .= ' size="'.$data['size'].'"';
}
if(isset($data['autocomplete'])) {
- $extras .= ' autocomplete="'.$data['autocomplete'].'"';
- }
+ $extras .= ' autocomplete="'.$data['autocomplete'].'"';
+ }
// add support to save reloaded forms
if (isset($data['value'])) {
@@ -161,7 +161,7 @@ class htmlform
} else {
$value = '';
}
-
+
$ulfield = ($unlimited == true ? ' '.$data['ul_field'] : '');
if(isset($data['display']) && $data['display'] != '')
{
@@ -182,7 +182,7 @@ class htmlform
if(isset($data['rows'])) {
$extras .= ' rows="'.$data['rows'].'"';
}
-
+
// add support to save reloaded forms
if (isset($data['value'])) {
$value = $data['value'];
@@ -201,7 +201,7 @@ class htmlform
{
return $data['yesno_var'];
}
-
+
private static function _labelField($data = array())
{
return $data['value'];
@@ -217,76 +217,75 @@ class htmlform
} else {
$select_var = '';
}
-
- return '';
+
+ return '';
}
-
+
/**
* Function to generate checkboxes.
- *
+ *
*
* $data = array(
- * 'label' => $lng['customer']['email_imap'],
- * 'type' => 'checkbox',
- * 'values' => array(
- * array( 'label' => 'active',
- * 'value' => '1'
- * )
- * ),
- * 'value' => array('1'),
- * 'mandatory' => true
- * )
+ * 'label' => $lng['customer']['email_imap'],
+ * 'type' => 'checkbox',
+ * 'values' => array(
+ * array( 'label' => 'active',
+ * 'value' => '1'
+ * )
+ * ),
+ * 'value' => array('1'),
+ * 'mandatory' => true
+ * )
*
- *
+ *
* @param string $fieldname contains the fieldname
* @param array $data contains the data array
*/
public static function _checkbox($fieldname = '', $data = array()) {
// $data['value'] contains checked items
+
+ $checked = array();
if (isset($data['value'])) {
$checked = $data['value'];
- } else {
- $checked = array();
}
-
+
if (isset($_SESSION['requestData'])) {
if(isset($_SESSION['requestData'][$fieldname])) {
$checked = array($_SESSION['requestData'][$fieldname]);
- } else {
- $checked = array();
}
}
-
+
// default value is none, so the checkbox isn't an array
$isArray = '';
-
- if (count($data['values']) > 1) {
+
+ if (count($data['values']) > 1 || (isset($data['is_array']) && $data['is_array'] == 1)) {
$isArray = '[]';
}
-
+
// will contain the output
$output = "";
foreach($data['values'] as $val) {
$key = $val['label'];
// is this box checked?
$isChecked = '';
- foreach($checked as $tmp) {
- if ($tmp == $val['value']) {
- $isChecked = ' checked="checked" ';
- break;
+ if (is_array($checked) && count($checked) > 0) {
+ foreach($checked as $tmp) {
+ if ($tmp == $val['value']) {
+ $isChecked = ' checked="checked" ';
+ break;
+ }
}
}
-
$output .= '';
}
-
+
return $output;
}
-
+
}
diff --git a/lib/formfields/admin/domains/formfield.domains_add.php b/lib/formfields/admin/domains/formfield.domains_add.php
index 4347bbdb..947c0cd0 100644
--- a/lib/formfields/admin/domains/formfield.domains_add.php
+++ b/lib/formfields/admin/domains/formfield.domains_add.php
@@ -88,18 +88,18 @@ return array(
),
'ipandport' => array(
'label' => 'IP/Port',
- 'type' => 'select',
- 'select_var' => $ipsandports,
- 'mandatory' => true,
- ),
- 'ssl' => array(
- 'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports != '' ? true : false) : false),
- 'label' => 'SSL',
'type' => 'checkbox',
- 'values' => array(
- array ('label' => $lng['panel']['yes'], 'value' => '1')
- ),
- 'value' => array()
+ 'values' => $ipsandports,
+ 'value' => array($settings['system']['defaultip']),
+ 'is_array' => 1,
+ 'mandatory' => true
+ ),
+ 'ssl_ipandport' => array(
+ 'label' => 'IP/Port (SSL)',
+ 'type' => 'checkbox',
+ 'values' => $ssl_ipsandports,
+ 'value' => '',
+ 'is_array' => 1
),
'ssl_redirect' => array(
'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports != '' ? true : false) : false),
@@ -110,12 +110,6 @@ return array(
),
'value' => array()
),
- 'ssl_ipandport' => array(
- 'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports != '' ? true : false) : false),
- 'label' => 'SSL IP/Port',
- 'type' => 'select',
- 'select_var' => $ssl_ipsandports
- ),
'no_ssl_available_info' => array(
'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports == '' ? true : false) : false),
'label' => 'SSL',
diff --git a/lib/formfields/admin/domains/formfield.domains_edit.php b/lib/formfields/admin/domains/formfield.domains_edit.php
index 0694fc2c..1abf273f 100644
--- a/lib/formfields/admin/domains/formfield.domains_edit.php
+++ b/lib/formfields/admin/domains/formfield.domains_edit.php
@@ -99,18 +99,18 @@ return array(
),
'ipandport' => array(
'label' => 'IP/Port',
- 'type' => 'select',
- 'select_var' => $ipsandports,
- 'mandatory' => true,
- ),
- 'ssl' => array(
- 'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports != '' ? true : false) : false),
- 'label' => 'SSL',
'type' => 'checkbox',
- 'values' => array(
- array ('label' => $lng['panel']['yes'], 'value' => '1')
- ),
- 'value' => array($result['ssl'])
+ 'values' => $ipsandports,
+ 'value' => $usedips,
+ 'is_array' => 1,
+ 'mandatory' => true
+ ),
+ 'ssl_ipandport' => array(
+ 'label' => 'IP/Port (SSL)',
+ 'type' => 'checkbox',
+ 'values' => $ssl_ipsandports,
+ 'value' => $usedips,
+ 'is_array' => 1
),
'ssl_redirect' => array(
'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports != '' ? true : false) : false),
@@ -121,12 +121,6 @@ return array(
),
'value' => array($result['ssl_redirect'])
),
- 'ssl_ipandport' => array(
- 'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports != '' ? true : false) : false),
- 'label' => 'SSL IP/Port',
- 'type' => 'select',
- 'select_var' => $ssl_ipsandports
- ),
'no_ssl_available_info' => array(
'visible' => ($settings['system']['use_ssl'] == '1' ? ($ssl_ipsandports == '' ? true : false) : false),
'label' => 'SSL',
diff --git a/lib/functions/froxlor/function.getIpPortCombinations.php b/lib/functions/froxlor/function.getIpPortCombinations.php
index 24ba82e4..ee1294e3 100644
--- a/lib/functions/froxlor/function.getIpPortCombinations.php
+++ b/lib/functions/froxlor/function.getIpPortCombinations.php
@@ -17,7 +17,7 @@
*
*/
-function getIpPortCombinations($ssl = null)
+function getIpPortCombinations($ssl = false)
{
global $db, $theme;
diff --git a/lib/functions/settings/function.storeSettingDefaultIp.php b/lib/functions/settings/function.storeSettingDefaultIp.php
index 66b9be4b..83d2fd35 100644
--- a/lib/functions/settings/function.storeSettingDefaultIp.php
+++ b/lib/functions/settings/function.storeSettingDefaultIp.php
@@ -16,30 +16,34 @@
* @package Functions
*
*/
+function storeSettingDefaultIp($fieldname, $fielddata, $newfieldvalue) {
-function storeSettingDefaultIp($fieldname, $fielddata, $newfieldvalue)
-{
$returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue);
- if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'defaultip')
- {
+ if ($returnvalue !== false
+ && is_array($fielddata)
+ && isset($fielddata['settinggroup'])
+ && $fielddata['settinggroup'] == 'system'
+ && isset($fielddata['varname'])
+ && $fielddata['varname'] == 'defaultip'
+ ) {
global $db, $theme;
-
- $customerstddomains_result = $db->query('SELECT `standardsubdomain` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain` <> \'0\'');
+
+ $customerstddomains_result = $db->query("SELECT `standardsubdomain` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `standardsubdomain` <> '0'");
$ids = array();
- while($customerstddomains_row = $db->fetch_array($customerstddomains_result))
- {
+ while($customerstddomains_row = $db->fetch_array($customerstddomains_result)) {
$ids[] = (int)$customerstddomains_row['standardsubdomain'];
}
- if(count($ids) > 0)
- {
- $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `ipandport`=\'' . (int)$newfieldvalue . '\' WHERE `id` IN (\'' . implode('\',\'', $ids) . '\') AND `ipandport` = \'' . $db->escape(getSetting('system', 'defaultip')) . '\'');
+ if(count($ids) > 0) {
+ $db->query("UPDATE `" . TABLE_DOMAINTOIP . "` SET
+ `id_ipandports`='" . (int)$newfieldvalue . "'
+ WHERE `id_domain` IN ('" . implode(', ', $ids) . "')
+ AND `id_ipandports` = '" . $db->escape(getSetting('system', 'defaultip')) . "'"
+ );
}
}
-
+
return $returnvalue;
}
-
-?>
diff --git a/lib/tables.inc.php b/lib/tables.inc.php
index f650dd68..682daa4a 100644
--- a/lib/tables.inc.php
+++ b/lib/tables.inc.php
@@ -55,6 +55,7 @@ define('TABLE_PANEL_DOMAINREDIRECTS', 'domain_redirect_codes');
define('TABLE_PANEL_IPDOCROOTSETTINGS', 'ipsandports_docrootsettings');
define('TABLE_PANEL_DOMDOCROOTSETTINGS', 'domain_docrootsettings');
define('TABLE_PANEL_DOMAIN_SSL_SETTINGS', 'domain_ssl_settings');
+define('TABLE_DOMAINTOIP', 'panel_domaintoip');
// APS constants
@@ -73,7 +74,6 @@ define('PACKAGE_LOCKED', 1);
define('PACKAGE_ENABLED', 2);
// VERSION INFO
-
-$version = '0.9.29';
+$version = '0.9.29.1-dev1';
$dbversion = '2';
$branding = '';
diff --git a/lng/english.lng.php b/lng/english.lng.php
index 8d8ea70e..811f7198 100644
--- a/lng/english.lng.php
+++ b/lng/english.lng.php
@@ -817,7 +817,7 @@ $lng['admin']['awstatssettings'] = 'AWstats settings';
// ADDED IN 1.2.19-svn16
$lng['admin']['domain_dns_settings'] = 'Domain dns settings';
-$lng['dns']['destinationip'] = 'Domain IP';
+$lng['dns']['destinationip'] = 'Domain IP(s)';
$lng['dns']['standardip'] = 'Server standard IP';
$lng['dns']['a_record'] = 'A-Record (IPv6 optional)';
$lng['dns']['cname_record'] = 'CNAME-Record';
diff --git a/lng/german.lng.php b/lng/german.lng.php
index dec5a936..14096693 100644
--- a/lng/german.lng.php
+++ b/lng/german.lng.php
@@ -816,7 +816,7 @@ $lng['admin']['awstatssettings'] = 'AWstats Einstellungen';
// ADDED IN 1.2.19-svn16
$lng['admin']['domain_dns_settings'] = 'Domain DNS-Einstellungen';
-$lng['dns']['destinationip'] = 'Domain-IP';
+$lng['dns']['destinationip'] = 'Domain-IP(s)';
$lng['dns']['standardip'] = 'Server-Standard-IP';
$lng['dns']['a_record'] = 'A-Eintrag (IPv6 optional)';
$lng['dns']['cname_record'] = 'CNAME-Eintrag';
diff --git a/scripts/jobs/cron_tasks.inc.dns.10.bind.php b/scripts/jobs/cron_tasks.inc.dns.10.bind.php
index 45d719ca..306f3ea2 100644
--- a/scripts/jobs/cron_tasks.inc.dns.10.bind.php
+++ b/scripts/jobs/cron_tasks.inc.dns.10.bind.php
@@ -17,9 +17,6 @@
*
*/
-/*
- * This script creates the php.ini's used by mod_suPHP+php-cgi
-*/
if(@php_sapi_name() != 'cli'
&& @php_sapi_name() != 'cgi'
@@ -92,7 +89,7 @@ class bind
$known_filenames = array();
$bindconf_file = '# ' . $this->settings['system']['bindconf_directory'] . 'froxlor_bind.conf' . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n";
- $result_domains = $this->db->query("SELECT `d`.`id`, `d`.`domain`, `d`.`iswildcarddomain`, `d`.`customerid`, `d`.`zonefile`, `d`.`bindserial`, `d`.`dkim`, `d`.`dkim_id`, `d`.`dkim_pubkey`, `d`.`wwwserveralias`, `ip`.`ip`, `c`.`loginname`, `c`.`guid` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) LEFT JOIN `" . TABLE_PANEL_IPSANDPORTS . "` AS `ip` ON(`d`.`ipandport`=`ip`.`id`) WHERE `d`.`isbinddomain` = '1' ORDER BY `d`.`domain` ASC");
+ $result_domains = $this->db->query("SELECT `d`.`id`, `d`.`domain`, `d`.`iswildcarddomain`, `d`.`wwwserveralias`, `d`.`customerid`, `d`.`zonefile`, `d`.`bindserial`, `d`.`dkim`, `d`.`dkim_id`, `d`.`dkim_pubkey`, `c`.`loginname`, `c`.`guid` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) WHERE `d`.`isbinddomain` = '1' ORDER BY `d`.`domain` ASC");
while($domain = $this->db->fetch_array($result_domains))
{
@@ -179,22 +176,29 @@ class bind
protected function generateZone($domain)
{
- if(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
- {
- $ip_a_record = 'A ' . $domain['ip'];
- }
- elseif(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
- {
- $ip_a_record = 'AAAA ' . $domain['ip'];
- }
- else
- {
- return '';
+ // Array to save all ips needed in the records (already including IN A/AAAA)
+ $ip_a_records = array();
+ // Array to save DNS records
+ $records = array();
+
+ $result_ip = $this->db->query("SELECT `p`.`ip` AS `ip` FROM `".TABLE_PANEL_IPSANDPORTS."` `p`, `".TABLE_DOMAINTOIP."` `di` WHERE `di`.`id_domain` = '$domain[id]' AND `p`.`id` = `di`.`id_ipandports` GROUP BY `p`.`ip`;");
+
+ while ($ip = $this->db->fetch_array($result_ip)) {
+
+ if (filter_var($ip['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+ $ip_a_records[] = "A\t\t" . $ip['ip'];
+ }
+ elseif (filter_var($ip['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $ip_a_records[] = "AAAA\t\t" . $ip['ip'];
+ }
+ else {
+ return ";Error in at least one IP Adress (".$ip['ip']."), could not create zonefile!";
+ }
}
$date = date('Ymd');
$bindserial = (preg_match('/^' . $date . '/', $domain['bindserial']) ? $domain['bindserial'] + 1 : $date . '00');
- $this->db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `bindserial`=\'' . $bindserial . '\' WHERE `id`=\'' . $domain['id'] . '\'');
+ $this->db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `bindserial`='" . $bindserial . "' WHERE `id`='" . $domain['id'] . "'");
$zonefile = '$TTL ' . (int)$this->settings['system']['defaultttl'] . "\n";
if(count($this->nameservers) == 0)
@@ -208,44 +212,37 @@ class bind
$zonefile.= ' ' . $bindserial . ' ; serial' . "\n" . ' 8H ; refresh' . "\n" . ' 2H ; retry' . "\n" . ' 1W ; expiry' . "\n" . ' 11h) ; minimum' . "\n";
- if(count($this->nameservers) == 0)
- {
- $zonefile.= '@ IN NS ns' . "\n" . 'ns IN ' . $ip_a_record . "\n";
- }
- else
- {
- foreach($this->nameservers as $nameserver)
- {
- $zonefile.= '@ IN NS ' . trim($nameserver['hostname']) . "\n";
+ // no nameservers given, use all if the A/AAAA entries
+ if (count($this->nameservers) == 0) {
+ $zonefile .= '@ IN NS ns' . "\n";
+ foreach ($ip_a_records as $ip_a_record) {
+ $zonefile .= 'ns IN ' . $ip_a_record . "\n";
+ }
+ } else {
+ foreach ($this->nameservers as $nameserver) {
+ $zonefile.= '@ IN NS ' . trim($nameserver['hostname']) . "\n";
}
}
- if(count($this->mxservers) == 0)
- {
+ if (count($this->mxservers) == 0) {
$zonefile.= '@ IN MX 10 mail' . "\n";
- $zonefile.= 'mail IN ' . $ip_a_record . "\n";
- if($domain['iswildcarddomain'] != '1')
- {
- $zonefile.= 'imap IN ' . $ip_a_record . "\n";
- $zonefile.= 'smtp IN ' . $ip_a_record . "\n";
- $zonefile.= 'pop3 IN ' . $ip_a_record . "\n";
+ $records[] = 'mail';
+ if ($domain['iswildcarddomain'] != '1') {
+ $records[] = 'imap';
+ $records[] = 'smtp';
+ $records[] = 'pop3';
}
- }
- else
- {
- foreach($this->mxservers as $mxserver)
- {
- $zonefile.= '@ IN MX ' . trim($mxserver) . "\n";
+ } else {
+ foreach ($this->mxservers as $mxserver) {
+ $zonefile.= '@ IN MX ' . trim($mxserver) . "\n";
}
- if($this->settings['system']['dns_createmailentry'] == '1')
- {
- $zonefile.= 'mail IN ' . $ip_a_record . "\n";
- if($domain['iswildcarddomain'] != '1')
- {
- $zonefile.= 'imap IN ' . $ip_a_record . "\n";
- $zonefile.= 'smtp IN ' . $ip_a_record . "\n";
- $zonefile.= 'pop3 IN ' . $ip_a_record . "\n";
+ if ($this->settings['system']['dns_createmailentry'] == '1') {
+ $records[] = 'mail';
+ if ($domain['iswildcarddomain'] != '1') {
+ $records[] = 'imap';
+ $records[] = 'smtp';
+ $records[] = 'pop3';
}
}
}
@@ -253,9 +250,9 @@ class bind
/*
* @TODO domain-based spf-settings
*/
- if($this->settings['spf']['use_spf'] == '1'
- /*&& $domain['spf'] == '1' */)
- {
+ if ($this->settings['spf']['use_spf'] == '1'
+ /*&& $domain['spf'] == '1' */
+ ) {
$zonefile.= $this->settings['spf']['spf_entry'] . "\n";
}
@@ -286,37 +283,34 @@ class bind
}
}
- $zonefile.= '@ IN ' . $ip_a_record . "\n";
- $zonefile.= 'www IN ' . $ip_a_record . "\n";
+ $records[] = '@';
+ $records[] = 'www';
+
if($domain['iswildcarddomain'] == '1')
{
- $zonefile.= '* IN ' . $ip_a_record . "\n";
+ $records[] = '*';
}
- $subdomains = $this->db->query('SELECT `d`.`domain`, `ip`.`ip` AS `ip` FROM `' . TABLE_PANEL_DOMAINS . '` `d`, `' . TABLE_PANEL_IPSANDPORTS . '` `ip` WHERE `parentdomainid`=\'' . $domain['id'] . '\' AND `d`.`ipandport`=`ip`.`id`');
+ $subdomains = $this->db->query("SELECT `domain` FROM `".TABLE_PANEL_DOMAINS."` WHERE `parentdomainid` = '$domain[id]';");
while($subdomain = $this->db->fetch_array($subdomains))
{
- if(filter_var($subdomain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
- {
- $zonefile.= str_replace('.' . $domain['domain'], '', $subdomain['domain']) . ' IN A ' . $subdomain['ip'] . "\n";
-
- /* Check whether to add a www.-prefix */
- if($domain['wwwserveralias'] == '1')
- {
- $zonefile.= str_replace('www.' . $domain['domain'], '', $subdomain['domain']) . ' IN A ' . $subdomain['ip'] . "\n";
- }
+ // Listing domains is enough as there currently is no support for choosing
+ // different ips for a subdomain => use same IPs as toplevel
+ $records[] = str_replace('.' . $domain['domain'], '', $subdomain['domain']);
+
+ // Check whether to add a www.-prefix
+ if ($domain['wwwserveralias'] == '1') {
+ $records[] = str_replace('.' . $domain['domain'], '', $subdomain['domain']);
}
- elseif(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
- {
- $zonefile.= str_replace('.' . $domain['domain'], '', $subdomain['domain']) . ' IN AAAA ' . $subdomain['ip'] . "\n";
+ }
- /* Check whether to add a www.-prefix */
- if($domain['wwwserveralias'] == '1')
- {
- $zonefile.= str_replace('www.' . $domain['domain'], '', $subdomain['domain']) . ' IN AAAA ' . $subdomain['ip'] . "\n";
- }
+ // Create DNS-Records for every name we have saved
+ foreach ($records as $record) {
+ // we create an entry for every ip we have saved
+ foreach ($ip_a_records as $ip_a_record) {
+ $zonefile.= $record . "\tIN\t" . $ip_a_record . "\n";
}
}
diff --git a/scripts/jobs/cron_tasks.inc.http.10.apache.php b/scripts/jobs/cron_tasks.inc.http.10.apache.php
index 40bfe440..c9e17a3e 100644
--- a/scripts/jobs/cron_tasks.inc.http.10.apache.php
+++ b/scripts/jobs/cron_tasks.inc.http.10.apache.php
@@ -56,6 +56,7 @@ class apache
$this->debugHandler = $debugHandler;
$this->idnaConvert = $idnaConvert;
$this->settings = $settings;
+
}
protected function getDB()
@@ -584,135 +585,141 @@ class apache
protected function getVhostContent($domain, $ssl_vhost = false)
{
if ($ssl_vhost === true
- && $domain['ssl'] != '1'
+ && ($domain['ssl_redirect'] != '1'
+ && $domain['ssl'] != '1')
) {
return '';
}
+ $query = "SELECT * FROM `".TABLE_PANEL_IPSANDPORTS."` `i`, `".TABLE_DOMAINTOIP."` `dip`
+ WHERE dip.id_domain = '".(int)$domain['id']."' AND i.id = dip.id_ipandports ";
+
if ($ssl_vhost === true
- && $domain['ssl'] == '1'
+ && ($domain['ssl'] == '1' || $domain['ssl_redirect'] == '1')
) {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ssl_ipandport'] . "'";
+ // by ordering by cert-file the row with filled out SSL-Fields will be shown last, thus it is enough to fill out 1 set of SSL-Fields
+ $query .= "AND i.ssl = '1' ORDER BY i.ssl_cert_file ASC;";
} else {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'";
+ $query .= "AND i.ssl = '0';";
}
- $ipandport = $this->db->query_first($query);
- $domain['ip'] = $ipandport['ip'];
- $domain['port'] = $ipandport['port'];
- $domain['ssl_cert_file'] = $ipandport['ssl_cert_file'];
- $domain['ssl_key_file'] = $ipandport['ssl_key_file'];
- $domain['ssl_ca_file'] = $ipandport['ssl_ca_file'];
- // #418
- $domain['ssl_cert_chainfile'] = $ipandport['ssl_cert_chainfile'];
+ $vhost_content = '';
+ $result = $this->db->query($query);
- // SSL STUFF
- $dssl = new DomainSSL($this->settings, $this->db);
- // this sets the ssl-related array-indices in the $domain array
- // if the domain has customer-defined ssl-certificates
- $dssl->setDomainSSLFilesArray($domain);
-
- if (filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
- $ipport = '[' . $domain['ip'] . ']:' . $domain['port'];
- } else {
- $ipport = $domain['ip'] . ':' . $domain['port'];
- }
-
- $vhost_content = '' . "\n";
- $vhost_content .= $this->getServerNames($domain);
-
- if ($ssl_vhost == false
- && $domain['ssl'] == '1'
- && $domain['ssl_redirect'] == '1'
- ) {
- $domain['documentroot'] = 'https://' . $domain['domain'] . '/';
- }
-
- if ($ssl_vhost === true
- && $domain['ssl'] == '1'
- && $this->settings['system']['use_ssl'] == '1'
- ) {
- if ($domain['ssl_cert_file'] == '') {
- $domain['ssl_cert_file'] = $this->settings['system']['ssl_cert_file'];
- }
-
- if ($domain['ssl_key_file'] == '') {
- $domain['ssl_key_file'] = $this->settings['system']['ssl_key_file'];
- }
-
- if ($domain['ssl_ca_file'] == '') {
- $domain['ssl_ca_file'] = $this->settings['system']['ssl_ca_file'];
- }
+ while ($ipandport = $this->db->fetch_array($result)) {
+ $ipport = '';
+ $domain['ip'] = $ipandport['ip'];
+ $domain['port'] = $ipandport['port'];
+ $domain['ssl_cert_file'] = $ipandport['ssl_cert_file'];
+ $domain['ssl_key_file'] = $ipandport['ssl_key_file'];
+ $domain['ssl_ca_file'] = $ipandport['ssl_ca_file'];
// #418
- if ($domain['ssl_cert_chainfile'] == '') {
- $domain['ssl_cert_chainfile'] = $this->settings['system']['ssl_cert_chainfile'];
+ $domain['ssl_cert_chainfile'] = $ipandport['ssl_cert_chainfile'];
+
+ // SSL STUFF
+ $dssl = new DomainSSL($this->settings, $this->db);
+ // this sets the ssl-related array-indices in the $domain array
+ // if the domain has customer-defined ssl-certificates
+ $dssl->setDomainSSLFilesArray($domain);
+
+ if (filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $ipport = '['.$domain['ip'].']:'.$domain['port']. ' ';
+ } else {
+ $ipport = $domain['ip'].':'.$domain['port'].' ';
}
- if ($domain['ssl_cert_file'] != '') {
- $vhost_content .= ' SSLEngine On' . "\n";
- // this makes it more secure, thx to Marcel (08/2013)
- $vhost_content .= ' SSLHonorCipherOrder On' . "\n";
- $vhost_content .= ' SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH' . "\n";
- $vhost_content .= ' SSLCertificateFile ' . makeCorrectFile($domain['ssl_cert_file']) . "\n";
+ $vhost_content .= '' . "\n";
+ $vhost_content.= $this->getServerNames($domain);
- if ($domain['ssl_key_file'] != '') {
- $vhost_content .= ' SSLCertificateKeyFile ' . makeCorrectFile($domain['ssl_key_file']) . "\n";
+ if(($ssl_vhost == false
+ && $domain['ssl'] == '1'
+ && $domain['ssl_redirect'] == '1')
+ ) {
+ $domain['documentroot'] = 'https://' . $domain['domain'] . '/';
+ }
+
+ if ($ssl_vhost === true
+ && $domain['ssl'] == '1'
+ && $this->settings['system']['use_ssl'] == '1'
+ ) {
+ if ($domain['ssl_cert_file'] == '') {
+ $domain['ssl_cert_file'] = $this->settings['system']['ssl_cert_file'];
}
- if ($domain['ssl_ca_file'] != '') {
- $vhost_content .= ' SSLCACertificateFile ' . makeCorrectFile($domain['ssl_ca_file']) . "\n";
+ if ($domain['ssl_key_file'] == '') {
+ $domain['ssl_key_file'] = $this->settings['system']['ssl_key_file'];
+ }
+
+ if ($domain['ssl_ca_file'] == '') {
+ $domain['ssl_ca_file'] = $this->settings['system']['ssl_ca_file'];
}
// #418
- if ($domain['ssl_cert_chainfile'] != '') {
- $vhost_content .= ' SSLCertificateChainFile ' . makeCorrectFile($domain['ssl_cert_chainfile']) . "\n";
+ if ($domain['ssl_cert_chainfile'] == '') {
+ $domain['ssl_cert_chainfile'] = $this->settings['system']['ssl_cert_chainfile'];
+ }
+
+ if ($domain['ssl_cert_file'] != '') {
+ $vhost_content .= ' SSLEngine On' . "\n";
+ // this makes it more secure, thx to Marcel (08/2013)
+ $vhost_content .= ' SSLHonorCipherOrder On' . "\n";
+ $vhost_content .= ' SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH' . "\n";
+ $vhost_content .= ' SSLCertificateFile ' . makeCorrectFile($domain['ssl_cert_file']) . "\n";
+
+ if ($domain['ssl_key_file'] != '') {
+ $vhost_content .= ' SSLCertificateKeyFile ' . makeCorrectFile($domain['ssl_key_file']) . "\n";
+ }
}
}
- }
- if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
- $corrected_docroot = $this->idnaConvert->encode($domain['documentroot']);
+ if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
+ $corrected_docroot = $this->idnaConvert->encode($domain['documentroot']);
- /* Get domain's redirect code */
- $code = getDomainRedirectCode($domain['id']);
- $modrew_red = '';
- if ($code != '') {
- $modrew_red = '[R='. $code . ';L]';
+ /* Get domain's redirect code */
+ $code = getDomainRedirectCode($domain['id']);
+ $modrew_red = '';
+ if ($code != '') {
+ $modrew_red = '[R='. $code . ';L]';
+ }
+
+ // redirect everything, not only root-directory, #541
+ $vhost_content .= ' '."\n";
+ $vhost_content .= ' RewriteEngine On' . "\n";
+ $vhost_content .= ' RewriteCond %{HTTPS} off' . "\n";
+ $vhost_content .= ' RewriteRule ^/(.*) '. $corrected_docroot.'$1 ' . $modrew_red . "\n";
+ $vhost_content .= ' ' . "\n";
+
+ $code = getDomainRedirectCode($domain['id']);
+ $vhost_content .= ' Redirect '.$code.' / ' . $this->idnaConvert->encode($domain['documentroot']) . "\n";
+
+ } else {
+
+ mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true, true);
+ $vhost_content .= $this->getWebroot($domain);
+ if ($this->_deactivated == false) {
+ $vhost_content .= $this->composePhpOptions($domain,$ssl_vhost);
+ $vhost_content .= $this->getStats($domain);
+ }
+ $vhost_content .= $this->getLogfiles($domain);
+
+ if ($domain['specialsettings'] != '') {
+ $vhost_content .= $domain['specialsettings'] . "\n";
+ }
+
+ if ($ipandport['default_vhostconf_domain'] != '') {
+ $vhost_content .= $ipandport['default_vhostconf_domain'] . "\n";
+ }
+
+ if ($this->settings['system']['default_vhostconf'] != '') {
+ $vhost_content .= $this->settings['system']['default_vhostconf'] . "\n";
+ }
}
- // redirect everything, not only root-directory, #541
- $vhost_content .= ' '."\n";
- $vhost_content .= ' RewriteEngine On' . "\n";
- $vhost_content .= ' RewriteCond %{HTTPS} off' . "\n";
- $vhost_content .= ' RewriteRule ^/(.*) '. $corrected_docroot.'$1 ' . $modrew_red . "\n";
- $vhost_content .= ' ' . "\n";
+ $vhost_content .= '' . "\n";
- $code = getDomainRedirectCode($domain['id']);
- $vhost_content .= ' Redirect '.$code.' / ' . $this->idnaConvert->encode($domain['documentroot']) . "\n";
- } else {
- mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true, true);
- $vhost_content .= $this->getWebroot($domain);
- if ($this->_deactivated == false) {
- $vhost_content .= $this->composePhpOptions($domain,$ssl_vhost);
- $vhost_content .= $this->getStats($domain);
- }
- $vhost_content .= $this->getLogfiles($domain);
+ } // while ip's
- if ($domain['specialsettings'] != '') {
- $vhost_content .= $domain['specialsettings'] . "\n";
- }
-
- if ($ipandport['default_vhostconf_domain'] != '') {
- $vhost_content .= $ipandport['default_vhostconf_domain'] . "\n";
- }
-
- if ($this->settings['system']['default_vhostconf'] != '') {
- $vhost_content .= $this->settings['system']['default_vhostconf'] . "\n";
- }
- }
-
- $vhost_content .= '' . "\n";
return $vhost_content;
}
@@ -721,8 +728,32 @@ class apache
*/
public function createVirtualHosts()
{
- $result_domains = $this->db->query("SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, `d`.`phpsettingid`, `c`.`adminid`, `c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled`, `d`.`mod_fcgid_starter`, `d`.`mod_fcgid_maxrequests` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) " . "WHERE `d`.`aliasdomain` IS NULL AND `d`.`email_only` <> 1 ORDER BY `d`.`parentdomainid` DESC, `d`.`iswildcarddomain`, `d`.`domain` ASC");
+ //$result_domains = $this->db->query("SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, `d`.`phpsettingid`, `c`.`adminid`, `c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled`, `d`.`mod_fcgid_starter`, `d`.`mod_fcgid_maxrequests` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) " . "WHERE `d`.`aliasdomain` IS NULL AND `d`.`email_only` <> 1 ORDER BY `d`.`parentdomainid` DESC, `d`.`iswildcarddomain`, `d`.`domain` ASC");
+ $query = "SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`,
+ `d`.`phpsettingid`, `c`.`adminid`, `c`.`guid`, `c`.`email`,
+ `c`.`documentroot` AS `customerroot`, `c`.`deactivated`,
+ `c`.`phpenabled` AS `phpenabled`, `d`.`mod_fcgid_starter`,
+ `d`.`mod_fcgid_maxrequests`, `p`.`ssl` AS `ssl`,
+ `p`.`ssl_cert_file`, `p`.`ssl_key_file`, `p`.`ssl_ca_file`, `p`.`ssl_cert_chainfile`
+ FROM `".TABLE_PANEL_DOMAINS."` `d`
+
+ LEFT JOIN `".TABLE_PANEL_CUSTOMERS."` `c` USING(`customerid`)
+ LEFT JOIN `".TABLE_PANEL_DOMAINS."` `pd` ON (`pd`.`id` = `d`.`parentdomainid`)
+
+ INNER JOIN (
+ SELECT * FROM (
+ SELECT `di`.`id_domain` , `p`.`ssl`, `p`.`ssl_cert_file`, `p`.`ssl_key_file`, `p`.`ssl_ca_file`, `p`.`ssl_cert_chainfile`
+ FROM `".TABLE_DOMAINTOIP."` `di` , `".TABLE_PANEL_IPSANDPORTS."` `p`
+ WHERE `p`.`id` = `di`.`id_ipandports`
+ ORDER BY `p`.`ssl` DESC
+ ) AS my_table_tmp
+ GROUP BY `id_domain`
+ ) AS p ON p.`id_domain` = `d`.`id`
+
+ WHERE `d`.`aliasdomain` IS NULL
+ ORDER BY `d`.`parentdomainid` DESC, `d`.`iswildcarddomain`, `d`.`domain` ASC;";
+ $result_domains = $this->db->query($query);
while ($domain = $this->db->fetch_array($result_domains)) {
fwrite($this->debugHandler, ' apache::createVirtualHosts: creating vhost container for domain ' . $domain['id'] . ', customer ' . $domain['loginname'] . "\n");
$this->logger->logAction(CRON_ACTION, LOG_INFO, 'creating vhost container for domain ' . $domain['id'] . ', customer ' . $domain['loginname']);
@@ -732,11 +763,12 @@ class apache
$this->virtualhosts_data[$vhosts_filename] = '# Domain ID: ' . $domain['id'] . ' - CustomerID: ' . $domain['customerid'] . ' - CustomerLogin: ' . $domain['loginname'] . "\n";
if ($domain['deactivated'] != '1'
- || $this->settings['system']['deactivateddocroot'] != ''
+ || $this->settings['system']['deactivateddocroot'] != ''
) {
- $this->virtualhosts_data[$vhosts_filename].= $this->getVhostContent($domain);
+ // Create vhost without ssl
+ $this->virtualhosts_data[$vhosts_filename].= $this->getVhostContent($domain, false);
- if ($domain['ssl'] == '1') {
+ if ($domain['ssl'] == '1' || $domain['ssl_redirect'] == '1') {
// Adding ssl stuff if enabled
$vhosts_filename_ssl = $this->getVhostFilename($domain, true);
$this->virtualhosts_data[$vhosts_filename_ssl] = '# Domain ID: ' . $domain['id'] . ' (SSL) - CustomerID: ' . $domain['customerid'] . ' - CustomerLogin: ' . $domain['loginname'] . "\n";
@@ -1048,7 +1080,6 @@ class apache
fwrite($vhosts_file_handler, $vhosts_file);
fclose($vhosts_file_handler);
}
-
}
}
}
diff --git a/scripts/jobs/cron_tasks.inc.http.20.lighttpd.php b/scripts/jobs/cron_tasks.inc.http.20.lighttpd.php
deleted file mode 100644
index 031920a0..00000000
--- a/scripts/jobs/cron_tasks.inc.http.20.lighttpd.php
+++ /dev/null
@@ -1,876 +0,0 @@
- (2003-2009)
- * @author Froxlor team (2010-)
- * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
- * @package Cron
- *
- */
-
-/*
- * This script creates the php.ini's used by mod_suPHP+php-cgi
- */
-
-if(@php_sapi_name() != 'cli'
-&& @php_sapi_name() != 'cgi'
-&& @php_sapi_name() != 'cgi-fcgi')
-{
- die('This script only works in the shell.');
-}
-
-class lighttpd
-{
- private $db = false;
- private $logger = false;
- private $debugHandler = false;
- private $idnaConvert = false;
-
- // protected
-
- protected $settings = array();
- protected $lighttpd_data = array();
- protected $needed_htpasswds = array();
- protected $auth_backend_loaded = false;
- protected $htpasswd_files = array();
- protected $mod_accesslog_loaded = "0";
-
- /**
- * indicator whether a customer is deactivated or not
- * if yes, only the webroot will be generated
- *
- * @var bool
- */
- private $_deactivated = false;
-
- public function __construct($db, $logger, $debugHandler, $idnaConvert, $settings)
- {
- $this->db = $db;
- $this->logger = $logger;
- $this->debugHandler = $debugHandler;
- $this->idnaConvert = $idnaConvert;
- $this->settings = $settings;
- }
-
- protected function getDB()
- {
- return $this->db;
- }
-
- public function reload()
- {
- if ((int)$this->settings['phpfpm']['enabled'] == 1) {
- fwrite($this->debugHandler, ' lighttpd::reload: reloading php-fpm' . "\n");
- $this->logger->logAction(CRON_ACTION, LOG_INFO, 'reloading php-fpm');
- safe_exec(escapeshellcmd($this->settings['phpfpm']['reload']));
- }
- fwrite($this->debugHandler, ' lighttpd::reload: reloading lighttpd' . "\n");
- $this->logger->logAction(CRON_ACTION, LOG_INFO, 'reloading lighttpd');
- safe_exec(escapeshellcmd($this->settings['system']['apachereload_command']));
- }
-
- public function createIpPort()
- {
- $query = "SELECT * FROM `" . TABLE_PANEL_IPSANDPORTS . "` ORDER BY `ip` ASC, `port` ASC";
- $result_ipsandports = $this->db->query($query);
-
- while ($row_ipsandports = $this->db->fetch_array($result_ipsandports)) {
- if (filter_var($row_ipsandports['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
- $ip = '[' . $row_ipsandports['ip'] . ']';
- $port = $row_ipsandports['port'];
- $ipv6 = 'server.use-ipv6 = "enable"'."\n";
- } else {
- $ip = $row_ipsandports['ip'];
- $port = $row_ipsandports['port'];
- $ipv6 = '';
- }
-
- fwrite($this->debugHandler, ' lighttpd::createIpPort: creating ip/port settings for ' . $ip . ":" . $port . "\n");
- $this->logger->logAction(CRON_ACTION, LOG_INFO, 'creating ip/port settings for ' . $ip . ":" . $port);
- $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/10_froxlor_ipandport_' . trim(str_replace(':', '.', $row_ipsandports['ip']), '.') . '.' . $row_ipsandports['port'] . '.conf');
-
- if (!isset($this->lighttpd_data[$vhost_filename])) {
- $this->lighttpd_data[$vhost_filename] = '';
- }
-
- $this->lighttpd_data[$vhost_filename].= '$SERVER["socket"] == "' . $ip . ':' . $port . '" {' . "\n";
-
- if ($row_ipsandports['listen_statement'] == '1') {
- $this->lighttpd_data[$vhost_filename].= 'server.port = ' . $port . "\n";
- $this->lighttpd_data[$vhost_filename].= 'server.bind = "' . $ip . '"' . "\n";
- $this->lighttpd_data[$vhost_filename].= $ipv6;
- }
-
- if ($row_ipsandports['vhostcontainer'] == '1') {
- $myhost = str_replace('.', '\.', $this->settings['system']['hostname']);
- $this->lighttpd_data[$vhost_filename].= '# Froxlor default vhost' . "\n";
- $this->lighttpd_data[$vhost_filename].= '$HTTP["host"] =~ "^(?:www\.|)' . $myhost . '$" {' . "\n";
-
- if ($row_ipsandports['docroot'] == '') {
- if ($this->settings['system']['froxlordirectlyviahostname']) {
- $mypath = makeCorrectDir(dirname(dirname(dirname(__FILE__))));
- } else {
- $mypath = makeCorrectDir(dirname(dirname(dirname(dirname(__FILE__)))));
- }
- } else {
- // user-defined docroot, #417
- $mypath = makeCorrectDir($row_ipsandports['docroot']);
- }
-
- $this->lighttpd_data[$vhost_filename].= ' server.document-root = "'.$mypath.'"'."\n";
-
- /**
- * dirprotection, see #72
- * @TODO use better regex for this, deferred until 0.9.5
- *
- $this->lighttpd_data[$vhost_filename].= ' $HTTP["url"] =~ "^/(.+)\/(.+)\.php" {' . "\n";
- $this->lighttpd_data[$vhost_filename].= ' url.access-deny = ("")' . "\n";
- $this->lighttpd_data[$vhost_filename].= ' }' . "\n";
- */
-
- /**
- * own php-fpm vhost
- */
- if ((int)$this->settings['phpfpm']['enabled'] == 1) {
- $domain = array(
- 'id' => 'none',
- 'domain' => $this->settings['system']['hostname'],
- 'adminid' => 1, /* first admin-user (superadmin) */
- 'mod_fcgid_starter' => -1,
- 'mod_fcgid_maxrequests' => -1,
- 'guid' => $this->settings['phpfpm']['vhost_httpuser'],
- 'openbasedir' => 0,
- 'email' => $this->settings['panel']['adminmail'],
- 'loginname' => 'froxlor.panel',
- 'documentroot' => $mypath
- );
-
- $php = new phpinterface($this->getDB(), $this->settings, $domain);
-
- $this->lighttpd_data[$vhost_filename].= ' fastcgi.server = ( '."\n";
- $this->lighttpd_data[$vhost_filename].= "\t".'".php" => ('."\n";
- $this->lighttpd_data[$vhost_filename].= "\t\t".'"localhost" => ('."\n";
- $this->lighttpd_data[$vhost_filename].= "\t\t".'"socket" => "'.$php->getInterface()->getSocketFile().'",'."\n";
- $this->lighttpd_data[$vhost_filename].= "\t\t".'"check-local" => "enable",'."\n";
- $this->lighttpd_data[$vhost_filename].= "\t\t".'"disable-time" => 1'."\n";
- $this->lighttpd_data[$vhost_filename].= "\t".')'."\n";
- $this->lighttpd_data[$vhost_filename].= "\t".')'."\n";
- $this->lighttpd_data[$vhost_filename].= ' )'."\n";
- }
-
- if ($row_ipsandports['specialsettings'] != '') {
- $this->lighttpd_data[$vhost_filename].= $row_ipsandports['specialsettings'] . "\n";
- }
-
- $this->lighttpd_data[$vhost_filename].= '}' . "\n";
- }
-
- if ($row_ipsandports['ssl'] == '1') {
- if ($row_ipsandports['ssl_cert_file'] == '') {
- $row_ipsandports['ssl_cert_file'] = $this->settings['system']['ssl_cert_file'];
- }
-
- if ($row_ipsandports['ssl_ca_file'] == '') {
- $row_ipsandports['ssl_ca_file'] = $this->settings['system']['ssl_ca_file'];
- }
-
- if ($row_ipsandports['ssl_cert_file'] != '') {
- $this->lighttpd_data[$vhost_filename].= 'ssl.engine = "enable"' . "\n";
- $this->lighttpd_data[$vhost_filename].= 'ssl.pemfile = "' . makeCorrectFile($row_ipsandports['ssl_cert_file']) . '"' . "\n";
-
- if ($row_ipsandports['ssl_ca_file'] != '') {
- $this->lighttpd_data[$vhost_filename].= 'ssl.ca-file = "' . makeCorrectFile($row_ipsandports['ssl_ca_file']) . '"' . "\n";
- }
- }
- }
-
- /**
- * this function will create a new file which will be included
- * if $this->settings['system']['apacheconf_vhost'] is a folder
- * refs #70
- */
- $vhosts = $this->createLighttpdHosts($row_ipsandports['ip'], $row_ipsandports['port'], $row_ipsandports['ssl'], $vhost_filename);
- if ($vhosts !== null && is_array($vhosts) && isset($vhosts[0])) {
- // sort vhosts by number (subdomains first!)
- sort($vhosts);
-
- foreach ($vhosts as $vhost) {
- $this->lighttpd_data[$vhost_filename].= ' include "'.$vhost.'"'."\n";
- }
- }
-
- $this->lighttpd_data[$vhost_filename].= '}' . "\n";
- }
-
- /**
- * bug #unknown-yet
- */
- $this->_createStandardErrorHandler();
- }
-
- /**
- * define a default server.error-handler-404-statement, bug #unknown-yet
- */
- private function _createStandardErrorHandler()
- {
- if ($this->settings['defaultwebsrverrhandler']['enabled'] == '1'
- && $this->settings['defaultwebsrverrhandler']['err404'] != ''
- ) {
- $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/05_froxlor_default_errorhandler.conf');
-
- if (!isset($this->lighttpd_data[$vhost_filename])) {
- $this->lighttpd_data[$vhost_filename] = '';
- }
-
- $defhandler = $this->settings['defaultwebsrverrhandler']['err404'];
- if (!validateUrl($defhandler)) {
- $defhandler = makeCorrectFile($defhandler);
- }
- $this->lighttpd_data[$vhost_filename] = 'server.error-handler-404 = "'.$defhandler.'"';
- }
- }
-
- protected function create_htaccess($domain)
- {
- $needed_htpasswds = array();
- $htpasswd_query = "SELECT * FROM " . TABLE_PANEL_HTPASSWDS . " WHERE `path` LIKE '" . $domain['documentroot'] . "%'";
- $result_htpasswds = $this->db->query($htpasswd_query);
-
- $htaccess_text = '';
- while ($row_htpasswds = $this->db->fetch_array($result_htpasswds)) {
- $row_htpasswds['path'] = makeCorrectDir($row_htpasswds['path']);
- mkDirWithCorrectOwnership($domain['documentroot'], $row_htpasswds['path'], $domain['guid'], $domain['guid']);
-
- $filename = $row_htpasswds['customerid'] . '-' . md5($row_htpasswds['path']) . '.htpasswd';
-
- if (!in_array($row_htpasswds['path'], $needed_htpasswds)) {
- if (!isset($this->needed_htpasswds[$filename])) {
- $this->needed_htpasswds[$filename] = '';
- }
-
- if (!strstr($this->needed_htpasswds[$filename], $row_htpasswds['username'] . ':' . $row_htpasswds['password'])) {
- $this->needed_htpasswds[$filename].= $row_htpasswds['username'] . ':' . $row_htpasswds['password'] . "\n";
- }
-
- $htaccess_path = substr($row_htpasswds['path'], strlen($domain['documentroot']) - 1);
- $htaccess_path = makeCorrectDir($htaccess_path);
-
- $htaccess_text.= ' $HTTP["url"] =~ "^'.$htaccess_path.'" {' . "\n";
- $htaccess_text.= ' auth.backend = "htpasswd"' . "\n";
- $htaccess_text.= ' auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n";
- $htaccess_text.= ' auth.require = ( ' . "\n";
- $htaccess_text.= ' "' . $htaccess_path . '" =>' . "\n";
- $htaccess_text.= ' (' . "\n";
- $htaccess_text.= ' "method" => "basic",' . "\n";
- $htaccess_text.= ' "realm" => "'.$row_htpasswds['authname'].'",' . "\n";
- $htaccess_text.= ' "require" => "valid-user"' . "\n";
- $htaccess_text.= ' )' . "\n";
- $htaccess_text.= ' )' . "\n";
- $htaccess_text.= ' }' . "\n";
-
- $needed_htpasswds[] = $row_htpasswds['path'];
- }
- }
-
- return $htaccess_text;
- }
-
- public function createVirtualHosts()
- {
- }
-
- public function createFileDirOptions()
- {
- }
-
- protected function composePhpOptions($domain)
- {
- }
-
- public function createOwnVhostStarter()
- {
- }
-
- protected function createLighttpdHosts($ip, $port, $ssl, $vhost_filename)
- {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `ip`='" . $ip . "' AND `port`='" . $port . "'";
- $ipandport = $this->db->query_first($query);
-
- if ($ssl == '0') {
- $query2 = "SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, `c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) WHERE `d`.`ipandport`='" . $ipandport['id'] . "' AND `d`.`aliasdomain` IS NULL AND `d`.`email_only` <> 1 ORDER BY `d`.`parentdomainid` DESC, `d`.`iswildcarddomain`, `d`.`domain` ASC";
- } else {
- $query2 = "SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, `c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) WHERE `d`.`ssl_ipandport`='" . $ipandport['id'] . "' AND `d`.`aliasdomain` IS NULL AND `d`.`email_only` <> 1 ORDER BY `d`.`parentdomainid` DESC, `d`.`iswildcarddomain`, `d`.`domain` ASC";
- }
-
- $included_vhosts = array();
- $result_domains = $this->db->query($query2);
- while ($domain = $this->db->fetch_array($result_domains)) {
- if (is_dir($this->settings['system']['apacheconf_vhost'])) {
- safe_exec('mkdir -p '.escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'].'/vhosts/')));
-
- // determine correct include-path:
- // e.g. '/etc/lighttpd/conf-enabled/vhosts/ has to become'
- // 'conf-enabled/vhosts/' (damn debian, but luckily works too on other distros)
- $_tmp_path = substr(makeCorrectDir($this->settings['system']['apacheconf_vhost']), 0, -1);
- $_pos = strrpos($_tmp_path, '/');
- $_inc_path = substr($_tmp_path, $_pos+1);
-
- // subdomain
- if((int)$domain['parentdomainid'] == 0
- && isCustomerStdSubdomain((int)$domain['id']) == false
- && ((int)$domain['ismainbutsubto'] == 0
- || domainMainToSubExists($domain['ismainbutsubto']) == false)
- ) {
- $vhost_no = '50';
- }
- // sub-but-main-domain
- elseif((int)$domain['parentdomainid'] == 0
- && isCustomerStdSubdomain((int)$domain['id']) == false
- && (int)$domain['ismainbutsubto'] > 0
- ) {
- $vhost_no = '51';
- }
- // main domain
- else {
- $vhost_no = '52';
- }
-
- if ($ssl == '1') {
- $vhost_no = (int)$vhost_no += 10;
- }
-
- $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'].'/vhosts/'.$vhost_no.'_'.$domain['domain'].'.conf');
- $included_vhosts[] = $_inc_path.'/vhosts/'.$vhost_no.'_'.$domain['domain'].'.conf';
- }
- if(!isset($this->lighttpd_data[$vhost_filename]))
- {
- $this->lighttpd_data[$vhost_filename] = '';
- }
-
- if((!empty($this->lighttpd_data[$vhost_filename])
- && !is_dir($this->settings['system']['apacheconf_vhost']))
- || is_dir($this->settings['system']['apacheconf_vhost'])
- ) {
- if ($ssl == '1') {
- $ssl_vhost = true;
- $ips_and_ports_index = 'ssl_ipandport';
- } else {
- $ssl_vhost = false;
- $ips_and_ports_index = 'ipandport';
- }
-
- $this->lighttpd_data[$vhost_filename].= $this->getVhostContent($domain, $ssl_vhost);
- $this->lighttpd_data[$vhost_filename].= isset($this->needed_htpasswds[$domain[$ips_and_ports_index]]) ? $this->needed_htpasswds[$domain[$ips_and_ports_index]] . "\n" : '';
- }
- }
- return $included_vhosts;
- }
-
- protected function getVhostContent($domain, $ssl_vhost = false)
- {
- if($ssl_vhost === true
- && $domain['ssl'] != '1')
- {
- return '';
- }
-
- if ($ssl_vhost === true
- && $domain['ssl'] == '1'
- ) {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ssl_ipandport'] . "'";
- } else {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'";
- }
-
- $ipandport = $this->db->query_first($query);
- $domain['ip'] = $ipandport['ip'];
- $domain['port'] = $ipandport['port'];
- $domain['ssl_cert_file'] = $ipandport['ssl_cert_file'];
- $domain['ssl_ca_file'] = $ipandport['ssl_ca_file'];
-
- // SSL STUFF
- $dssl = new DomainSSL($this->settings, $this->db);
- // this sets the ssl-related array-indices in the $domain array
- // if the domain has customer-defined ssl-certificates
- $dssl->setDomainSSLFilesArray($domain);
-
- if (filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
- $ipport = '[' . $domain['ip'] . ']:' . $domain['port'];
- } else {
- $ipport = $domain['ip'] . ':' . $domain['port'];
- }
-
- $vhost_content = '';
- $vhost_content.= $this->getServerNames($domain) . " {\n";
-
- // respect ssl_redirect settings, #542
- if($ssl_vhost == false
- && $domain['ssl'] == '1'
- && $domain['ssl_redirect'] == '1'
- ) {
- $domain['documentroot'] = 'https://' . $domain['domain'] . '/';
- }
-
- if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
- $vhost_content.= ' url.redirect = (' . "\n";
- $vhost_content.= ' "^/(.*)$" => "'. $this->idnaConvert->encode($domain['documentroot']) . '$1"'. "\n";
- $vhost_content.= ' )' . "\n";
- } else {
- mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true, true);
-
- $only_webroot = false;
- if ($ssl_vhost === false
- && $domain['ssl_redirect'] == '1'
- ) {
- $only_webroot = true;
- }
- $vhost_content.= $this->getWebroot($domain, $ssl_vhost);
- if (!$only_webroot) {
- if ($this->_deactivated == false) {
- $vhost_content.= $this->create_htaccess($domain);
- $vhost_content.= $this->create_pathOptions($domain);
- $vhost_content.= $this->composePhpOptions($domain);
- $vhost_content.= $this->getStats($domain);
- $vhost_content.= $this->getSslSettings($domain, $ssl_vhost);
-
- if ($domain['specialsettings'] != "") {
- $vhost_content.= $domain['specialsettings'] . "\n";
- }
-
- if ($ipandport['default_vhostconf_domain'] != '') {
- $vhost_content.= $ipandport['default_vhostconf_domain'] . "\n";
- }
-
- if ($this->settings['system']['default_vhostconf'] != '') {
- $vhost_content.= $this->settings['system']['default_vhostconf'] . "\n";
- }
- }
- $vhost_content.= $this->getLogFiles($domain);
- }
- }
-
- $vhost_content.= '}' . "\n";
-
- return $vhost_content;
- }
-
- protected function getSslSettings($domain, $ssl_vhost)
- {
- $ssl_settings = '';
-
- if($ssl_vhost === true
- && $domain['ssl'] == '1'
- && (int)$this->settings['system']['use_ssl'] == 1
- ) {
- if ($domain['ssl_cert_file'] == '') {
- $domain['ssl_cert_file'] = $this->settings['system']['ssl_cert_file'];
- }
-
- if ($domain['ssl_ca_file'] == '') {
- $domain['ssl_ca_file'] = $this->settings['system']['ssl_ca_file'];
- }
-
- if ($domain['ssl_cert_file'] != '') {
- $ssl_settings.= 'ssl.engine = "enable"' . "\n";
- $ssl_settings.= 'ssl.pemfile = "' . makeCorrectFile($domain['ssl_cert_file']) . '"' . "\n";
-
- if ($domain['ssl_ca_file'] != '') {
- $ssl_settings.= 'ssl.ca-file = "' . makeCorrectFile($domain['ssl_ca_file']) . '"' . "\n";
- }
- }
- }
- return $ssl_settings;
- }
-
- protected function getLogFiles($domain) {
-
- $logfiles_text = '';
-
- $speciallogfile = '';
- if ($domain['speciallogfile'] == '1') {
- if ($domain['parentdomainid'] == '0') {
- $speciallogfile = '-' . $domain['domain'];
- } else {
- $speciallogfile = '-' . $domain['parentdomain'];
- }
- }
-
- // The normal access/error - logging is enabled
- // error log cannot be set conditionally see
- // https://redmine.lighttpd.net/issues/665
-
- $access_log = makeCorrectFile($this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-access.log');
- // Create the logfile if it does not exist (fixes #46)
- touch($access_log);
- chown($access_log, $this->settings['system']['httpuser']);
- chgrp($access_log, $this->settings['system']['httpgroup']);
-
- $logfiles_text.= ' accesslog.filename = "' . $access_log . '"' . "\n";
-
- if ($this->settings['system']['awstats_enabled'] == '1') {
-
- if ((int)$domain['parentdomainid'] == 0) {
- // prepare the aliases and subdomains for stats config files
- $server_alias = '';
- $alias_domains = $this->db->query('SELECT `domain`, `iswildcarddomain`, `wwwserveralias` FROM `' . TABLE_PANEL_DOMAINS . '`
- WHERE `aliasdomain`=\'' . $domain['id'] . '\'
- OR `parentdomainid` =\''. $domain['id']. '\'');
-
- while (($alias_domain = $this->db->fetch_array($alias_domains)) !== false) {
-
- $server_alias.= ' ' . $alias_domain['domain'] . ' ';
-
- if ($alias_domain['iswildcarddomain'] == '1') {
- $server_alias.= '*.' . $domain['domain'];
- } else {
- if ($alias_domain['wwwserveralias'] == '1') {
- $server_alias.= 'www.' . $alias_domain['domain'];
- } else {
- $server_alias.= '';
- }
- }
- }
-
- if ($domain['iswildcarddomain'] == '1') {
- $alias = '*.' . $domain['domain'];
- } else {
- if ($domain['wwwserveralias'] == '1') {
- $alias = 'www.' . $domain['domain'];
- } else {
- $alias = '';
- }
- }
-
- // After inserting the AWStats information,
- // be sure to build the awstats conf file as well
- // and chown it using $awstats_params, #258
- // Bug 960 + Bug 970 : Use full $domain instead of custom $awstats_params as following classes depend on the informations
- createAWStatsConf($this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-access.log', $domain['domain'], $alias . $server_alias, $domain['customerroot'], $domain);
- }
- }
-
- return $logfiles_text;
- }
-
- protected function create_pathOptions($domain)
- {
- $query = "SELECT * FROM " . TABLE_PANEL_HTACCESS . " WHERE `path` LIKE '" . $domain['documentroot'] . "%'";
- $result = $this->db->query($query);
-
- $path_options = '';
- $error_string = '';
-
- while ($row = $this->db->fetch_array($result)) {
-
- if (!empty($row['error404path'])) {
- $defhandler = $row['error404path'];
- if (!validateUrl($defhandler)) {
- $defhandler = makeCorrectFile($domain['documentroot'] . '/' . $defhandler);
- }
- $error_string.= ' server.error-handler-404 = "' . $defhandler . '"' . "\n\n";
- }
-
- if ($row['options_indexes'] != '0') {
- if (!empty($error_string)) {
- $path_options.= $error_string;
- // reset $error_string here to prevent duplicate entries
- $error_string = '';
- }
-
- $path = makeCorrectDir(substr($row['path'], strlen($domain['documentroot']) - 1));
- mkDirWithCorrectOwnership($domain['documentroot'], $row['path'], $domain['guid'], $domain['guid']);
-
- // We need to remove the last slash, otherwise the regex wouldn't work
- if ($row['path'] != $domain['documentroot']) {
- $path = substr($path, 0, -1);
- }
- $path_options.= ' $HTTP["url"] =~ "^' . $path . '($|/)" {' . "\n";
- $path_options.= "\t" . 'dir-listing.activate = "enable"' . "\n";
- $path_options.= ' }' . "\n\n";
- } else {
- $path_options = $error_string;
- }
-
- if (customerHasPerlEnabled($domain['customerid'])
- && $row['options_cgi'] != '0'
- ) {
- $path = makeCorrectDir(substr($row['path'], strlen($domain['documentroot']) - 1));
- mkDirWithCorrectOwnership($domain['documentroot'], $row['path'], $domain['guid'], $domain['guid']);
-
- // We need to remove the last slash, otherwise the regex wouldn't work
- if($row['path'] != $domain['documentroot']) {
- $path = substr($path, 0, -1);
- }
- $path_options.= ' $HTTP["url"] =~ "^' . $path . '($|/)" {' . "\n";
- $path_options.= "\t" . 'cgi.assign = (' . "\n";
- $path_options.= "\t\t" . '".pl" => "'.makeCorrectFile($this->settings['system']['perl_path']).'",' . "\n";
- $path_options.= "\t\t" . '".cgi" => "'.makeCorrectFile($this->settings['system']['perl_path']).'"' . "\n";
- $path_options.= "\t" . ')' . "\n";
- $path_options.= ' }' . "\n\n";
- }
- }
-
- return $path_options;
- }
-
- protected function getDirOptions($domain)
- {
- $query = "SELECT * FROM " . TABLE_PANEL_HTPASSWDS . " WHERE `customerid`='" . $domain['customerid'] . "'";
- $result = $this->db->query($query);
-
- while ($row_htpasswds = $this->db->fetch_array($result)) {
- if ($auth_backend_loaded[$domain['ipandport']] != 'yes'
- && $auth_backend_loaded[$domain['ssl_ipandport']] != 'yes'
- ) {
- $filename = $domain['customerid'] . '.htpasswd';
-
- if ($this->auth_backend_loaded[$domain['ipandport']] != 'yes') {
- $auth_backend_loaded[$domain['ipandport']] = 'yes';
- $diroption_text.= 'auth.backend = "htpasswd"' . "\n";
- $diroption_text.= 'auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n";
- $this->needed_htpasswds[$filename] = $row_htpasswds['username'] . ':' . $row_htpasswds['password'] . "\n";
- $diroption_text.= 'auth.require = ( ' . "\n";
- $previous_domain_id = '1';
- } elseif($this->auth_backend_loaded[$domain['ssl_ipandport']] != 'yes') {
- $auth_backend_loaded[$domain['ssl_ipandport']] = 'yes';
- $diroption_text.= 'auth.backend= "htpasswd"' . "\n";
- $diroption_text.= 'auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n";
- $this->needed_htpasswds[$filename] = $row_htpasswds['username'] . ':' . $row_htpasswds['password'] . "\n";
- $diroption_text.= 'auth.require = ( ' . "\n";
- $previous_domain_id = '1';
- }
- }
-
- $diroption_text.= '"' . makeCorrectDir($row_htpasswds['path']) . '" =>' . "\n";
- $diroption_text.= '(' . "\n";
- $diroption_text.= ' "method" => "basic",' . "\n";
- $diroption_text.= ' "realm" => "'.$row_htpasswds['authname'].'",' . "\n";
- $diroption_text.= ' "require" => "valid-user"' . "\n";
- $diroption_text.= ')' . "\n";
-
- if ($this->auth_backend_loaded[$domain['ssl_ipandport']] == 'yes') {
- $this->needed_htpasswds[$domain['ssl_ipandport']].= $diroption_text;
- }
-
- if ($this->auth_backend_loaded[$domain['ipandport']] != 'yes') {
- $this->needed_htpasswds[$domain['ipandport']].= $diroption_text;
- }
- }
-
- return ' auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n";
- }
-
- protected function getServerNames($domain)
- {
- $server_string = array();
- $domain_name = str_replace('.', '\.', $domain['domain']);
-
- if ($domain['iswildcarddomain'] == '1') {
- $server_string[] = '(?:^|\.)' . $domain_name . '$';
- } else {
- if ($domain['wwwserveralias'] == '1') {
- $server_string[] = '^(?:www\.|)' . $domain_name . '$';
- } else {
- $server_string[] = '^'.$domain_name.'$';
- }
- }
-
- $alias_domains = $this->db->query('SELECT `domain`, `iswildcarddomain`, `wwwserveralias` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . $domain['id'] . '\'');
-
- while (($alias_domain = $this->db->fetch_array($alias_domains)) !== false) {
- $alias_domain_name = ereg_replace('\.', '\.', $alias_domain['domain']);
-
- if ($alias_domain['iswildcarddomain'] == '1') {
- $server_string[] = '(?:^|\.)' . $alias_domain_name . '$';
- } else {
- if ($alias_domain['wwwserveralias'] == '1') {
- $server_string[] = '^(?:www\.|)' . $alias_domain_name . '$';
- } else {
- $server_string[] = '^'.$alias_domain_name . '$';
- }
- }
- }
-
- for ($i = 0;$i < sizeof($server_string); $i++) {
- $data = $server_string[$i];
-
- if (sizeof($server_string) > 1) {
- if ($i == 0) {
- $servernames_text = '(' . $data . '|';
- } elseif(sizeof($server_string) - 1 == $i) {
- $servernames_text .= $data . ')';
- } else {
- $servernames_text .= $data . '|';
- }
- } else {
- $servernames_text = $data;
- }
- }
-
- unset($data);
-
- if ($servernames_text != '') {
- $servernames_text = '$HTTP["host"] =~ "' . $servernames_text . '"';
- } else {
- $servernames_text = '$HTTP["host"] == "' . $domain['domain'] . '"';
- }
-
- return $servernames_text;
- }
-
- protected function getWebroot($domain, $ssl)
- {
- $webroot_text = '';
-
- if ($domain['deactivated'] == '1'
- && $this->settings['system']['deactivateddocroot'] != ''
- ) {
- $webroot_text.= ' # Using docroot for deactivated users...' . "\n";
- $webroot_text.= ' server.document-root = "' . makeCorrectDir($this->settings['system']['deactivateddocroot']) . "\"\n";
- $this->_deactivated = true;
- } else {
- if ($ssl === false
- && $domain['ssl_redirect'] == '1'
- ) {
- $redirect_domain = $this->idnaConvert->encode('https://' . $domain['domain']);
- $webroot_text.= ' url.redirect = ('."\n";
- $webroot_text.= "\t" . '"^/(.*)" => "' . $redirect_domain . '/$1",' . "\n";
- $webroot_text.= "\t" . '"" => "' . $redirect_domain . '",' . "\n";
- $webroot_text.= "\t" . '"/" => "' . $redirect_domain . '"' . "\n";
- $webroot_text.= ' )'."\n";
- } elseif(preg_match("#^https?://#i", $domain['documentroot'])) {
- $redirect_domain = $this->idnaConvert->encode($domain['documentroot']);
- $webroot_text.= ' url.redirect = ('."\n";
- $webroot_text.= "\t" . '"^/(.*)" => "' . $redirect_domain . '/$1",' . "\n";
- $webroot_text.= "\t" . '"" => "' . $redirect_domain . '",' . "\n";
- $webroot_text.= "\t" . '"/" => "' . $redirect_domain . '"' . "\n";
- $webroot_text.= ' )'."\n";
- } else {
- $webroot_text.= ' server.document-root = "' . makeCorrectDir($domain['documentroot']) . "\"\n";
- }
- $this->_deactivated = false;
- }
-
- return $webroot_text;
- }
-
- /*
- * Lets set the text part for the stats software
- */
-
- protected function getStats($domain)
- {
- $stats_text = '';
-
- if ($domain['speciallogfile'] == '1') {
- if ($domain['parentdomainid'] == '0') {
- if ($this->settings['system']['awstats_enabled'] == '1') {
- $stats_text.= ' alias.url = ( "/awstats/" => "'.makeCorrectFile($domain['customerroot'] . '/awstats/' . $domain['domain']).'" )' . "\n";
- $stats_text.= ' alias.url += ( "/awstats-icon" => "' . makeCorrectDir($this->settings['system']['awstats_icons']) . '" )' . "\n";
- } else {
- $stats_text.= ' alias.url = ( "/webalizer/" => "'.makeCorrectFile($domain['customerroot'] . '/webalizer/' . $domain['domain']).'/" )' . "\n";
- }
- } else {
- if ($this->settings['system']['awstats_enabled'] == '1') {
- $stats_text.= ' alias.url = ( "/awstats/" => "'.makeCorrectFile($domain['customerroot'] . '/awstats/' . $domain['parentdomain']).'" )' . "\n";
- $stats_text.= ' alias.url += ( "/awstats-icon" => "' . makeCorrectDir($this->settings['system']['awstats_icons']) . '" )' . "\n";
- } else {
- $stats_text.= ' alias.url = ( "/webalizer/" => "'.makeCorrectFile($domain['customerroot'] . '/webalizer/' . $domain['parentdomain']).'/" )' . "\n";
- }
- }
- } else {
- if ($domain['customerroot'] != $domain['documentroot']) {
- if ($this->settings['system']['awstats_enabled'] == '1') {
- $stats_text.= ' alias.url = ( "/awstats/" => "'.makeCorrectFile($domain['customerroot'] . '/awstats/' . $domain['domain']).'" )' . "\n";
- $stats_text.= ' alias.url += ( "/awstats-icon" => "' . makeCorrectDir($this->settings['system']['awstats_icons']) . '" )' . "\n";
- } else {
- $stats_text.= ' alias.url = ( "/webalizer/" => "'.makeCorrectFile($domain['customerroot'] . '/webalizer/').'" )' . "\n";
- }
- }
- // if the docroots are equal, we still have to set an alias for awstats
- // because the stats are in /awstats/[domain], not just /awstats/
- // also, the awstats-icons are someplace else too!
- // -> webalizer does not need this!
- elseif ($this->settings['system']['awstats_enabled'] == '1') {
- $stats_text.= ' alias.url = ( "/awstats/" => "'.makeCorrectFile($domain['documentroot'] . '/awstats/' . $domain['domain']).'" )' . "\n";
- $stats_text.= ' alias.url += ( "/awstats-icon" => "' . makeCorrectDir($this->settings['system']['awstats_icons']) . '" )' . "\n";
- }
- }
-
- return $stats_text;
- }
-
- public function writeConfigs()
- {
- fwrite($this->debugHandler, ' lighttpd::writeConfigs: rebuilding ' . $this->settings['system']['apacheconf_vhost'] . "\n");
- $this->logger->logAction(CRON_ACTION, LOG_INFO, "rebuilding " . $this->settings['system']['apacheconf_vhost']);
-
- if (!isConfigDir($this->settings['system']['apacheconf_vhost'])) {
- // Save one big file
- $vhosts_file = '';
-
- // sort by filename so the order is:
- // 1. main-domains
- // 2. subdomains as main-domains
- // 3. subdomains
- // (former #437) - #833 (the numbering is done in createLighttpdHosts())
- ksort($this->lighttpd_data);
-
- foreach ($this->lighttpd_data as $vhosts_filename => $vhost_content) {
- $vhosts_file.= $vhost_content . "\n\n";
- }
-
- $vhosts_filename = $this->settings['system']['apacheconf_vhost'];
-
- // Apply header
- $vhosts_file = '# ' . basename($vhosts_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $vhosts_file;
- $vhosts_file_handler = fopen($vhosts_filename, 'w');
- fwrite($vhosts_file_handler, $vhosts_file);
- fclose($vhosts_file_handler);
- } else {
- if (!file_exists($this->settings['system']['apacheconf_vhost'])) {
- fwrite($this->debugHandler, ' lighttpd::writeConfigs: mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'])) . "\n");
- $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'])));
- safe_exec('mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'])));
- }
-
- // Write a single file for every vhost
- foreach ($this->lighttpd_data as $vhosts_filename => $vhosts_file) {
- $this->known_filenames[] = basename($vhosts_filename);
-
- // Apply header
- $vhosts_file = '# ' . basename($vhosts_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $vhosts_file;
-
- if (!empty($vhosts_filename)) {
- $vhosts_file_handler = fopen($vhosts_filename, 'w');
- fwrite($vhosts_file_handler, $vhosts_file);
- fclose($vhosts_file_handler);
- }
- }
- }
-
- // Write the diroptions
-
- if (isConfigDir($this->settings['system']['apacheconf_htpasswddir'])) {
- foreach ($this->needed_htpasswds as $key => $data) {
- if (!is_dir($this->settings['system']['apacheconf_htpasswddir'])) {
- mkdir(makeCorrectDir($this->settings['system']['apacheconf_htpasswddir']));
- }
-
- $filename = makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $key);
- $htpasswd_handler = fopen($filename, 'w');
- fwrite($htpasswd_handler, $data);
- fclose($htpasswd_handler);
- }
- }
- }
-}
diff --git a/scripts/jobs/cron_tasks.inc.http.30.nginx.php b/scripts/jobs/cron_tasks.inc.http.30.nginx.php
index 08af45d2..cce689eb 100644
--- a/scripts/jobs/cron_tasks.inc.http.30.nginx.php
+++ b/scripts/jobs/cron_tasks.inc.http.30.nginx.php
@@ -182,7 +182,6 @@ class nginx
$this->nginx_data[$vhost_filename] .= "\t".'# Froxlor default vhost' . "\n";
$this->nginx_data[$vhost_filename] .= "\t".'server_name ' . $this->settings['system']['hostname'] . ';' . "\n";
-
$this->nginx_data[$vhost_filename] .= "\t".'access_log /var/log/nginx/access.log;' . "\n";
$mypath = '';
@@ -214,15 +213,7 @@ class nginx
* SSL config options
*/
if ($row_ipsandports['ssl'] == '1') {
- if ($row_ipsandports['ssl_cert_file'] != '') {
- $this->nginx_data[$vhost_filename] .= "\t" . 'ssl_certificate ' . makeCorrectFile($row_ipsandports['ssl_cert_file']) . ';' . "\n";
- }
- if ($row_ipsandports['ssl_key_file'] != '') {
- $this->nginx_data[$vhost_filename] .= "\t" . 'ssl_certificate_key ' .makeCorrectFile($row_ipsandports['ssl_key_file']) . ';' . "\n";
- }
- if ($row_ipsandports['ssl_ca_file'] != '') {
- $this->nginx_data[$vhost_filename] .= 'ssl_client_certificate ' . makeCorrectFile($row_ipsandports['ssl_ca_file']) . ';' . "\n";
- }
+ $this->nginx_data[$vhost_filename].=$this->composeSslSettings($row_ipsandports);
}
$this->nginx_data[$vhost_filename] .= "\t".'location ~ \.php$ {'."\n";
@@ -260,30 +251,43 @@ class nginx
$this->nginx_data[$vhost_filename] .= '}' . "\n\n";
// End of Froxlor server{}-part
}
- $this->createNginxHosts($row_ipsandports['ip'], $row_ipsandports['port'], $row_ipsandports['ssl'], $vhost_filename);
}
+ $this->createNginxHosts();
+
/**
* standard error pages
*/
$this->_createStandardErrorHandler();
}
- protected function createNginxHosts($ip, $port, $ssl, $vhost_filename)
+ protected function createNginxHosts()
{
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `ip` = '" . $ip . "' AND `port` = '" . $port . "'";
- $ipandport = $this->db->query_first($query);
+ $query = "SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`,
+ `d`.`phpsettingid`, `c`.`adminid`, `c`.`guid`, `c`.`email`,
+ `c`.`documentroot` AS `customerroot`, `c`.`deactivated`,
+ `c`.`phpenabled` AS `phpenabled`, `d`.`mod_fcgid_starter`,
+ `d`.`mod_fcgid_maxrequests`, `p`.`ssl` AS `ssl`,
+ `p`.`ssl_cert_file`, `p`.`ssl_key_file`, `p`.`ssl_ca_file`, `p`.`ssl_cert_chainfile`
+ FROM `".TABLE_PANEL_DOMAINS."` `d`
+
+ LEFT JOIN `".TABLE_PANEL_CUSTOMERS."` `c` USING(`customerid`)
+ LEFT JOIN `".TABLE_PANEL_DOMAINS."` `pd` ON (`pd`.`id` = `d`.`parentdomainid`)
+
+ INNER JOIN (
+ SELECT * FROM (
+ SELECT `di`.`id_domain` , `p`.`ssl`, `p`.`ssl_cert_file`, `p`.`ssl_key_file`, `p`.`ssl_ca_file`, `p`.`ssl_cert_chainfile`
+ FROM `".TABLE_DOMAINTOIP."` `di` , `".TABLE_PANEL_IPSANDPORTS."` `p`
+ WHERE `p`.`id` = `di`.`id_ipandports`
+ ORDER BY `p`.`ssl` DESC
+ ) AS my_table_tmp
+ GROUP BY `id_domain`
+ ) AS p ON p.`id_domain` = `d`.`id`
+
+ WHERE `d`.`aliasdomain` IS NULL
+ ORDER BY `d`.`parentdomainid` DESC, `d`.`iswildcarddomain`, `d`.`domain` ASC;";
- $query2 = "SELECT `d`.*, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, `c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) ";
- if ($ssl == '0') {
- $query2 .= "WHERE `d`.`ipandport` = '" . $ipandport['id'] . "' ";
- } else {
- $query2 .= "WHERE `d`.`ssl_ipandport` = '" . $ipandport['id'] . "' ";
- }
- $query2 .= "AND `d`.`aliasdomain` IS NULL AND `d`.`email_only` <> 1 ORDER BY `d`.`iswildcarddomain`, `d`.`domain` ASC";
-
- $included_vhosts = array();
- $result_domains = $this->db->query($query2);
+ $result_domains = $this->db->query($query);
while ($domain = $this->db->fetch_array($result_domains)) {
if (is_dir($this->settings['system']['apacheconf_vhost'])) {
safe_exec('mkdir -p '.escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'])));
@@ -294,25 +298,20 @@ class nginx
$this->nginx_data[$vhost_filename] = '';
}
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'";
- $ipandport = $this->db->query_first($query);
- $domain['ip'] = $ipandport['ip'];
- $domain['port'] = $ipandport['port'];
- $domain['ssl_cert_file'] = $ipandport['ssl_cert_file'];
-
- if ((!empty($this->nginx_data[$vhost_filename]) && !is_dir($this->settings['system']['apacheconf_vhost']))
- || is_dir($this->settings['system']['apacheconf_vhost'])
+ if ((!empty($this->nginx_data[$vhost_filename])
+ && !is_dir($this->settings['system']['apacheconf_vhost']))
+ || is_dir($this->settings['system']['apacheconf_vhost'])
) {
- if ($ssl == '1') {
- $ssl_vhost = true;
- $ips_and_ports_index = 'ssl_ipandport';
- } else {
- $ssl_vhost = false;
- $ips_and_ports_index = 'ipandport';
+ // Create non-ssl host
+ $this->nginx_data[$vhost_filename].= $this->getVhostContent($domain, false);
+ if ($domain['ssl'] == '1' || $domain['ssl_redirect'] == '1') {
+ $vhost_filename_ssl = $this->getVhostFilename($domain, true);
+ if (!isset($this->nginx_data[$vhost_filename_ssl])) {
+ $this->nginx_data[$vhost_filename_ssl] = '';
+ }
+ // Now enable ssl stuff
+ $this->nginx_data[$vhost_filename_ssl] .= $this->getVhostContent($domain, true);
}
-
- $this->nginx_data[$vhost_filename].= $this->getVhostContent($domain, $ssl_vhost);
- $this->nginx_data[$vhost_filename].= isset($this->needed_htpasswds[$domain[$ips_and_ports_index]]) ? $this->needed_htpasswds[$domain[$ips_and_ports_index]] . "\n" : '';
}
}
}
@@ -347,95 +346,150 @@ class nginx
{
if ($ssl_vhost === true
&& $domain['ssl'] != '1'
+ && $domain['ssl_redirect'] != '1'
) {
return '';
}
- if ($ssl_vhost === true
- && $domain['ssl'] == '1'
- ) {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ssl_ipandport'] . "'";
- } else {
- $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'";
- }
-
- $ipandport = $this->db->query_first($query);
- $domain['ip'] = $ipandport['ip'];
- $domain['port'] = $ipandport['port'];
- $domain['ssl_cert_file'] = $ipandport['ssl_cert_file'];
-
- // SSL STUFF
- $dssl = new DomainSSL($this->settings, $this->db);
- // this sets the ssl-related array-indices in the $domain array
- // if the domain has customer-defined ssl-certificates
- $dssl->setDomainSSLFilesArray($domain);
-
- if (filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
- $ipport = '[' . $domain['ip'] . ']:' . $domain['port'];
- } else {
- $ipport = $domain['ip'] . ':' . $domain['port'];
- }
-
$vhost_content = '';
- // open vhost-container
- $vhost_content .= 'server { ' . "\n";
- // listening statement (required)
- $vhost_content .= "\t" . 'listen ' . $ipport . ($ssl_vhost == true ? ' ssl' : '') . ';' . "\n";
-
- // get all server-names
- $vhost_content .= $this->getServerNames($domain);
-
- // respect ssl_redirect settings, #542
- if ($ssl_vhost == false
- && $domain['ssl'] == '1'
- && $domain['ssl_redirect'] == '1'
+ $query = "SELECT * FROM `".TABLE_PANEL_IPSANDPORTS."` `i`, `".TABLE_DOMAINTOIP."` `dip` WHERE dip.id_domain = '".$domain['id']."' AND i.id = dip.id_ipandports ";
+ if ($ssl_vhost === true
+ && ($domain['ssl'] == '1' || $domain['ssl_redirect'] == '1')
) {
- $domain['documentroot'] = 'https://' . $domain['domain'] . '/';
- }
-
- // if the documentroot is an URL we just redirect
- if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
- $vhost_content .= "\t".'rewrite ^(.*) '.$this->idnaConvert->encode($domain['documentroot']).'$1 permanent;'."\n";
+ // by ordering by cert-file the row with filled out SSL-Fields will be shown last,
+ // thus it is enough to fill out 1 set of SSL-Fields
+ $query .= "AND i.ssl = 1 ORDER BY i.ssl_cert_file ASC;";
} else {
- mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true);
+ $query .= "AND i.ssl = '0';";
+ }
- $vhost_content .= $this->getLogFiles($domain);
- $vhost_content .= $this->getWebroot($domain, $ssl_vhost);
+ $result = $this->db->query($query);
+ while ($ipandport = $this->db->fetch_array($result)) {
+
+ $domain['ip'] = $ipandport['ip'];
+ $domain['port'] = $ipandport['port'];
+ $domain['ssl_cert_file'] = $ipandport['ssl_cert_file']; // save latest delivered ssl settings
+ $domain['ssl_key_file'] = $ipandport['ssl_key_file'];
+ $domain['ssl_ca_file'] = $ipandport['ssl_ca_file'];
+ // #418
+ $domain['ssl_cert_chainfile'] = $ipandport['ssl_cert_chainfile'];
+
+ // SSL STUFF
+ $dssl = new DomainSSL($this->settings, $this->db);
+ // this sets the ssl-related array-indices in the $domain array
+ // if the domain has customer-defined ssl-certificates
+ $dssl->setDomainSSLFilesArray($domain);
- if ($this->_deactivated == false) {
- $vhost_content .= $this->create_pathOptions($domain);
- $vhost_content .= $this->composePhpOptions($domain, $ssl_vhost);
-
- if ($domain['specialsettings'] != "") {
- $vhost_content .= $domain['specialsettings'] . "\n";
- }
-
- if ($ipandport['default_vhostconf_domain'] != '') {
- $vhost_content .= $ipandport['default_vhostconf_domain'] . "\n";
- }
-
- if ($this->settings['system']['default_vhostconf'] != '') {
- $vhost_content .= $this->settings['system']['default_vhostconf'] . "\n";
- }
+ if (filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $ipport = '[' . $domain['ip'] . ']:' . $domain['port'];
+ } else {
+ $ipport = $domain['ip'] . ':' . $domain['port'];
}
- // merge duplicate / sections, #1193
- $l_regex1 = "/(location\ \/\ \{)(.*)(\})/smU";
- $l_regex2 = "/(location\ \/\ \{.*\})/smU";
- $replace_by = '';
- $replacements = preg_match_all($l_regex1,$vhost_content,$out);
- if ($replacements > 1) {
- foreach ($out[2] as $val) {
- $replace_by .= $val."\n";
+ $vhost_content.= 'server { ' . "\n";
+ $vhost_content.= "\t" . 'listen ' . $ipport . ($ssl_vhost == true ? ' ssl' : '') . ';' . "\n";
+
+ // get all server-names
+ $vhost_content .= $this->getServerNames($domain);
+
+ // respect ssl_redirect settings, #542
+ if ($ssl_vhost == false
+ && $domain['ssl'] == '1'
+ && $domain['ssl_redirect'] == '1')
+ {
+ $domain['documentroot'] = 'https://' . $domain['domain'] . '/';
+ }
+
+ // if the documentroot is an URL we just redirect
+ if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
+ $vhost_content .= "\t".'rewrite ^(.*) '.$this->idnaConvert->encode($domain['documentroot']).'$1 permanent;'."\n";
+ } else {
+ mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true);
+
+ $vhost_content .= $this->getLogFiles($domain);
+ $vhost_content .= $this->getWebroot($domain, $ssl_vhost);
+
+ if ($this->_deactivated == false) {
+
+ if ($ssl_vhost === true
+ && $domain['ssl'] == '1'
+ && $this->settings['system']['use_ssl'] == '1'
+ ) {
+ $vhost_content.= $this->composeSslSettings($domain);
+ }
+ $vhost_content.= $this->create_pathOptions($domain);
+ $vhost_content.= $this->composePhpOptions($domain, $ssl_vhost);
+
+ $vhost_content.= isset($this->needed_htpasswds[$domain['id']]) ? $this->needed_htpasswds[$domain['id']] . "\n" : '';
+
+ if ($domain['specialsettings'] != "") {
+ $vhost_content .= $domain['specialsettings'] . "\n";
+ }
+
+ if ($ipandport['default_vhostconf_domain'] != '') {
+ $vhost_content .= $ipandport['default_vhostconf_domain'] . "\n";
+ }
+
+ if ($this->settings['system']['default_vhostconf'] != '') {
+ $vhost_content .= $this->settings['system']['default_vhostconf'] . "\n";
+ }
}
- $vhost_content = preg_replace($l_regex2, "", $vhost_content, $replacements-1);
- $vhost_content = preg_replace($l_regex2, "location / {\n\t\t". $replace_by ."\t}\n", $vhost_content);
+
+ // merge duplicate / sections, #1193
+ $l_regex1 = "/(location\ \/\ \{)(.*)(\})/smU";
+ $l_regex2 = "/(location\ \/\ \{.*\})/smU";
+ $replace_by = '';
+ $replacements = preg_match_all($l_regex1,$vhost_content,$out);
+ if ($replacements > 1) {
+ foreach ($out[2] as $val) {
+ $replace_by .= $val."\n";
+ }
+ $vhost_content = preg_replace($l_regex2, "", $vhost_content, $replacements-1);
+ $vhost_content = preg_replace($l_regex2, "location / {\n\t\t". $replace_by ."\t}\n", $vhost_content);
+ }
+ }
+ $vhost_content .= '}' . "\n\n";
+ }
+ return $vhost_content;
+ }
+
+ protected function composeSslSettings($domain) {
+
+ $sslsettings = '';
+
+ if ($domain['ssl_cert_file'] == '') {
+ $domain['ssl_cert_file'] = $this->settings['system']['ssl_cert_file'];
+ }
+
+ if ($domain['ssl_key_file'] == '') {
+ $domain['ssl_key_file'] = $this->settings['system']['ssl_key_file'];
+ }
+
+ if ($domain['ssl_ca_file'] == '') {
+ $domain['ssl_ca_file'] = $this->settings['system']['ssl_ca_file'];
+ }
+
+ // #418
+ if ($domain['ssl_cert_chainfile'] == '') {
+ $domain['ssl_cert_chainfile'] = $this->settings['system']['ssl_cert_chainfile'];
+ }
+
+ if ($domain['ssl_cert_file'] != '') {
+ // FIXME ssl on now belongs to the listen block as 'ssl' at the end
+ $sslsettings .= "\t" . 'ssl on;' . "\n";
+ $sslsettings .= "\t" . 'ssl_certificate ' . makeCorrectFile($domain['ssl_cert_file']) . ';' . "\n";
+
+ if ($domain['ssl_key_file'] != '') {
+ $sslsettings .= "\t" . 'ssl_certificate_key ' .makeCorrectFile($domain['ssl_key_file']) . ';' . "\n";
+ }
+
+ if ($domain['ssl_ca_file'] != '') {
+ $sslsettings.= 'ssl_client_certificate ' . makeCorrectFile($domain['ssl_ca_file']) . ';' . "\n";
}
}
- $vhost_content .= '}' . "\n\n";
- return $vhost_content;
+ return $sslsettings;
}
protected function create_pathOptions($domain)
diff --git a/templates/Froxlor/admin/domains/domains.tpl b/templates/Froxlor/admin/domains/domains.tpl
index 1420e111..8ace9f0f 100644
--- a/templates/Froxlor/admin/domains/domains.tpl
+++ b/templates/Froxlor/admin/domains/domains.tpl
@@ -26,7 +26,7 @@
| {$lng['domains']['domainname']} {$arrowcode['d.domain']} |
- {$lng['admin']['ipsandports']['ip']} {$arrowcode['ip.ip']} : {$lng['admin']['ipsandports']['port']} {$arrowcode['ip.port']} |
+ {$lng['admin']['ipsandports']['ip']} : {$lng['admin']['ipsandports']['port']} |
{$lng['admin']['customer']} {$arrowcode['c.loginname']} |
{$lng['panel']['options']} |