mirror of
https://github.com/Froxlor/Froxlor.git
synced 2024-09-21 10:27:29 +00:00
merge tilman19-master branch (multistack support) - note: this is a very early stage, don't expect everything to work 100%, use at your own risk. Testers are very very welcome (only apache2 and nginx (even more testing) so far)
Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
commit
9e405dafce
@ -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", "<br />", $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'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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');
|
||||
}
|
||||
|
0
lib/classes/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README
Normal file → Executable file
0
lib/classes/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/README
Normal file → Executable file
@ -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 '<select
|
||||
id="'.$fieldname.'"
|
||||
name="'.$fieldname.'"
|
||||
'.(isset($data['class']) ? ' class="'.$data['class'] .'" ' : '').'
|
||||
>'
|
||||
.$select_var.
|
||||
'</select>';
|
||||
|
||||
return '<select
|
||||
id="'.$fieldname.'"
|
||||
name="'.$fieldname.'"
|
||||
'.(isset($data['class']) ? ' class="'.$data['class'] .'" ' : '').'
|
||||
>'
|
||||
.$select_var.
|
||||
'</select>';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function to generate checkboxes.
|
||||
*
|
||||
*
|
||||
* <code>
|
||||
* $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
|
||||
* )
|
||||
* </code>
|
||||
*
|
||||
*
|
||||
* @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 .= '<label><input type="checkbox" name="'.$fieldname.$isArray.'" value="'.$val['value'].'" '.$isChecked.'/>'.$key.'</label>';
|
||||
}
|
||||
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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',
|
||||
|
@ -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',
|
||||
|
@ -17,7 +17,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
function getIpPortCombinations($ssl = null)
|
||||
function getIpPortCombinations($ssl = false)
|
||||
{
|
||||
global $db, $theme;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -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 = '';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 = '<VirtualHost ' . $ipport . '>' . "\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 .= '<VirtualHost ' . $ipport . '>' . "\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 .= ' <IfModule mod_rewrite.c>'."\n";
|
||||
$vhost_content .= ' RewriteEngine On' . "\n";
|
||||
$vhost_content .= ' RewriteCond %{HTTPS} off' . "\n";
|
||||
$vhost_content .= ' RewriteRule ^/(.*) '. $corrected_docroot.'$1 ' . $modrew_red . "\n";
|
||||
$vhost_content .= ' </IfModule>' . "\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 .= ' <IfModule mod_rewrite.c>'."\n";
|
||||
$vhost_content .= ' RewriteEngine On' . "\n";
|
||||
$vhost_content .= ' RewriteCond %{HTTPS} off' . "\n";
|
||||
$vhost_content .= ' RewriteRule ^/(.*) '. $corrected_docroot.'$1 ' . $modrew_red . "\n";
|
||||
$vhost_content .= ' </IfModule>' . "\n";
|
||||
$vhost_content .= '</VirtualHost>' . "\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 .= '</VirtualHost>' . "\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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,876 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2003-2009 the SysCP Team (see authors).
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Florian Lippert <flo@syscp.org> (2003-2009)
|
||||
* @author Froxlor team <team@froxlor.org> (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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -26,7 +26,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{$lng['domains']['domainname']} {$arrowcode['d.domain']}</th>
|
||||
<th>{$lng['admin']['ipsandports']['ip']} {$arrowcode['ip.ip']} : {$lng['admin']['ipsandports']['port']} {$arrowcode['ip.port']}</th>
|
||||
<th>{$lng['admin']['ipsandports']['ip']} : {$lng['admin']['ipsandports']['port']}</th>
|
||||
<th>{$lng['admin']['customer']} {$arrowcode['c.loginname']}</th>
|
||||
<th>{$lng['panel']['options']}</th>
|
||||
</tr>
|
||||
|
Loading…
Reference in New Issue
Block a user