2010-01-20 16:55:27 +00:00
< ? php
/**
2010-01-25 10:06:34 +00:00
* This file is part of the Froxlor project .
2010-01-20 16:55:27 +00:00
* Copyright ( c ) 2003 - 2009 the SysCP Team ( see authors ) .
2010-01-25 10:06:34 +00:00
* Copyright ( c ) 2010 the Froxlor Team ( see authors ) .
2010-01-20 16:55:27 +00:00
*
* For the full copyright and license information , please view the COPYING
* file that was distributed with this source code . You can also view the
2010-01-25 10:06:34 +00:00
* COPYING file online at http :// files . froxlor . org / misc / COPYING . txt
2010-01-20 16:55:27 +00:00
*
* @ copyright ( c ) the authors
2010-01-25 10:06:34 +00:00
* @ author Florian Lippert < flo @ syscp . org > ( 2003 - 2009 )
* @ author Froxlor team < team @ froxlor . org > ( 2010 - )
* @ license GPLv2 http :// files . froxlor . org / misc / COPYING . txt
2010-01-20 16:55:27 +00:00
* @ package Panel
2011-05-04 09:59:20 +00:00
*
2010-01-20 16:55:27 +00:00
*/
define ( 'AREA' , 'customer' );
2013-11-18 11:53:33 +00:00
require './lib/init.php' ;
2010-01-20 16:55:27 +00:00
2013-12-15 11:24:32 +00:00
if ( isset ( $_POST [ 'id' ])) {
2010-01-20 16:55:27 +00:00
$id = intval ( $_POST [ 'id' ]);
2013-12-15 11:24:32 +00:00
} elseif ( isset ( $_GET [ 'id' ])) {
2010-01-20 16:55:27 +00:00
$id = intval ( $_GET [ 'id' ]);
}
2013-12-15 11:24:32 +00:00
if ( $page == 'overview' ) {
2010-01-20 16:55:27 +00:00
$log -> logAction ( USR_ACTION , LOG_NOTICE , " viewed customer_domains " );
eval ( " echo \" " . getTemplate ( " domains/domains " ) . " \" ; " );
2013-12-15 11:24:32 +00:00
} elseif ( $page == 'domains' ) {
if ( $action == '' ) {
2010-01-20 16:55:27 +00:00
$log -> logAction ( USR_ACTION , LOG_NOTICE , " viewed customer_domains::domains " );
$fields = array (
2013-10-13 14:42:53 +00:00
'd.domain' => $lng [ 'domains' ][ 'domainname' ]
2010-01-20 16:55:27 +00:00
);
2013-12-15 11:24:32 +00:00
$paging = new paging ( $userinfo , TABLE_PANEL_DOMAINS , $fields );
2013-10-31 10:51:01 +00:00
$domains_stmt = Database :: prepare ( " SELECT `d`.`id`, `d`.`customerid`, `d`.`domain`, `d`.`documentroot`, `d`.`isemaildomain`, `d`.`caneditdomain`, `d`.`iswildcarddomain`, `d`.`parentdomainid`, `ad`.`id` AS `aliasdomainid`, `ad`.`domain` AS `aliasdomain`, `da`.`id` AS `domainaliasid`, `da`.`domain` AS `domainalias` FROM ` " . TABLE_PANEL_DOMAINS . " ` `d`
LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d` . `aliasdomain` = `ad` . `id`
LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `da` ON `da` . `aliasdomain` = `d` . `id`
2013-10-31 11:11:50 +00:00
WHERE `d` . `customerid` = : customerid
2013-10-31 10:51:01 +00:00
AND `d` . `email_only` = '0'
AND `d` . `id` <> : standardsubdomain " . $paging->getSqlWhere (true) . " " . $paging->getSqlOrderBy () . " " . $paging->getSqlLimit ()
);
Database :: pexecute ( $domains_stmt , array ( " customerid " => $userinfo [ 'customerid' ], " standardsubdomain " => $userinfo [ 'standardsubdomain' ]));
$paging -> setEntries ( Database :: num_rows ());
2010-01-20 16:55:27 +00:00
$sortcode = $paging -> getHtmlSortCode ( $lng );
$arrowcode = $paging -> getHtmlArrowCode ( $filename . '?page=' . $page . '&s=' . $s );
$searchcode = $paging -> getHtmlSearchCode ( $lng );
$pagingcode = $paging -> getHtmlPagingCode ( $filename . '?page=' . $page . '&s=' . $s );
$domains = '' ;
$parentdomains_count = 0 ;
$domains_count = 0 ;
$domain_array = array ();
2013-12-15 11:24:32 +00:00
while ( $row = $domains_stmt -> fetch ( PDO :: FETCH_ASSOC )) {
2010-01-20 16:55:27 +00:00
$row [ 'domain' ] = $idna_convert -> decode ( $row [ 'domain' ]);
$row [ 'aliasdomain' ] = $idna_convert -> decode ( $row [ 'aliasdomain' ]);
$row [ 'domainalias' ] = $idna_convert -> decode ( $row [ 'domainalias' ]);
2013-12-15 11:24:32 +00:00
if ( $row [ 'parentdomainid' ] == '0' && $row [ 'caneditdomain' ] == '1' ) {
2010-01-20 16:55:27 +00:00
$parentdomains_count ++ ;
}
2013-09-27 09:03:21 +00:00
/**
2013-09-29 16:40:25 +00:00
* check for set ssl - certs to show different state - icons
2013-09-27 09:03:21 +00:00
*/
2013-09-29 16:40:25 +00:00
// nothing (ssl_global)
$row [ 'domain_hascert' ] = 0 ;
2013-10-31 10:51:01 +00:00
$ssl_stmt = Database :: prepare ( " SELECT * FROM ` " . TABLE_PANEL_DOMAIN_SSL_SETTINGS . " ` WHERE `domainid` = :domainid " );
Database :: pexecute ( $ssl_stmt , array ( " domainid " => $row [ 'id' ]));
$ssl_result = $ssl_stmt -> fetch ( PDO :: FETCH_ASSOC );
if ( is_array ( $ssl_result ) && isset ( $ssl_result [ 'ssl_cert_file' ]) && $ssl_result [ 'ssl_cert_file' ] != '' ) {
2013-09-29 16:40:25 +00:00
// own certificate (ssl_customer_green)
$row [ 'domain_hascert' ] = 1 ;
} else {
// check if it's parent has one set (shared)
if ( $row [ 'parentdomainid' ] != 0 ) {
2013-10-31 10:51:01 +00:00
$ssl_stmt = Database :: prepare ( " SELECT * FROM ` " . TABLE_PANEL_DOMAIN_SSL_SETTINGS . " ` WHERE `domainid` = :domainid " );
Database :: pexecute ( $ssl_stmt , array ( " domainid " => $row [ 'parentdomainid' ]));
$ssl_result = $ssl_stmt -> fetch ( PDO :: FETCH_ASSOC );
if ( is_array ( $ssl_result ) && isset ( $ssl_result [ 'ssl_cert_file' ]) && $ssl_result [ 'ssl_cert_file' ] != '' ) {
2013-09-29 16:40:25 +00:00
// parent has a certificate (ssl_shared)
$row [ 'domain_hascert' ] = 2 ;
}
}
2010-01-20 16:55:27 +00:00
}
2013-09-27 09:03:21 +00:00
$domains_count ++ ;
2010-04-12 06:15:16 +00:00
$domain_array [ $row [ 'domain' ]] = $row ;
2010-01-20 16:55:27 +00:00
}
ksort ( $domain_array );
$domain_id_array = array ();
2013-12-15 11:24:32 +00:00
foreach ( $domain_array as $sortkey => $row ) {
2010-01-20 16:55:27 +00:00
$domain_id_array [ $row [ 'id' ]] = $sortkey ;
}
$domain_sort_array = array ();
2013-12-15 11:24:32 +00:00
foreach ( $domain_array as $sortkey => $row ) {
if ( $row [ 'parentdomainid' ] == 0 ) {
2010-01-20 16:55:27 +00:00
$domain_sort_array [ $sortkey ][ $sortkey ] = $row ;
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$domain_sort_array [ $domain_id_array [ $row [ 'parentdomainid' ]]][ $sortkey ] = $row ;
}
}
$domain_array = array ();
2013-12-15 11:24:32 +00:00
if ( $paging -> sortfield == 'd.domain' && $paging -> sortorder == 'asc' ) {
2010-01-20 16:55:27 +00:00
ksort ( $domain_sort_array );
2013-12-15 11:24:32 +00:00
} elseif ( $paging -> sortfield == 'd.domain' && $paging -> sortorder == 'desc' ) {
2010-01-20 16:55:27 +00:00
krsort ( $domain_sort_array );
}
$i = 0 ;
2013-12-15 11:24:32 +00:00
foreach ( $domain_sort_array as $sortkey => $domain_array ) {
if ( $paging -> checkDisplay ( $i )) {
2010-01-20 16:55:27 +00:00
$row = htmlentities_array ( $domain_array [ $sortkey ]);
2013-12-15 11:24:32 +00:00
if ( Settings :: Get ( 'system.awstats_enabled' ) == '1' ) {
2010-04-12 05:34:34 +00:00
$statsapp = 'awstats' ;
2010-03-22 12:36:59 +00:00
} else {
$statsapp = 'webalizer' ;
}
2010-01-20 16:55:27 +00:00
eval ( " \$ domains.= \" " . getTemplate ( " domains/domains_delimiter " ) . " \" ; " );
2013-12-15 11:24:32 +00:00
if ( $paging -> sortfield == 'd.domain' && $paging -> sortorder == 'asc' ) {
2010-01-20 16:55:27 +00:00
ksort ( $domain_array );
2013-12-15 11:24:32 +00:00
} elseif ( $paging -> sortfield == 'd.domain' && $paging -> sortorder == 'desc' ) {
2010-01-20 16:55:27 +00:00
krsort ( $domain_array );
}
2013-12-15 11:24:32 +00:00
foreach ( $domain_array as $row ) {
if ( strpos ( $row [ 'documentroot' ], $userinfo [ 'documentroot' ]) === 0 ) {
2010-01-20 16:55:27 +00:00
$row [ 'documentroot' ] = makeCorrectDir ( substr ( $row [ 'documentroot' ], strlen ( $userinfo [ 'documentroot' ])));
}
2013-05-14 15:26:30 +00:00
// get ssl-ips if activated
$show_ssledit = false ;
2013-12-15 11:24:32 +00:00
if ( Settings :: Get ( 'system.use_ssl' ) == '1' && domainHasSslIpPort ( $row [ 'id' ]) && $row [ 'caneditdomain' ] == '1' ) {
2013-05-14 15:26:30 +00:00
$show_ssledit = true ;
}
2010-01-20 16:55:27 +00:00
$row = htmlentities_array ( $row );
eval ( " \$ domains.= \" " . getTemplate ( " domains/domains_domain " ) . " \" ; " );
}
}
$i += count ( $domain_array );
}
eval ( " echo \" " . getTemplate ( " domains/domainlist " ) . " \" ; " );
2013-12-15 11:24:32 +00:00
} elseif ( $action == 'delete' && $id != 0 ) {
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " SELECT `id`, `customerid`, `domain`, `documentroot`, `isemaildomain`, `parentdomainid` FROM ` " . TABLE_PANEL_DOMAINS . " `
WHERE `customerid` = : customerid
AND `id` = : id "
);
Database :: pexecute ( $stmt , array ( " customerid " => $userinfo [ 'customerid' ], " id " => $id ));
$result = $stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$alias_stmt = Database :: prepare ( " SELECT COUNT(`id`) AS `count` FROM ` " . TABLE_PANEL_DOMAINS . " ` WHERE `aliasdomain` = :aliasdomain " );
Database :: pexecute ( $alias_stmt , array ( " aliasdomain " => $id ));
$alias_check = $alias_stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-12-15 11:24:32 +00:00
if ( isset ( $result [ 'parentdomainid' ]) && $result [ 'parentdomainid' ] != '0' && $alias_check [ 'count' ] == 0 ) {
if ( isset ( $_POST [ 'send' ]) && $_POST [ 'send' ] == 'send' ) {
if ( $result [ 'isemaildomain' ] == '1' ) {
2013-10-31 10:51:01 +00:00
$emails_stmt = Database :: prepare ( " SELECT COUNT(`id`) AS `count` FROM ` " . TABLE_MAIL_VIRTUAL . " `
WHERE `customerid` = : customerid
AND `domainid` = : domainid "
);
Database :: pexecute ( $emails_stmt , array ( " customerid " => $userinfo [ 'customerid' ], " domainid " => $id ));
$emails = $emails_stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-12-15 11:24:32 +00:00
if ( $emails [ 'count' ] != '0' ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'domains_cantdeletedomainwithemail' );
}
}
$log -> logAction ( USR_ACTION , LOG_INFO , " deleted subdomain ' " . $idna_convert -> decode ( $result [ 'domain' ]) . " ' " );
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " DELETE FROM ` " . TABLE_PANEL_DOMAINS . " ` WHERE
`customerid` = : customerid
AND `id` = : id "
);
Database :: pexecute ( $stmt , array ( " customerid " => $userinfo [ 'customerid' ], " id " => $id ));
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " UPDATE ` " . TABLE_PANEL_CUSTOMERS . " `
SET `subdomains_used` = `subdomains_used` - 1
WHERE `customerid` = : customerid "
);
Database :: pexecute ( $stmt , array ( " customerid " => $userinfo [ 'customerid' ]));
2013-12-15 11:24:32 +00:00
2014-01-22 09:02:17 +00:00
// remove connections to ips and domainredirects
$del_stmt = Database :: prepare ( "
DELETE FROM `" . TABLE_DOMAINTOIP . "`
WHERE `id_domain` = : domainid "
);
Database :: pexecute ( $del_stmt , array ( 'domainid' => $id ));
$del_stmt = Database :: prepare ( "
DELETE FROM `" . TABLE_PANEL_DOMAINREDIRECTS . "`
WHERE `did` = : domainid "
);
Database :: pexecute ( $del_stmt , array ( 'domainid' => $id ));
2010-10-23 10:20:23 +00:00
inserttask ( '1' );
2011-12-06 14:43:34 +00:00
2013-03-29 19:10:37 +00:00
// Using nameserver, insert a task which rebuilds the server config
inserttask ( '4' );
2013-12-15 11:24:32 +00:00
redirectTo ( $filename , array ( 'page' => $page , 's' => $s ));
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
ask_yesno ( 'domains_reallydelete' , $filename , array ( 'id' => $id , 'page' => $page , 'action' => $action ), $idna_convert -> decode ( $result [ 'domain' ]));
}
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
standard_error ( 'domains_cantdeletemaindomain' );
}
2013-12-15 11:24:32 +00:00
} elseif ( $action == 'add' ) {
if ( $userinfo [ 'subdomains_used' ] < $userinfo [ 'subdomains' ] || $userinfo [ 'subdomains' ] == '-1' ) {
if ( isset ( $_POST [ 'send' ]) && $_POST [ 'send' ] == 'send' ) {
$subdomain = $idna_convert -> encode ( preg_replace ( array ( '/\:(\d)+$/' , '/^https?\:\/\//' ), '' , validate ( $_POST [ 'subdomain' ], 'subdomain' , '' , 'subdomainiswrong' )));
2010-01-20 16:55:27 +00:00
$domain = $idna_convert -> encode ( $_POST [ 'domain' ]);
2013-10-31 10:51:01 +00:00
$domain_stmt = Database :: prepare ( " SELECT * FROM ` " . TABLE_PANEL_DOMAINS . " `
WHERE `domain` = : domain
AND `customerid` = : customerid
AND `parentdomainid` = '0'
AND `email_only` = '0'
AND `caneditdomain` = '1' "
);
2013-11-21 07:01:43 +00:00
$domain_check = Database :: pexecute_first ( $domain_stmt , array ( " domain " => $domain , " customerid " => $userinfo [ 'customerid' ]));
2013-12-15 11:24:32 +00:00
2010-01-20 16:55:27 +00:00
$completedomain = $subdomain . '.' . $domain ;
2015-01-28 20:55:46 +00:00
if ( $completedomain == Settings :: Get ( 'system.hostname' )) {
standard_error ( 'admin_domain_emailsystemhostname' );
exit ;
}
2013-10-31 10:51:01 +00:00
$completedomain_stmt = Database :: prepare ( " SELECT * FROM ` " . TABLE_PANEL_DOMAINS . " `
WHERE `domain` = : domain
AND `customerid` = : customerid
AND `email_only` = '0'
AND `caneditdomain` = '1' "
2010-01-20 16:55:27 +00:00
);
2013-11-21 07:01:43 +00:00
$completedomain_check = Database :: pexecute_first ( $completedomain_stmt , array ( " domain " => $completedomain , " customerid " => $userinfo [ 'customerid' ]));
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$aliasdomain = intval ( $_POST [ 'alias' ]);
$aliasdomain_check = array ( 'id' => 0 );
2010-05-11 08:50:35 +00:00
$_doredirect = false ;
2010-01-20 16:55:27 +00:00
2013-12-15 11:24:32 +00:00
if ( $aliasdomain != 0 ) {
2010-04-29 07:40:55 +00:00
// also check ip/port combination to be the same, #176
2013-10-31 10:51:01 +00:00
$aliasdomain_stmt = Database :: prepare ( " SELECT `d`.`id` FROM ` " . TABLE_PANEL_DOMAINS . " ` `d` , ` " . TABLE_PANEL_CUSTOMERS . " ` `c` , ` " . TABLE_DOMAINTOIP . " ` `dip`
WHERE `d` . `aliasdomain` IS NULL
AND `d` . `id` = : id
AND `c` . `standardsubdomain` <> `d` . `id`
AND `d` . `customerid` = : 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` = : id )
2013-12-30 07:20:58 +00:00
GROUP BY `d` . `domain`
2013-10-31 10:51:01 +00:00
ORDER BY `d` . `domain` ASC ; "
);
2013-11-21 07:01:43 +00:00
$aliasdomain_check = Database :: pexecute_first ( $aliasdomain_stmt , array ( " id " => $aliasdomain , " customerid " => $userinfo [ 'customerid' ]));
2013-10-31 10:51:01 +00:00
}
2013-12-15 11:24:32 +00:00
if ( isset ( $_POST [ 'url' ]) && $_POST [ 'url' ] != '' && validateUrl ( $idna_convert -> encode ( $_POST [ 'url' ]))) {
2010-01-20 16:55:27 +00:00
$path = $_POST [ 'url' ];
2010-05-11 08:50:35 +00:00
$_doredirect = true ;
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$path = validate ( $_POST [ 'path' ], 'path' );
}
2013-12-15 11:24:32 +00:00
if ( ! preg_match ( '/^https?\:\/\//' , $path ) || ! validateUrl ( $idna_convert -> encode ( $path ))) {
2013-03-20 19:37:37 +00:00
// If path is empty or '/' and 'Use domain name as default value for DocumentRoot path' is enabled in settings,
// set default path to subdomain or domain name
2013-12-15 11:24:32 +00:00
if ((( $path == '' ) || ( $path == '/' )) && Settings :: Get ( 'system.documentroot_use_default_value' ) == 1 ) {
2013-03-20 19:37:37 +00:00
$path = makeCorrectDir ( $userinfo [ 'documentroot' ] . '/' . $completedomain );
2013-10-31 10:51:01 +00:00
} else {
2013-03-20 19:37:37 +00:00
$path = makeCorrectDir ( $userinfo [ 'documentroot' ] . '/' . $path );
}
2013-10-31 10:51:01 +00:00
if ( strstr ( $path , " : " ) !== FALSE ) {
2010-05-12 06:52:11 +00:00
standard_error ( 'pathmaynotcontaincolon' );
}
2013-10-31 10:51:01 +00:00
} else {
2010-05-11 08:50:35 +00:00
$_doredirect = true ;
}
2010-01-20 16:55:27 +00:00
2013-11-21 07:01:43 +00:00
$openbasedir_path = '0' ;
if ( isset ( $_POST [ 'openbasedir_path' ]) && $_POST [ 'openbasedir_path' ] == '1' ) {
2010-01-20 16:55:27 +00:00
$openbasedir_path = '1' ;
}
2013-11-21 07:01:43 +00:00
$ssl_redirect = '0' ;
if ( isset ( $_POST [ 'ssl_redirect' ]) && $_POST [ 'ssl_redirect' ] == '1' ) {
// a ssl-redirect only works of there actually is a
// ssl ip/port assigned to the domain
if ( domainHasSslIpPort ( $domain_check [ 'id' ]) == true ) {
$ssl_redirect = '1' ;
} else {
standard_error ( 'sslredirectonlypossiblewithsslipport' );
}
2010-01-20 16:55:27 +00:00
}
2013-12-15 11:24:32 +00:00
if ( $path == '' ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'patherror' );
2013-12-15 11:24:32 +00:00
} elseif ( $subdomain == '' ) {
2010-01-20 16:55:27 +00:00
standard_error ( array ( 'stringisempty' , 'domainname' ));
2013-12-15 11:24:32 +00:00
} elseif ( $subdomain == 'www' && $domain_check [ 'wwwserveralias' ] == '1' ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'wwwnotallowed' );
2013-12-15 11:24:32 +00:00
} elseif ( $domain == '' ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'domaincantbeempty' );
2013-12-15 11:24:32 +00:00
} elseif ( strtolower ( $completedomain_check [ 'domain' ]) == strtolower ( $completedomain )) {
2010-01-20 16:55:27 +00:00
standard_error ( 'domainexistalready' , $completedomain );
2013-12-15 11:24:32 +00:00
} elseif ( strtolower ( $domain_check [ 'domain' ]) != strtolower ( $domain )) {
2010-01-20 16:55:27 +00:00
standard_error ( 'maindomainnonexist' , $domain );
2013-12-15 11:24:32 +00:00
} elseif ( $aliasdomain_check [ 'id' ] != $aliasdomain ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'domainisaliasorothercustomer' );
2013-10-31 10:51:01 +00:00
} else {
2010-04-01 10:18:05 +00:00
// get the phpsettingid from parentdomain, #107
2013-10-31 10:51:01 +00:00
$phpsid_stmt = Database :: prepare ( " SELECT `phpsettingid` FROM ` " . TABLE_PANEL_DOMAINS . " `
WHERE `id` = : id "
);
Database :: pexecute ( $phpsid_stmt , array ( " id " => $domain_check [ 'id' ]));
$phpsid_result = $phpsid_stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-12-15 11:24:32 +00:00
if ( ! isset ( $phpsid_result [ 'phpsettingid' ]) || ( int ) $phpsid_result [ 'phpsettingid' ] <= 0 ) {
2010-04-01 10:18:05 +00:00
// assign default config
$phpsid_result [ 'phpsettingid' ] = 1 ;
}
2013-12-15 11:24:32 +00:00
$stmt = Database :: prepare ( " INSERT INTO ` " . TABLE_PANEL_DOMAINS . " ` SET
2013-10-31 10:51:01 +00:00
`customerid` = : customerid ,
2013-12-15 11:24:32 +00:00
`domain` = : domain ,
`documentroot` = : documentroot ,
`aliasdomain` = : aliasdomain ,
`parentdomainid` = : parentdomainid ,
2013-12-23 19:46:10 +00:00
`wwwserveralias` = : wwwserveralias ,
2013-12-15 11:24:32 +00:00
`isemaildomain` = : isemaildomain ,
2013-12-23 19:46:10 +00:00
`iswildcarddomain` = : iswildcarddomain ,
2013-12-15 11:24:32 +00:00
`openbasedir` = : openbasedir ,
2013-10-31 10:51:01 +00:00
`openbasedir_path` = : openbasedir_path ,
2013-12-15 11:24:32 +00:00
`speciallogfile` = : speciallogfile ,
`specialsettings` = : specialsettings ,
`ssl_redirect` = : ssl_redirect ,
2013-10-31 10:51:01 +00:00
`phpsettingid` = : phpsettingid "
);
$params = array (
" customerid " => $userinfo [ 'customerid' ],
" domain " => $completedomain ,
" documentroot " => $path ,
2013-11-02 11:20:23 +00:00
" aliasdomain " => $aliasdomain != 0 ? $aliasdomain : null ,
2013-10-31 10:51:01 +00:00
" parentdomainid " => $domain_check [ 'id' ],
2013-12-23 19:46:10 +00:00
" wwwserveralias " => $domain_check [ 'wwwserveralias' ] == '1' ? '1' : '0' ,
" iswildcarddomain " => $domain_check [ 'iswildcarddomain' ] == '1' ? '1' : '0' ,
2013-10-31 10:51:01 +00:00
" isemaildomain " => $domain_check [ 'subcanemaildomain' ] == '3' ? '1' : '0' ,
" openbasedir " => $domain_check [ 'openbasedir' ],
" openbasedir_path " => $openbasedir_path ,
" speciallogfile " => $domain_check [ 'speciallogfile' ],
" specialsettings " => $domain_check [ 'specialsettings' ],
" ssl_redirect " => $ssl_redirect ,
" phpsettingid " => $phpsid_result [ 'phpsettingid' ]
);
Database :: pexecute ( $stmt , $params );
2013-12-15 11:24:32 +00:00
if ( $_doredirect ) {
2013-10-31 10:51:01 +00:00
$did = Database :: lastInsertId ();
2013-12-15 11:24:32 +00:00
$redirect = isset ( $_POST [ 'redirectcode' ]) ? ( int ) $_POST [ 'redirectcode' ] : Settings :: Get ( 'customredirect.default' );
2010-05-11 08:50:35 +00:00
addRedirectToDomain ( $did , $redirect );
}
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " INSERT INTO ` " . TABLE_DOMAINTOIP . " `
( `id_domain` , `id_ipandports` )
SELECT LAST_INSERT_ID (), `id_ipandports`
FROM `".TABLE_DOMAINTOIP."`
WHERE `id_domain` = : id_domain "
);
Database :: pexecute ( $stmt , array ( " id_domain " => $domain_check [ 'id' ]));
$stmt = Database :: prepare ( " UPDATE ` " . TABLE_PANEL_CUSTOMERS . " `
SET `subdomains_used` = `subdomains_used` + 1
WHERE `customerid` = : customerid "
);
Database :: pexecute ( $stmt , array ( " customerid " => $userinfo [ 'customerid' ]));
2013-12-15 11:24:32 +00:00
2010-01-20 16:55:27 +00:00
$log -> logAction ( USR_ACTION , LOG_INFO , " added subdomain ' " . $completedomain . " ' " );
2010-10-23 10:20:23 +00:00
inserttask ( '1' );
2011-12-06 14:43:34 +00:00
2012-06-25 07:27:39 +00:00
// Using nameserver, insert a task which rebuilds the server config
2013-03-29 19:10:37 +00:00
inserttask ( '4' );
2013-11-21 07:01:43 +00:00
redirectTo ( $filename , array ( 'page' => $page , 's' => $s ));
2010-01-20 16:55:27 +00:00
}
2013-10-31 10:51:01 +00:00
} else {
$stmt = Database :: prepare ( " SELECT `id`, `domain`, `documentroot`, `ssl_redirect`,`isemaildomain` FROM ` " . TABLE_PANEL_DOMAINS . " `
WHERE `customerid` = : customerid
AND `parentdomainid` = '0'
AND `email_only` = '0'
AND `caneditdomain` = '1'
ORDER BY `domain` ASC "
);
Database :: pexecute ( $stmt , array ( " customerid " => $userinfo [ 'customerid' ]));
2010-01-20 16:55:27 +00:00
$domains = '' ;
2013-12-15 11:24:32 +00:00
while ( $row = $stmt -> fetch ( PDO :: FETCH_ASSOC )) {
2013-10-31 10:51:01 +00:00
$domains .= makeoption ( $idna_convert -> decode ( $row [ 'domain' ]), $row [ 'domain' ]);
2010-01-20 16:55:27 +00:00
}
$aliasdomains = makeoption ( $lng [ 'domains' ][ 'noaliasdomain' ], 0 , NULL , true );
2013-10-31 10:51:01 +00:00
$domains_stmt = Database :: prepare ( " SELECT `d`.`id`, `d`.`domain` FROM ` " . TABLE_PANEL_DOMAINS . " ` `d`, ` " . TABLE_PANEL_CUSTOMERS . " ` `c`
WHERE `d` . `aliasdomain` IS NULL
AND `d` . `id` <> `c` . `standardsubdomain`
2014-10-27 09:41:29 +00:00
AND `d` . `parentdomainid` = '0'
2013-10-31 10:51:01 +00:00
AND `d` . `customerid` = `c` . `customerid`
AND `d` . `email_only` = '0'
AND `d` . `customerid` = : customerid
ORDER BY `d` . `domain` ASC "
);
Database :: pexecute ( $domains_stmt , array ( " customerid " => $userinfo [ 'customerid' ]));
2010-01-20 16:55:27 +00:00
2013-12-15 11:24:32 +00:00
while ( $row_domain = $domains_stmt -> fetch ( PDO :: FETCH_ASSOC )) {
2013-10-31 10:51:01 +00:00
$aliasdomains .= makeoption ( $idna_convert -> decode ( $row_domain [ 'domain' ]), $row_domain [ 'id' ]);
2010-01-20 16:55:27 +00:00
}
2011-03-04 10:46:40 +00:00
$redirectcode = '' ;
2013-12-15 11:24:32 +00:00
if ( Settings :: Get ( 'customredirect.enabled' ) == '1' ) {
2010-05-11 08:50:35 +00:00
$codes = getRedirectCodesArray ();
2013-12-15 11:24:32 +00:00
foreach ( $codes as $rc ) {
$redirectcode .= makeoption ( $rc [ 'code' ] . ' (' . $lng [ 'redirect_desc' ][ $rc [ 'desc' ]] . ')' , $rc [ 'id' ]);
2010-05-11 08:50:35 +00:00
}
}
2013-03-27 07:34:59 +00:00
// check if we at least have one ssl-ip/port, #1179
$ssl_ipsandports = '' ;
2013-10-31 10:51:01 +00:00
$ssl_ip_stmt = Database :: prepare ( " SELECT COUNT(*) as countSSL FROM `panel_ipsandports` WHERE `ssl`='1' " );
Database :: pexecute ( $ssl_ip_stmt );
$resultX = $ssl_ip_stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-03-27 07:34:59 +00:00
if ( isset ( $resultX [ 'countSSL' ]) && ( int ) $resultX [ 'countSSL' ] > 0 ) {
$ssl_ipsandports = 'notempty' ;
}
2010-01-20 16:55:27 +00:00
$openbasedir = makeoption ( $lng [ 'domain' ][ 'docroot' ], 0 , NULL , true ) . makeoption ( $lng [ 'domain' ][ 'homedir' ], 1 , NULL , true );
2013-12-15 11:24:32 +00:00
$pathSelect = makePathfield ( $userinfo [ 'documentroot' ], $userinfo [ 'guid' ], $userinfo [ 'guid' ]);
2011-02-12 16:48:54 +00:00
$subdomain_add_data = include_once dirname ( __FILE__ ) . '/lib/formfields/customer/domains/formfield.domains_add.php' ;
$subdomain_add_form = htmlform :: genHTMLForm ( $subdomain_add_data );
$title = $subdomain_add_data [ 'domain_add' ][ 'title' ];
$image = $subdomain_add_data [ 'domain_add' ][ 'image' ];
2010-01-20 16:55:27 +00:00
eval ( " echo \" " . getTemplate ( " domains/domains_add " ) . " \" ; " );
}
}
2013-12-15 11:24:32 +00:00
} elseif ( $action == 'edit' && $id != 0 ) {
2013-11-21 07:01:43 +00:00
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " SELECT `d`.`id`, `d`.`customerid`, `d`.`domain`, `d`.`documentroot`, `d`.`isemaildomain`, `d`.`wwwserveralias`, `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` = : customerid
AND `d` . `id` = : id
2013-12-15 11:24:32 +00:00
AND (( `d` . `parentdomainid` != '0'
2013-10-31 10:51:01 +00:00
AND `pd` . `id` = `d` . `parentdomainid` )
OR ( `d` . `parentdomainid` = '0'
AND `pd` . `id` = `d` . `id` ))
AND `d` . `caneditdomain` = '1' " );
2013-11-21 07:01:43 +00:00
$result = Database :: pexecute_first ( $stmt , array ( " customerid " => $userinfo [ 'customerid' ], " id " => $id ));
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$alias_stmt = Database :: prepare ( " SELECT COUNT(`id`) AS count FROM ` " . TABLE_PANEL_DOMAINS . " ` WHERE `aliasdomain`= :aliasdomain " );
2013-11-21 07:01:43 +00:00
$alias_check = Database :: pexecute_first ( $alias_stmt , array ( " aliasdomain " => $result [ 'id' ]));
2010-01-20 16:55:27 +00:00
$alias_check = $alias_check [ 'count' ];
2010-05-11 08:50:35 +00:00
$_doredirect = false ;
2010-01-20 16:55:27 +00:00
2013-12-15 11:24:32 +00:00
if ( isset ( $result [ 'customerid' ]) && $result [ 'customerid' ] == $userinfo [ 'customerid' ]) {
if ( isset ( $_POST [ 'send' ]) && $_POST [ 'send' ] == 'send' ) {
if ( isset ( $_POST [ 'url' ]) && $_POST [ 'url' ] != '' && validateUrl ( $idna_convert -> encode ( $_POST [ 'url' ]))) {
2010-01-20 16:55:27 +00:00
$path = $_POST [ 'url' ];
2010-05-11 08:50:35 +00:00
$_doredirect = true ;
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$path = validate ( $_POST [ 'path' ], 'path' );
}
2013-12-15 11:24:32 +00:00
if ( ! preg_match ( '/^https?\:\/\//' , $path ) || ! validateUrl ( $idna_convert -> encode ( $path ))) {
2013-03-20 19:37:37 +00:00
// If path is empty or '/' and 'Use domain name as default value for DocumentRoot path' is enabled in settings,
// set default path to subdomain or domain name
2013-12-15 11:24:32 +00:00
if ((( $path == '' ) || ( $path == '/' )) && Settings :: Get ( 'system.documentroot_use_default_value' ) == 1 ) {
2013-03-20 19:37:37 +00:00
$path = makeCorrectDir ( $userinfo [ 'documentroot' ] . '/' . $result [ 'domain' ]);
2013-10-31 10:51:01 +00:00
} else {
2013-03-20 19:37:37 +00:00
$path = makeCorrectDir ( $userinfo [ 'documentroot' ] . '/' . $path );
}
2013-10-31 10:51:01 +00:00
if ( strstr ( $path , " : " ) !== FALSE ) {
2010-05-12 06:52:11 +00:00
standard_error ( 'pathmaynotcontaincolon' );
}
2013-10-31 10:51:01 +00:00
} else {
2010-05-11 08:50:35 +00:00
$_doredirect = true ;
}
2010-01-20 16:55:27 +00:00
$aliasdomain = intval ( $_POST [ 'alias' ]);
2013-12-15 11:24:32 +00:00
if ( isset ( $_POST [ 'selectserveralias' ]) && $result [ 'parentdomainid' ] == '0' ) {
2013-10-14 08:08:15 +00:00
$iswildcarddomain = ( $_POST [ 'selectserveralias' ] == '0' ) ? '1' : '0' ;
$wwwserveralias = ( $_POST [ 'selectserveralias' ] == '1' ) ? '1' : '0' ;
} else {
2013-12-23 19:46:10 +00:00
$iswildcarddomain = $result [ 'iswildcarddomain' ];
$wwwserveralias = $result [ 'wwwserveralias' ];
2010-01-20 16:55:27 +00:00
}
2013-12-15 11:24:32 +00:00
if ( $result [ 'parentdomainid' ] != '0' && ( $result [ 'subcanemaildomain' ] == '1' || $result [ 'subcanemaildomain' ] == '2' ) && isset ( $_POST [ 'isemaildomain' ])) {
2010-01-20 16:55:27 +00:00
$isemaildomain = intval ( $_POST [ 'isemaildomain' ]);
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$isemaildomain = $result [ 'isemaildomain' ];
}
2013-10-31 10:51:01 +00:00
$aliasdomain_check = array ( 'id' => 0 );
2010-01-20 16:55:27 +00:00
2013-12-15 11:24:32 +00:00
if ( $aliasdomain != 0 ) {
2013-10-31 10:51:01 +00:00
$aliasdomain_stmt = Database :: prepare ( " SELECT `id` FROM ` " . TABLE_PANEL_DOMAINS . " ` `d`,` " . TABLE_PANEL_CUSTOMERS . " ` `c`
WHERE `d` . `customerid` = : customerid
AND `d` . `aliasdomain` IS NULL
AND `d` . `id` <> `c` . `standardsubdomain`
AND `c` . `customerid` = : customerid
AND `d` . `id` = : id "
);
2013-11-21 07:01:43 +00:00
$aliasdomain_check = Database :: pexecute_first ( $aliasdomain_stmt , array ( " customerid " => $result [ 'customerid' ], " id " => $aliasdomain ));
2010-01-20 16:55:27 +00:00
}
2013-12-15 11:24:32 +00:00
if ( $aliasdomain_check [ 'id' ] != $aliasdomain ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'domainisaliasorothercustomer' );
}
2013-12-15 11:24:32 +00:00
if ( isset ( $_POST [ 'openbasedir_path' ]) && $_POST [ 'openbasedir_path' ] == '1' ) {
2010-01-20 16:55:27 +00:00
$openbasedir_path = '1' ;
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$openbasedir_path = '0' ;
}
2013-11-21 07:01:43 +00:00
if ( isset ( $_POST [ 'ssl_redirect' ]) && $_POST [ 'ssl_redirect' ] == '1' ) {
// a ssl-redirect only works of there actually is a
// ssl ip/port assigned to the domain
if ( domainHasSslIpPort ( $id ) == true ) {
$ssl_redirect = '1' ;
} else {
standard_error ( 'sslredirectonlypossiblewithsslipport' );
}
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$ssl_redirect = '0' ;
}
2013-12-15 11:24:32 +00:00
if ( $path == '' ) {
2010-01-20 16:55:27 +00:00
standard_error ( 'patherror' );
2013-10-31 10:51:01 +00:00
} else {
2013-12-15 11:24:32 +00:00
if (( $result [ 'isemaildomain' ] == '1' ) && ( $isemaildomain == '0' )) {
2013-10-31 10:51:01 +00:00
$params = array ( " customerid " => $userinfo [ 'customerid' ], " domainid " => $id );
$stmt = Database :: prepare ( " DELETE FROM ` " . TABLE_MAIL_USERS . " ` WHERE `customerid`= :customerid AND `domainid`= :domainid " );
Database :: pexecute ( $stmt , $params );
$stmt = Database :: prepare ( " DELETE FROM ` " . TABLE_MAIL_VIRTUAL . " ` WHERE `customerid`= :customerid AND `domainid`= :domainid " );
Database :: pexecute ( $stmt , $params );
2010-01-20 16:55:27 +00:00
$log -> logAction ( USR_ACTION , LOG_NOTICE , " automatically deleted mail-table entries for ' " . $idna_convert -> decode ( $result [ 'domain' ]) . " ' " );
}
2013-12-15 11:24:32 +00:00
if ( $_doredirect ) {
2010-05-11 08:50:35 +00:00
$redirect = isset ( $_POST [ 'redirectcode' ]) ? ( int ) $_POST [ 'redirectcode' ] : false ;
updateRedirectOfDomain ( $id , $redirect );
}
2013-12-15 11:24:32 +00:00
if ( $path != $result [ 'documentroot' ]
|| $isemaildomain != $result [ 'isemaildomain' ]
|| $wwwserveralias != $result [ 'wwwserveralias' ]
|| $iswildcarddomain != $result [ 'iswildcarddomain' ]
|| $aliasdomain != $result [ 'aliasdomain' ]
|| $openbasedir_path != $result [ 'openbasedir_path' ]
|| $ssl_redirect != $result [ 'ssl_redirect' ]) {
2010-01-20 16:55:27 +00:00
$log -> logAction ( USR_ACTION , LOG_INFO , " edited domain ' " . $idna_convert -> decode ( $result [ 'domain' ]) . " ' " );
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " UPDATE ` " . TABLE_PANEL_DOMAINS . " ` SET
`documentroot` = : documentroot ,
`isemaildomain` = : isemaildomain ,
`wwwserveralias` = : wwwserveralias ,
`iswildcarddomain` = : iswildcarddomain ,
`aliasdomain` = : aliasdomain ,
`openbasedir_path` = : openbasedir_path ,
`ssl_redirect` = : ssl_redirect
WHERE `customerid` = : customerid
AND `id` = : id "
2013-10-14 08:08:15 +00:00
);
2013-10-31 10:51:01 +00:00
$params = array (
" documentroot " => $path ,
" isemaildomain " => $isemaildomain ,
" wwwserveralias " => $wwwserveralias ,
" iswildcarddomain " => $iswildcarddomain ,
2013-11-02 11:20:23 +00:00
" aliasdomain " => ( $aliasdomain != 0 && $alias_check == 0 ) ? $aliasdomain : null ,
2013-10-31 10:51:01 +00:00
" openbasedir_path " => $openbasedir_path ,
" ssl_redirect " => $ssl_redirect ,
" customerid " => $userinfo [ 'customerid' ],
" id " => $id
);
Database :: pexecute ( $stmt , $params );
2010-10-23 10:20:23 +00:00
inserttask ( '1' );
2011-12-06 14:43:34 +00:00
2012-06-25 07:27:39 +00:00
// Using nameserver, insert a task which rebuilds the server config
2013-03-29 19:10:37 +00:00
inserttask ( '4' );
2010-01-20 16:55:27 +00:00
}
2013-12-15 11:24:32 +00:00
redirectTo ( $filename , array ( 'page' => $page , 's' => $s ));
2010-01-20 16:55:27 +00:00
}
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$result [ 'domain' ] = $idna_convert -> decode ( $result [ 'domain' ]);
2013-12-15 11:24:32 +00:00
2010-01-20 16:55:27 +00:00
$domains = makeoption ( $lng [ 'domains' ][ 'noaliasdomain' ], 0 , $result [ 'aliasdomain' ], true );
2010-04-29 07:40:55 +00:00
// also check ip/port combination to be the same, #176
2013-10-31 10:51:01 +00:00
$domains_stmt = Database :: prepare ( " 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` <> : id
AND `c` . `standardsubdomain` <> `d` . `id`
2014-10-27 09:41:29 +00:00
AND `d` . `parentdomainid` = '0'
2013-10-31 10:51:01 +00:00
AND `d` . `customerid` = : 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` = : id )
GROUP BY `d` . `domain`
ORDER BY `d` . `domain` ASC "
);
Database :: pexecute ( $domains_stmt , array ( " id " => $result [ 'id' ], " customerid " => $userinfo [ 'customerid' ]));
2010-01-20 16:55:27 +00:00
2013-12-15 11:24:32 +00:00
while ( $row_domain = $domains_stmt -> fetch ( PDO :: FETCH_ASSOC )) {
2013-10-31 10:51:01 +00:00
$domains .= makeoption ( $idna_convert -> decode ( $row_domain [ 'domain' ]), $row_domain [ 'id' ], $result [ 'aliasdomain' ]);
2010-01-20 16:55:27 +00:00
}
2013-12-15 11:24:32 +00:00
if ( preg_match ( '/^https?\:\/\//' , $result [ 'documentroot' ]) && validateUrl ( $idna_convert -> encode ( $result [ 'documentroot' ]))) {
if ( Settings :: Get ( 'panel.pathedit' ) == 'Dropdown' ) {
2011-03-14 06:58:32 +00:00
$urlvalue = $result [ 'documentroot' ];
2013-12-15 11:24:32 +00:00
$pathSelect = makePathfield ( $userinfo [ 'documentroot' ], $userinfo [ 'guid' ], $userinfo [ 'guid' ]);
2013-10-31 10:51:01 +00:00
} else {
2011-03-14 06:58:32 +00:00
$urlvalue = '' ;
2013-12-15 11:24:32 +00:00
$pathSelect = makePathfield ( $userinfo [ 'documentroot' ], $userinfo [ 'guid' ], $userinfo [ 'guid' ], $result [ 'documentroot' ], true );
2011-03-14 06:58:32 +00:00
}
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
$urlvalue = '' ;
2013-12-15 11:24:32 +00:00
$pathSelect = makePathfield ( $userinfo [ 'documentroot' ], $userinfo [ 'guid' ], $userinfo [ 'guid' ], $result [ 'documentroot' ]);
2010-01-20 16:55:27 +00:00
}
2011-03-04 10:46:40 +00:00
$redirectcode = '' ;
2013-12-15 11:24:32 +00:00
if ( Settings :: Get ( 'customredirect.enabled' ) == '1' ) {
2010-05-11 08:50:35 +00:00
$def_code = getDomainRedirectId ( $id );
$codes = getRedirectCodesArray ();
2013-12-15 11:24:32 +00:00
foreach ( $codes as $rc ) {
2010-08-12 12:32:26 +00:00
$redirectcode .= makeoption ( $rc [ 'code' ] . ' (' . $lng [ 'redirect_desc' ][ $rc [ 'desc' ]] . ')' , $rc [ 'id' ], $def_code );
2010-05-11 08:50:35 +00:00
}
}
2013-03-27 07:34:59 +00:00
// check if we at least have one ssl-ip/port, #1179
$ssl_ipsandports = '' ;
2013-10-31 10:51:01 +00:00
$ssl_ip_stmt = Database :: prepare ( " SELECT COUNT(*) as countSSL FROM `panel_ipsandports` WHERE `ssl`='1' " );
Database :: pexecute ( $ssl_ip_stmt );
$resultX = $ssl_ip_stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-03-27 07:34:59 +00:00
if ( isset ( $resultX [ 'countSSL' ]) && ( int ) $resultX [ 'countSSL' ] > 0 ) {
$ssl_ipsandports = 'notempty' ;
}
2010-01-20 16:55:27 +00:00
$openbasedir = makeoption ( $lng [ 'domain' ][ 'docroot' ], 0 , $result [ 'openbasedir_path' ], true ) . makeoption ( $lng [ 'domain' ][ 'homedir' ], 1 , $result [ 'openbasedir_path' ], true );
2013-10-14 08:08:15 +00:00
// create serveralias options
$serveraliasoptions = " " ;
$_value = '2' ;
if ( $result [ 'iswildcarddomain' ] == '1' ) {
$_value = '0' ;
} elseif ( $result [ 'wwwserveralias' ] == '1' ) {
$_value = '1' ;
}
$serveraliasoptions .= makeoption ( $lng [ 'domains' ][ 'serveraliasoption_wildcard' ], '0' , $_value , true , true );
$serveraliasoptions .= makeoption ( $lng [ 'domains' ][ 'serveraliasoption_www' ], '1' , $_value , true , true );
$serveraliasoptions .= makeoption ( $lng [ 'domains' ][ 'serveraliasoption_none' ], '2' , $_value , true , true );
2013-12-15 11:24:32 +00:00
2013-10-31 10:51:01 +00:00
$ips_stmt = Database :: prepare ( " 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` = : id_domain
GROUP BY `p` . `ip` "
);
Database :: pexecute ( $ips_stmt , array ( " id_domain " => $result [ 'id' ]));
2012-12-02 14:16:22 +00:00
$result_ipandport [ 'ip' ] = '' ;
2013-10-31 10:51:01 +00:00
while ( $rowip = $ips_stmt -> fetch ( PDO :: FETCH_ASSOC )) {
2013-09-20 08:58:36 +00:00
$result_ipandport [ 'ip' ] .= $rowip [ 'ip' ] . " <br /> " ;
2010-01-20 16:55:27 +00:00
}
2012-12-02 14:16:22 +00:00
2010-04-13 11:21:25 +00:00
$domainip = $result_ipandport [ 'ip' ];
$result = htmlentities_array ( $result );
2010-01-20 16:55:27 +00:00
2011-02-12 16:48:54 +00:00
$subdomain_edit_data = include_once dirname ( __FILE__ ) . '/lib/formfields/customer/domains/formfield.domains_edit.php' ;
$subdomain_edit_form = htmlform :: genHTMLForm ( $subdomain_edit_data );
$title = $subdomain_edit_data [ 'domain_edit' ][ 'title' ];
$image = $subdomain_edit_data [ 'domain_edit' ][ 'image' ];
2010-01-20 16:55:27 +00:00
eval ( " echo \" " . getTemplate ( " domains/domains_edit " ) . " \" ; " );
}
2013-10-31 10:51:01 +00:00
} else {
2010-01-20 16:55:27 +00:00
standard_error ( 'domains_canteditdomain' );
}
}
2013-10-31 10:51:01 +00:00
} elseif ( $page == 'domainssleditor' ) {
2013-05-14 15:26:30 +00:00
2013-10-31 10:51:01 +00:00
if ( $action == '' || $action == 'view' ) {
if ( isset ( $_POST [ 'send' ]) && $_POST [ 'send' ] == 'send' ) {
2013-05-14 15:26:30 +00:00
$ssl_cert_file = isset ( $_POST [ 'ssl_cert_file' ]) ? $_POST [ 'ssl_cert_file' ] : '' ;
$ssl_key_file = isset ( $_POST [ 'ssl_key_file' ]) ? $_POST [ 'ssl_key_file' ] : '' ;
$ssl_ca_file = isset ( $_POST [ 'ssl_ca_file' ]) ? $_POST [ 'ssl_ca_file' ] : '' ;
$ssl_cert_chainfile = isset ( $_POST [ 'ssl_cert_chainfile' ]) ? $_POST [ 'ssl_cert_chainfile' ] : '' ;
$do_insert = isset ( $_POST [ 'do_insert' ]) ? (( $_POST [ 'do_insert' ] == 1 ) ? true : false ) : false ;
if ( $ssl_cert_file != '' && $ssl_key_file == '' ) {
standard_error ( 'sslcertificateismissingprivatekey' );
}
$do_verify = true ;
// no cert-file given -> forget everything
if ( $ssl_cert_file == '' ) {
$ssl_key_file = '' ;
$ssl_ca_file = '' ;
$ssl_cert_chainfile = '' ;
$do_verify = false ;
}
// verify certificate content
if ( $do_verify ) {
// array openssl_x509_parse ( mixed $x509cert [, bool $shortnames = true ] )
2013-12-15 11:24:32 +00:00
// openssl_x509_parse() returns information about the supplied x509cert, including fields such as
2013-05-14 15:26:30 +00:00
// subject name, issuer name, purposes, valid from and valid to dates etc.
$cert_content = openssl_x509_parse ( $ssl_cert_file );
2013-10-31 10:51:01 +00:00
if ( is_array ( $cert_content ) && isset ( $cert_content [ 'subject' ]) && isset ( $cert_content [ 'subject' ][ 'CN' ])) {
2013-05-14 15:26:30 +00:00
// bool openssl_x509_check_private_key ( mixed $cert , mixed $key )
// Checks whether the given key is the private key that corresponds to cert.
if ( openssl_x509_check_private_key ( $ssl_cert_file , $ssl_key_file ) === false ) {
standard_error ( 'sslcertificateinvalidcertkeypair' );
}
// check optional stuff
if ( $ssl_ca_file != '' ) {
$ca_content = openssl_x509_parse ( $ssl_ca_file );
if ( ! is_array ( $ca_content )) {
// invalid
standard_error ( 'sslcertificateinvalidca' );
}
}
if ( $ssl_cert_chainfile != '' ) {
$chain_content = openssl_x509_parse ( $ssl_cert_chainfile );
if ( ! is_array ( $chain_content )) {
// invalid
standard_error ( 'sslcertificateinvalidchain' );
}
}
} else {
standard_error ( 'sslcertificateinvalidcert' );
}
}
// Add/Update database entry
$qrystart = " UPDATE " ;
$qrywhere = " WHERE " ;
if ( $do_insert ) {
$qrystart = " INSERT INTO " ;
$qrywhere = " , " ;
}
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( $qrystart . " ` " . TABLE_PANEL_DOMAIN_SSL_SETTINGS . " ` SET
`ssl_cert_file` = : ssl_cert_file ,
`ssl_key_file` = : ssl_key_file ,
`ssl_ca_file` = : ssl_ca_file ,
`ssl_cert_chainfile` = : ssl_cert_chainfile
" . $qrywhere . " `domainid` = : domainid "
);
$params = array (
" ssl_cert_file " => $ssl_cert_file ,
" ssl_key_file " => $ssl_key_file ,
" ssl_ca_file " => $ssl_ca_file ,
" ssl_cert_chainfile " => $ssl_cert_chainfile ,
" domainid " => $id
2013-05-14 15:26:30 +00:00
);
2013-10-31 10:51:01 +00:00
Database :: pexecute ( $stmt , $params );
2013-05-14 15:26:30 +00:00
2013-09-03 12:40:03 +00:00
// insert task to re-generate webserver-configs (#1260)
inserttask ( '1' );
2013-05-14 15:26:30 +00:00
// back to domain overview
redirectTo ( $filename , array ( 'page' => 'domains' , 's' => $s ));
}
2013-10-31 10:51:01 +00:00
$stmt = Database :: prepare ( " SELECT * FROM ` " . TABLE_PANEL_DOMAIN_SSL_SETTINGS . " `
WHERE `domainid` = : domainid "
2013-05-14 15:26:30 +00:00
);
2013-10-31 10:51:01 +00:00
Database :: pexecute ( $stmt , array ( " domainid " => $id ));
$result = $stmt -> fetch ( PDO :: FETCH_ASSOC );
2013-05-14 15:26:30 +00:00
$do_insert = false ;
// if no entry can be found, behave like we have empty values
if ( ! is_array ( $result ) || ! isset ( $result [ 'ssl_cert_file' ])) {
$result = array (
'ssl_cert_file' => '' ,
'ssl_key_file' => '' ,
'ssl_ca_file' => '' ,
'ssl_cert_chainfile' => ''
);
$do_insert = true ;
}
$result = htmlentities_array ( $result );
$ssleditor_data = include_once dirname ( __FILE__ ) . '/lib/formfields/customer/domains/formfield.domain_ssleditor.php' ;
$ssleditor_form = htmlform :: genHTMLForm ( $ssleditor_data );
$title = $ssleditor_data [ 'domain_ssleditor' ][ 'title' ];
$image = $ssleditor_data [ 'domain_ssleditor' ][ 'image' ];
eval ( " echo \" " . getTemplate ( " domains/domain_ssleditor " ) . " \" ; " );
}
}