Compare commits

..

16 Commits
0.9.8 ... 0.9.9

Author SHA1 Message Date
Florian Aders (EleRas)
530021ddb2 Now: tagging Froxlor 0.9.9 2010-06-14 08:34:31 +00:00
Florian Aders (EleRas)
3a99dbc041 Tagging Froxlor 0.9.9 2010-06-14 08:32:14 +00:00
Michael Kaufmann (d00p)
cb128e5020 - implemented APS-1.2 standard 2010-06-14 08:09:17 +00:00
Florian Aders (EleRas)
2c3a11cff9 Preparing tagging of 0.9.9 2010-06-14 07:58:38 +00:00
Robert Foerster (Dessa)
7dbb715f04 partly revert r547 2010-06-09 11:42:36 +00:00
Robert Foerster (Dessa)
cdc2c8b1e4 gentoo apparently ships mod_cgi.conf by default unconditionally (but does not enable it), so lets just indicate that in the config as well 2010-06-09 10:55:29 +00:00
Michael Kaufmann (d00p)
ba33268596 - use username or guid depending on fcgid settings for chowning awstats/webalizer files 2010-06-08 20:39:21 +00:00
Michael Kaufmann (d00p)
fd96e4b42e - give ssl-vhost files another name that non-ssl vhost files, now really fixes #254 2010-06-08 11:13:22 +00:00
Michael Kaufmann (d00p)
950c9d7373 - on ssl-redirect, only create webroot for vhost, fixes #254 2010-06-08 06:16:48 +00:00
Michael Kaufmann (d00p)
470fb9a02a - found a better place to run the chowning, refs #258 2010-06-08 05:53:07 +00:00
Michael Kaufmann (d00p)
f2a4c52110 - chown awstats/webalizer directory after traffic-cron, fixes #258 2010-06-08 05:51:23 +00:00
Michael Kaufmann (d00p)
10cfdb137a - fix sed-command in config-templates, fixes #263 2010-06-07 11:14:49 +00:00
Michael Kaufmann (d00p)
323e2210c3 - don't create absolut paths additionally as relative paths in customers docroot, fixes #259 2010-06-04 05:50:23 +00:00
Michael Kaufmann (d00p)
d256ddfcbc - added possibility to let the cron create mail-specific A-records (mail, imap, pop3, smtp) even when MX-servers are given, fixes #242 2010-06-02 10:08:01 +00:00
Michael Kaufmann (d00p)
de250df0cb - added possiblility for customer to get its e-mail account data deleted from the filesystem when removing an account from the panel, fixes #245 2010-06-02 05:57:44 +00:00
Michael Kaufmann (d00p)
e7c9b4d402 - variable name corrections, fixes #256 2010-06-01 05:17:53 +00:00
34 changed files with 682 additions and 145 deletions

View File

@@ -59,6 +59,14 @@ return array(
'default' => '', 'default' => '',
'save_method' => 'storeSettingField', 'save_method' => 'storeSettingField',
), ),
'system_dns_createmailentry' => array(
'label' => $lng['serversettings']['mail_also_with_mxservers'],
'settinggroup' => 'system',
'varname' => 'dns_createmailentry',
'type' => 'bool',
'default' => false,
'save_method' => 'storeSettingField'
),
'system_defaultttl' => array( 'system_defaultttl' => array(
'label' => $lng['serversettings']['defaultttl'], 'label' => $lng['serversettings']['defaultttl'],
'settinggroup' => 'system', 'settinggroup' => 'system',

View File

@@ -59,7 +59,7 @@ return array(
'type' => 'option', 'type' => 'option',
'default' => '', 'default' => '',
'option_mode' => 'multiple', 'option_mode' => 'multiple',
'option_options' => array('gd' => 'GD Library', 'pcre' => 'PCRE', 'ioncube' => 'ionCube', 'ioncube loader' => 'ionCube Loader', 'curl' => 'curl', 'mcrypt' => 'mcrypt', 'imap' => 'imap'), 'option_options' => array('gd' => 'GD Library', 'pcre' => 'PCRE', 'ioncube' => 'ionCube', 'ioncube loader' => 'ionCube Loader', 'curl' => 'curl', 'mcrypt' => 'mcrypt', 'imap' => 'imap', 'json' => 'json', 'ldap' => 'LDAP', 'hash' => 'hash', 'mbstring' => 'mbstring'),
'save_method' => 'storeSettingApsPhpExtensions', 'save_method' => 'storeSettingApsPhpExtensions',
), ),
'aps_php-function' => array( 'aps_php-function' => array(

View File

@@ -107,7 +107,7 @@ if($action == "add")
} }
$date_from_off = makecheckbox('date_from_off', $lng['panel']['not_activated'], '-1', false, '-1', true, true); $date_from_off = makecheckbox('date_from_off', $lng['panel']['not_activated'], '-1', false, '-1', true, true);
$date_until_off = makecheckbox('date_from_off', $lng['panel']['not_activated'], '-1', false, '-1', true, true); $date_until_off = makecheckbox('date_until_off', $lng['panel']['not_activated'], '-1', false, '-1', true, true);
eval("echo \"" . getTemplate("email/autoresponder_add") . "\";"); eval("echo \"" . getTemplate("email/autoresponder_add") . "\";");
} }
@@ -229,7 +229,7 @@ if($action == "edit")
$deactivated = '0'; $deactivated = '0';
$date_until = date('d-m-Y', $date_until); $date_until = date('d-m-Y', $date_until);
} }
$date_from_off = makecheckbox('date_until_off', $lng['panel']['not_activated'], '-1', false, $deactivated, true, true); $date_until_off = makecheckbox('date_until_off', $lng['panel']['not_activated'], '-1', false, $deactivated, true, true);
$checked = ''; $checked = '';

View File

@@ -184,6 +184,12 @@ elseif($page == 'emails')
$number_forwarders = 0; $number_forwarders = 0;
} }
if(isset($_POST['delete_userfiles'])
&& (int)$_POST['delete_userfiles'] == 1)
{
inserttask('7', $result['loginname'], $result['email']);
}
$db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); $db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'");
$db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `emails_used`=`emails_used` - 1 , `email_forwarders_used` = `email_forwarders_used` - " . (int)$number_forwarders . " $update_users_query_addon WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `emails_used`=`emails_used` - 1 , `email_forwarders_used` = `email_forwarders_used` - " . (int)$number_forwarders . " $update_users_query_addon WHERE `customerid`='" . (int)$userinfo['customerid'] . "'");
$log->logAction(USR_ACTION, LOG_INFO, "deleted email address '" . $result['email'] . "'"); $log->logAction(USR_ACTION, LOG_INFO, "deleted email address '" . $result['email'] . "'");
@@ -191,7 +197,7 @@ elseif($page == 'emails')
} }
else else
{ {
ask_yesno('email_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $idna_convert->decode($result['email_full'])); ask_yesno_withcheckbox('email_reallydelete', 'admin_customer_alsoremovemail', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $idna_convert->decode($result['email_full']));
} }
} }
} }

View File

@@ -451,7 +451,7 @@ INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) V
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (18, 'system', 'vmail_homedir', '/var/customers/mail/'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (18, 'system', 'vmail_homedir', '/var/customers/mail/');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (19, 'system', 'bindconf_directory', '/etc/bind/'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (19, 'system', 'bindconf_directory', '/etc/bind/');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (20, 'system', 'bindreload_command', '/etc/init.d/bind9 reload'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (20, 'system', 'bindreload_command', '/etc/init.d/bind9 reload');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (22, 'panel', 'version', '0.9.8'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (22, 'panel', 'version', '0.9.9');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (23, 'system', 'hostname', 'SERVERNAME'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (23, 'system', 'hostname', 'SERVERNAME');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (24, 'login', 'maxloginattempts', '3'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (24, 'login', 'maxloginattempts', '3');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (25, 'login', 'deactivatetime', '900'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (25, 'login', 'deactivatetime', '900');
@@ -570,6 +570,7 @@ INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) V
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (139, 'system', 'ftpserver', 'proftpd'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (139, 'system', 'ftpserver', 'proftpd');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (140, 'customredirect', 'enabled', '1'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (140, 'customredirect', 'enabled', '1');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (141, 'customredirect', 'default', '1'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (141, 'customredirect', 'default', '1');
INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (142, 'system', 'dns_createmailentry', '0');
# -------------------------------------------------------- # --------------------------------------------------------

View File

@@ -775,4 +775,24 @@ if(isFroxlorVersion('0.9.7'))
updateToVersion('0.9.8'); updateToVersion('0.9.8');
} }
if(isFroxlorVersion('0.9.8'))
{
showUpdateStep("Updating from 0.9.8 to 0.9.9-svn1", false);
$update_defdns_mailentry = isset($_POST['update_defdns_mailentry']) ? '1' : '0';
showUpdateStep("Adding new settings");
$db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'dns_createmailentry', '".(int)$update_defdns_mailentry."');");
lastStepStatus(0);
updateToVersion('0.9.9-svn1');
}
if(isFroxlorVersion('0.9.9-svn1'))
{
showUpdateStep("Updating from 0.9.9-svn1 to 0.9.9 final");
lastStepStatus(0);
updateToVersion('0.9.9');
}
?> ?>

View File

@@ -149,4 +149,13 @@ function parseAndOutputPreconfig(&$has_preconfig, &$return, $current_version)
eval("\$return.=\"" . getTemplate("update/preconfigitem") . "\";"); eval("\$return.=\"" . getTemplate("update/preconfigitem") . "\";");
} }
} }
if(versionInUpdate($current_version, '0.9.9-svn1'))
{
$has_preconfig = true;
$description = 'When entering MX servers to Froxlor there was no mail-, imap-, pop3- and smtp-"A record" created. You can now chose whether this should be done or not.';
$question = '<strong>Do you want these A-records to be created even with MX servers given?:</strong>&nbsp;';
$question.= makeyesno('update_defdns_mailentry', '1', '0', '0');
eval("\$return.=\"" . getTemplate("update/preconfigitem") . "\";");
}
} }

View File

@@ -32,6 +32,7 @@ class ApsInstaller extends ApsParser
private $RealPath = ''; private $RealPath = '';
private $RootDir = ''; private $RootDir = '';
private $Hosts = ''; private $Hosts = '';
private $aps_version = '1.0';
/** /**
* constructor of class. setup some basic variables * constructor of class. setup some basic variables
@@ -73,6 +74,8 @@ class ApsInstaller extends ApsParser
$XmlContent = file_get_contents($this->RootDir . 'packages/' . $Row['Path'] . '/APP-META.xml'); $XmlContent = file_get_contents($this->RootDir . 'packages/' . $Row['Path'] . '/APP-META.xml');
$Xml = new SimpleXMLElement($XmlContent); $Xml = new SimpleXMLElement($XmlContent);
$this->aps_version = isset($Xml->attributes()->version) ? (string)$Xml->attributes()->version : '1.0';
//check for unparseable xml data //check for unparseable xml data
if($Xml == false) if($Xml == false)
@@ -146,9 +149,16 @@ class ApsInstaller extends ApsParser
$ReturnStatus = 0; $ReturnStatus = 0;
// make configure-script executable // make configure-script executable
chmod($this->RealPath . $this->DomainPath . '/install_scripts/configure', 0755); if($this->aps_version != '1.0')
{
$scriptname = (string)$Xml->service->provision->{'configuration-script'}['name'];
} else {
$scriptname = 'configure';
}
$Return = safe_exec('php ' . escapeshellarg($this->RealPath . $this->DomainPath . '/install_scripts/configure') . ' install', $ReturnStatus); chmod($this->RealPath . $this->DomainPath . '/install_scripts/'.$scriptname, 0755);
$Return = safe_exec('php ' . escapeshellarg($this->RealPath . $this->DomainPath . '/install_scripts/'.$scriptname) . ' install', $ReturnStatus);
if($ReturnStatus != 0) if($ReturnStatus != 0)
{ {
@@ -214,7 +224,19 @@ class ApsInstaller extends ApsParser
//remove permissions //remove permissions
//drop database //drop database
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('db', 'http://apstandard.com/ns/1/db');
$XmlDb = new DynamicProperties;
$XmlDb->db->id = getXPathValue($Xml, '//db:id');
}
if($XmlDb->db->id) if($XmlDb->db->id)
{ {
@@ -278,6 +300,19 @@ class ApsInstaller extends ApsParser
private function PrepareFiles($Xml, $Row, $Task) private function PrepareFiles($Xml, $Row, $Task)
{ {
if($this->aps_version != '1.0')
{
$mapping = $Xml->service->provision->{'url-mapping'}->mapping;
$mapping_path = $Xml->service->provision->{'url-mapping'}->mapping['path'];
$mapping_url = $Xml->service->provision->{'url-mapping'}->mapping['url'];
}
else
{
$mapping = $Xml->mapping;
$mapping_path = $Xml->mapping['path'];
$mapping_url = $Xml->mapping['url'];
}
if($Task == TASK_INSTALL) if($Task == TASK_INSTALL)
{ {
//FIXME truncate customer directory //FIXME truncate customer directory
@@ -287,7 +322,7 @@ class ApsInstaller extends ApsParser
//extract all files and chown them to the customer guid //extract all files and chown them to the customer guid
if(self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], $Xml->mapping['path'], $this->RealPath . $this->DomainPath . '/') == false if(self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], $mapping_path, $this->RealPath . $this->DomainPath . '/') == false
|| self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], 'scripts', $this->RealPath . $this->DomainPath . '/install_scripts/') == false) || self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], 'scripts', $this->RealPath . $this->DomainPath . '/install_scripts/') == false)
{ {
$this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID']));
@@ -319,7 +354,7 @@ class ApsInstaller extends ApsParser
//recursive mappings //recursive mappings
self::PrepareMappings($Xml->mapping, $Xml->mapping['url'], $this->RealPath . $this->DomainPath . '/'); self::PrepareMappings($mapping, $mapping_url, $this->RealPath . $this->DomainPath . '/');
return true; return true;
} }
@@ -336,6 +371,8 @@ class ApsInstaller extends ApsParser
//check for special PHP permissions //check for special PHP permissions
//must be done with xpath otherwise check not possible (XML parser problem with attributes) //must be done with xpath otherwise check not possible (XML parser problem with attributes)
if($ParentMapping && $ParentMapping !== null)
{
$ParentMapping->registerXPathNamespace('p', 'http://apstandard.com/ns/1/php'); $ParentMapping->registerXPathNamespace('p', 'http://apstandard.com/ns/1/php');
$Result = $ParentMapping->xpath('p:permissions'); $Result = $ParentMapping->xpath('p:permissions');
@@ -366,6 +403,7 @@ class ApsInstaller extends ApsParser
chmod($Path, 0222); chmod($Path, 0222);
} }
} }
}
//set environment variables //set environment variables
@@ -373,7 +411,8 @@ class ApsInstaller extends ApsParser
putenv('WEB_' . $EnvVariable . '_DIR=' . $Path); putenv('WEB_' . $EnvVariable . '_DIR=' . $Path);
//resolve deeper mappings //resolve deeper mappings
if($ParentMapping && $ParentMapping !== null)
{
foreach($ParentMapping->mapping as $Mapping) foreach($ParentMapping->mapping as $Mapping)
{ {
//recursive check of other mappings //recursive check of other mappings
@@ -388,6 +427,7 @@ class ApsInstaller extends ApsParser
} }
} }
} }
}
/** /**
* setup domain environment variables for the installation script * setup domain environment variables for the installation script
@@ -434,8 +474,23 @@ class ApsInstaller extends ApsParser
private function PrepareDatabase($Xml, $Row, $Task) private function PrepareDatabase($Xml, $Row, $Task)
{ {
global $db_root; global $db_root;
$XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db');
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('db', 'http://apstandard.com/ns/1/db');
$XmlDb = new DynamicProperties;
$XmlDb->db->id = getXPathValue($Xml, '//db:id');
}
if($XmlDb->db->id) if($XmlDb->db->id)
{ {
//database management //database management

View File

@@ -38,6 +38,7 @@ class ApsParser
private $settings = array(); private $settings = array();
private $db = false; private $db = false;
private $RootDir = ''; private $RootDir = '';
private $aps_version = '1.0';
/** /**
* Constructor of class, setup basic variables needed by the class * Constructor of class, setup basic variables needed by the class
@@ -988,14 +989,26 @@ class ApsParser
if($Xml == false)continue; if($Xml == false)continue;
$Icon = './images/default.png'; $Icon = './images/default.png';
$this->aps_version = isset($Xml->attributes()->version) ? (string)$Xml->attributes()->version : '1.0';
//show data and status of package //show data and status of package
if($Xml->icon['path']) if($this->aps_version != '1.0')
{ {
$Icon = './packages/' . $Row2['Path'] . '/' . basename($Xml->icon['path']); $iconpath = $Xml->presentation->icon['path'];
$Summary = htmlspecialchars($Xml->presentation->summary);
}
else
{
$iconpath = $Xml->icon['path'];
$Summary = htmlspecialchars($Xml->summary);
}
if($iconpath)
{
$Icon = './packages/' . $Row2['Path'] . '/' . basename($iconpath);
} }
$Summary = $Xml->summary;
$Fieldname = $lng['aps']['version']; $Fieldname = $lng['aps']['version'];
$Fieldvalue = $Xml->version . ' (Release ' . $Xml->release . ')'; $Fieldvalue = $Xml->version . ' (Release ' . $Xml->release . ')';
eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); eval("\$Data.=\"" . getTemplate("aps/data") . "\";");
@@ -1345,16 +1358,36 @@ class ApsParser
{ {
$Error = array(); $Error = array();
$this->aps_version = isset($Xml->attributes()->version) ? (string)$Xml->attributes()->version : '1.0';
//check alot of stuff if package is supported //check alot of stuff if package is supported
//php modules //php modules
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlPhp = $Xml->requirements->children('http://apstandard.com/ns/1/php'); $XmlPhp = $Xml->requirements->children('http://apstandard.com/ns/1/php');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('php', 'http://apstandard.com/ns/1/php');
$XmlPhp = new DynamicProperties;
$XmlPhp->extension = getXPathValue($Xml, '//php:extension', false);
$XmlPhp->function = getXPathValue($Xml, '//php:function', false);
}
if($XmlPhp->extension) if($XmlPhp->extension)
{ {
$ExtensionsLoaded = get_loaded_extensions(); $ExtensionsLoaded = get_loaded_extensions();
foreach($XmlPhp->extension as $Extension) foreach($XmlPhp->extension as $Extension)
{ {
if(strtolower($Extension) == 'php')
{
continue;
}
if(!in_array($Extension, $ExtensionsLoaded) if(!in_array($Extension, $ExtensionsLoaded)
&& !self::CheckException('php', 'extension', $Extension)) && !self::CheckException('php', 'extension', $Extension))
{ {
@@ -1389,6 +1422,11 @@ class ApsParser
); );
foreach($PhpValues as $Value) foreach($PhpValues as $Value)
{ {
if ($this->aps_version != '1.0')
{
$XmlPhp->{$Value} = getXPathValue($Xml, '//php:'.$Value);
}
if($XmlPhp->{$Value}) if($XmlPhp->{$Value})
{ {
if(self::TrueFalseIniGet($Value) != $XmlPhp->{$Value} if(self::TrueFalseIniGet($Value) != $XmlPhp->{$Value}
@@ -1399,6 +1437,11 @@ class ApsParser
} }
} }
if ($this->aps_version != '1.0')
{
$XmlPhp->{'post-max-size'} = getXPathValue($Xml, '//php:post-max-size');
}
if($XmlPhp->{'post-max-size'}) if($XmlPhp->{'post-max-size'})
{ {
if(self::PhpMemorySizeToBytes(ini_get('post_max_size')) < intval($XmlPhp->{'post-max-size'}) if(self::PhpMemorySizeToBytes(ini_get('post_max_size')) < intval($XmlPhp->{'post-max-size'})
@@ -1408,6 +1451,11 @@ class ApsParser
} }
} }
if ($this->aps_version != '1.0')
{
$XmlPhp->{'memory-limit'} = getXPathValue($Xml, '//php:memory-limit');
}
if($XmlPhp->{'memory-limit'}) if($XmlPhp->{'memory-limit'})
{ {
if(self::PhpMemorySizeToBytes(ini_get('memory_limit')) < intval($XmlPhp->{'memory-limit'}) if(self::PhpMemorySizeToBytes(ini_get('memory_limit')) < intval($XmlPhp->{'memory-limit'})
@@ -1417,6 +1465,11 @@ class ApsParser
} }
} }
if ($this->aps_version != '1.0')
{
$XmlPhp->{'max-execution-time'} = getXPathValue($Xml, '//php:max-execution-time');
}
if($XmlPhp->{'max-execution-time'}) if($XmlPhp->{'max-execution-time'})
{ {
if(ini_get('max_execution_time') < intval($XmlPhp->{'max-execution-time'}) if(ini_get('max_execution_time') < intval($XmlPhp->{'max-execution-time'})
@@ -1450,7 +1503,21 @@ class ApsParser
//database //database
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('db', 'http://apstandard.com/ns/1/db');
$XmlDb = new DynamicProperties;
$XmlDb->db->id = getXPathValue($Xml, '//db:id');
$XmlDb->db->{'server-type'} = getXPathValue($Xml, '//db:server-type');
$XmlDb->db->{'server-min-version'} = getXPathValue($Xml, '//db:server-min-version');
}
if($XmlDb->db->id) if($XmlDb->db->id)
{ {
@@ -1467,7 +1534,21 @@ class ApsParser
//ASP.NET //ASP.NET
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlAsp = $Xml->requirements->children('http://apstandard.com/ns/1/aspnet'); $XmlAsp = $Xml->requirements->children('http://apstandard.com/ns/1/aspnet');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('aspnet', 'http://apstandard.com/ns/1/aspnet');
$XmlAsp = new DynamicProperties;
$XmlAsp->handler = getXPathValue($Xml, '//aspnet:handler');
$XmlAsp->permissions = getXPathValue($Xml, '//aspnet:permissions');
$XmlAsp->version = getXPathValue($Xml, '//aspnet:version');
}
if($XmlAsp->handler if($XmlAsp->handler
|| $XmlAsp->permissions || $XmlAsp->permissions
@@ -1478,7 +1559,19 @@ class ApsParser
//CGI //CGI
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlCgi = $Xml->requirements->children('http://apstandard.com/ns/1/cgi'); $XmlCgi = $Xml->requirements->children('http://apstandard.com/ns/1/cgi');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('cgi', 'http://apstandard.com/ns/1/cgi');
$XmlCgi = new DynamicProperties;
$XmlCgi->handler = getXPathValue($Xml, '//cgi:handler');
}
if($XmlCgi->handler) if($XmlCgi->handler)
{ {
@@ -1487,7 +1580,20 @@ class ApsParser
//webserver modules //webserver modules
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlWebserver = $Xml->requirements->children('http://apstandard.com/ns/1/apache'); $XmlWebserver = $Xml->requirements->children('http://apstandard.com/ns/1/apache');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('apache', 'http://apstandard.com/ns/1/apache');
$XmlWebserver = new DynamicProperties;
$XmlWebserver->{'required-module'} = getXPathValue($Xml, '//apache:required-module');
$XmlWebserver->htaccess = getXPathValue($Xml, '//apache:htaccess');
}
if($XmlWebserver->{'required-module'}) if($XmlWebserver->{'required-module'})
{ {
@@ -1527,7 +1633,21 @@ class ApsParser
//validation against a charset not possible in current version //validation against a charset not possible in current version
foreach($Xml->settings->group as $Group) if ($this->aps_version == '1.0')
{
// the good ole way
$aps_settings_array = $Xml->settings->group;
}
else
{
// since 1.1
$aps_settings_array = $Xml->{'global-settings'}->setting;
if(!is_array($aps_settings_array)) {
$aps_settings_array = $Xml->service->settings->group;
}
}
foreach($aps_settings_array as $Group)
{ {
foreach($Group->setting as $Setting) foreach($Group->setting as $Setting)
{ {
@@ -1544,6 +1664,8 @@ class ApsParser
//check different errors/features in submappings //check different errors/features in submappings
if ($this->aps_version == '1.0')
{
$Return = self::CheckSubmappings($Xml->mapping, $Xml->mapping['url']); $Return = self::CheckSubmappings($Xml->mapping, $Xml->mapping['url']);
if(count($Return) != 0) if(count($Return) != 0)
@@ -1553,6 +1675,7 @@ class ApsParser
if(!in_array($Value, $Error))$Error[] = $Value; if(!in_array($Value, $Error))$Error[] = $Value;
} }
} }
}
//check already installed versions //check already installed versions
@@ -1617,9 +1740,19 @@ class ApsParser
//copy screenshots //copy screenshots
if($Xml->screenshot) if ($this->aps_version != '1.0')
{ {
foreach($Xml->screenshot as $Screenshot) $xml_screenshots = $Xml->presentation->screenshot;;
}
else
{
$xml_screenshots = $Xml->screenshot;
}
if($xml_screenshots)
{
foreach($xml_screenshots as $Screenshot)
{ {
self::GetContentFromZip($Filename, $Screenshot['path'], $Destination . basename($Screenshot['path'])); self::GetContentFromZip($Filename, $Screenshot['path'], $Destination . basename($Screenshot['path']));
} }
@@ -1627,17 +1760,36 @@ class ApsParser
//copy icon //copy icon
if($Xml->icon['path']) if ($this->aps_version != '1.0')
{ {
self::GetContentFromZip($Filename, $Xml->icon['path'], $Destination . basename($Xml->icon['path'])); $xml_iconpath = $Xml->presentation->icon['path'];
}
else
{
$xml_iconpath = $Xml->icon['path'];
}
if($xml_iconpath)
{
self::GetContentFromZip($Filename, $xml_iconpath, $Destination . basename($xml_iconpath));
} }
//copy license //copy license
if($Xml->license if ($this->aps_version != '1.0')
&& $Xml->license->text->file)
{ {
self::GetContentFromZip($Filename, $Xml->license->text->file, $Destination . 'license.txt'); $xml_license = $Xml->service->license;
}
else
{
$xml_license = $Xml->license;
}
if($xml_license
&& $xml_license->text->file)
{
self::GetContentFromZip($Filename, $xml_license->text->file, $Destination . 'license.txt');
} }
//insert package to database //insert package to database
@@ -2363,10 +2515,26 @@ class ApsParser
if($Xml == false)return false; if($Xml == false)return false;
$this->aps_version = isset($Xml->attributes()->version) ? (string)$Xml->attributes()->version : '1.0';
//check all data fields of xml file against inut of customer //check all data fields of xml file against inut of customer
if ($this->aps_version == '1.0')
{
// the good ole way
$aps_settings_array = $Xml->settings->group;
}
else
{
// since 1.1
$aps_settings_array = $Xml->{'global-settings'}->setting;
if(!is_array($aps_settings_array)) {
$aps_settings_array = $Xml->service->settings->group;
}
}
$Error = array(); $Error = array();
foreach($Xml->settings->group as $Group) foreach($aps_settings_array as $Group)
{ {
foreach($Group->setting as $Setting) foreach($Group->setting as $Setting)
{ {
@@ -2542,7 +2710,19 @@ class ApsParser
//database required? //database required?
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('db', 'http://apstandard.com/ns/1/db');
$XmlDb = new DynamicProperties;
$XmlDb->db->id = getXPathValue($Xml, '//db:id');
}
if($XmlDb->db->id) if($XmlDb->db->id)
{ {
@@ -2664,10 +2844,19 @@ class ApsParser
self::SetInstallationValue($PackageId, $CustomerId, 'main_location', ''); self::SetInstallationValue($PackageId, $CustomerId, 'main_location', '');
} }
if($Xml->license) if ($this->aps_version != '1.0')
{ {
if($Xml->license['must-accept'] $xml_license = $Xml->service->license;
&& $Xml->license['must-accept'] == 'true') }
else
{
$xml_license = $Xml->license;
}
if($xml_license)
{
if($xml_license['must-accept']
&& $xml_license['must-accept'] == 'true')
{ {
if(isset($_POST['license']) if(isset($_POST['license'])
&& $_POST['license'] == 'true') && $_POST['license'] == 'true')
@@ -2712,6 +2901,8 @@ class ApsParser
if($Xml == false)return false; if($Xml == false)return false;
$this->aps_version = isset($Xml->attributes()->version) ? (string)$Xml->attributes()->version : '1.0';
//show notifcation if customer has reached his installation limit //show notifcation if customer has reached his installation limit
if($this->userinfo['aps_packages'] != '-1' if($this->userinfo['aps_packages'] != '-1'
@@ -2725,9 +2916,18 @@ class ApsParser
$Icon = './images/default.png'; $Icon = './images/default.png';
if($Xml->icon['path']) if($this->aps_version != '1.0')
{ {
$Icon = './packages/' . $Row['Path'] . '/' . basename($Xml->icon['path']); $iconpath = $Xml->presentation->icon['path'];
}
else
{
$iconpath = $Xml->icon['path'];
}
if($iconpath)
{
$Icon = './packages/' . $Row['Path'] . '/' . basename($iconpath);
} }
//show error message if some input was wrong //show error message if some input was wrong
@@ -2761,7 +2961,7 @@ class ApsParser
{ {
if($Value) if($Value)
{ {
if($Row3['ID'] == $Value) if($Row3['id'] == $Value)
{ {
$Temp.= '<option selected="selected" value="' . $Row3['id'] . '">' . $Row3['domain'] . '</option>'; $Temp.= '<option selected="selected" value="' . $Row3['id'] . '">' . $Row3['domain'] . '</option>';
} }
@@ -2813,7 +3013,19 @@ class ApsParser
//database required? //database required?
if ($this->aps_version == '1.0')
{
// the good ole way
$XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db');
}
else
{
// since 1.1
$Xml->registerXPathNamespace('db', 'http://apstandard.com/ns/1/db');
$XmlDb = new DynamicProperties;
$XmlDb->db->id = getXPathValue($Xml, '//db:id');
}
if($XmlDb->db->id) if($XmlDb->db->id)
{ {
@@ -2832,7 +3044,21 @@ class ApsParser
eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); eval("\$Data.=\"" . getTemplate("aps/data") . "\";");
} }
foreach($Xml->settings->group as $Group) if ($this->aps_version == '1.0')
{
// the good ole way
$aps_settings_array = $Xml->settings->group;
}
else
{
// since 1.1
$aps_settings_array = $Xml->{'global-settings'}->setting;
if(!is_array($aps_settings_array)) {
$aps_settings_array = $Xml->service->settings->group;
}
}
foreach($aps_settings_array as $Group)
{ {
$GroupPrinted = false; $GroupPrinted = false;
foreach($Group->setting as $Setting) foreach($Group->setting as $Setting)
@@ -3015,16 +3241,25 @@ class ApsParser
} }
} }
if($Xml->license) if ($this->aps_version != '1.0')
{
$xml_license = $Xml->service->license;
}
else
{
$xml_license = $Xml->license;
}
if($xml_license)
{ {
$Temp = ''; $Temp = '';
if($Xml->license['must-accept'] if($xml_license['must-accept']
&& $Xml->license['must-accept'] == 'true') && $xml_license['must-accept'] == 'true')
{ {
if($Xml->license->text->name)$Temp.= $Xml->license->text->name . '<br/>'; if($xml_license->text->name)$Temp.= $xml_license->text->name . '<br/>';
if($Xml->license->text->file) if($xml_license->text->file)
{ {
$Temp.= '<textarea name="text" rows="10" cols="55">'; $Temp.= '<textarea name="text" rows="10" cols="55">';
$FileContent = file_get_contents('./packages/' . $Row['Path'] . '/license.txt'); $FileContent = file_get_contents('./packages/' . $Row['Path'] . '/license.txt');
@@ -3037,7 +3272,7 @@ class ApsParser
} }
else else
{ {
$Temp.= '<a target="_blank" href="' . htmlspecialchars($Xml->license->text->url) . '">' . $lng['aps']['error_license'] . '</a>'; $Temp.= '<a target="_blank" href="' . htmlspecialchars($xml_license->text->url) . '">' . $lng['aps']['error_license'] . '</a>';
$Groupname = $lng['aps']['license']; $Groupname = $lng['aps']['license'];
$Fieldname = $lng['aps']['license']; $Fieldname = $lng['aps']['license'];
$Fieldvalue = $Temp; $Fieldvalue = $Temp;
@@ -3088,14 +3323,37 @@ class ApsParser
if($Xml == false)return false; if($Xml == false)return false;
$Icon = './images/default.png'; $Icon = './images/default.png';
//show icon and basic data $this->aps_version = isset($Xml->attributes()->version) ? (string)$Xml->attributes()->version : '1.0';
if($Xml->icon['path']) //show icon and basic data
if($this->aps_version != '1.0')
{ {
$Icon = './packages/' . $Row['Path'] . '/' . basename($Xml->icon['path']); $iconpath = $Xml->presentation->icon['path'];
$Summary = htmlspecialchars($Xml->presentation->summary);
$categories = $Xml->presentation->categories;
$languages = $Xml->presentation->languages;
$description = $Xml->presentation->description;
$changelogs = $Xml->presentation->changelog;
$license = $Xml->service->license;
$screenshots = $Xml->presentation->screenshot;
}
else
{
$iconpath = $Xml->icon['path'];
$Summary = htmlspecialchars($Xml->summary);
$categories = $Xml->categories;
$languages = $Xml->languages;
$description = $Xml->description;
$changelogs = $Xml->changelog;
$license = $Xml->license;
$screenshots = $Xml->screenshot;
}
if($iconpath)
{
$Icon = './packages/' . $Row['Path'] . '/' . basename($iconpath);
} }
$Summary = htmlspecialchars($Xml->summary);
$Fieldname = $lng['aps']['version']; $Fieldname = $lng['aps']['version'];
$Fieldvalue = $Xml->version . ' (Release ' . $Xml->release . ')'; $Fieldvalue = $Xml->version . ' (Release ' . $Xml->release . ')';
eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); eval("\$Data.=\"" . getTemplate("aps/data") . "\";");
@@ -3120,12 +3378,12 @@ class ApsParser
//show categories //show categories
if($Xml->categories) if($categories)
{ {
$Temp = ''; $Temp = '';
foreach($Xml->categories->category as $Categories) foreach($categories->category as $_categories)
{ {
$Temp.= htmlspecialchars($Categories[0]) . '<br/>'; $Temp.= htmlspecialchars($_categories[0]) . '<br/>';
} }
$Fieldname = $lng['aps']['categories']; $Fieldname = $lng['aps']['categories'];
@@ -3135,12 +3393,12 @@ class ApsParser
//show available languages //show available languages
if($Xml->languages) if($languages)
{ {
$Temp = ''; $Temp = '';
foreach($Xml->languages->language as $Languages) foreach($languages->language as $_languages)
{ {
$Temp.= $Languages[0] . ' '; $Temp.= $_languages[0] . ' ';
} }
$Fieldname = $lng['aps']['languages']; $Fieldname = $lng['aps']['languages'];
@@ -3153,7 +3411,7 @@ class ApsParser
if($All == true) if($All == true)
{ {
$Fieldname = $lng['aps']['long_description']; $Fieldname = $lng['aps']['long_description'];
$Fieldvalue = htmlspecialchars($Xml->description); $Fieldvalue = htmlspecialchars($description);
eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); eval("\$Data.=\"" . getTemplate("aps/data") . "\";");
//show config script language //show config script language
@@ -3168,7 +3426,7 @@ class ApsParser
//show changelog //show changelog
$Temp = '<ul>'; $Temp = '<ul>';
foreach($Xml->changelog->version as $Versions) foreach($changelogs->version as $Versions)
{ {
$Temp.= '<li><strong>' . $Versions['version'] . ' (Release ' . $Versions['release'] . ')</strong>'; $Temp.= '<li><strong>' . $Versions['version'] . ' (Release ' . $Versions['release'] . ')</strong>';
$Temp.= '<ul>'; $Temp.= '<ul>';
@@ -3187,13 +3445,13 @@ class ApsParser
//show license //show license
if($Xml->license) if($license)
{ {
if($Xml->license->text->file) if($license->text->file)
{ {
$Temp = ''; $Temp = '';
if($Xml->license->text->name)$Temp = $Xml->license->text->name . '<br/>'; if($license->text->name)$Temp = $license->text->name . '<br/>';
$Temp.= '<form name="license" action="#"><textarea name="text" rows="10" cols="70">'; $Temp.= '<form name="license" action="#"><textarea name="text" rows="10" cols="70">';
$FileContent = file_get_contents('./packages/' . $Row['Path'] . '/license.txt'); $FileContent = file_get_contents('./packages/' . $Row['Path'] . '/license.txt');
$Temp.= htmlentities($FileContent, ENT_QUOTES, 'ISO-8859-1'); $Temp.= htmlentities($FileContent, ENT_QUOTES, 'ISO-8859-1');
@@ -3205,23 +3463,23 @@ class ApsParser
else else
{ {
$Fieldname = $lng['aps']['license']; $Fieldname = $lng['aps']['license'];
$Fieldvalue = '<a target="_blank" href="' . htmlspecialchars($Xml->license->text->url) . '">' . $lng['aps']['linktolicense'] . '</a>'; $Fieldvalue = '<a target="_blank" href="' . htmlspecialchars($license->text->url) . '">' . $lng['aps']['linktolicense'] . '</a>';
eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); eval("\$Data.=\"" . getTemplate("aps/data") . "\";");
} }
} }
//show screenshots //show screenshots
if($Xml->screenshot) if($screenshots)
{ {
$Count = 0; $Count = 0;
$Temp = ''; $Temp = '';
foreach($Xml->screenshot as $Screenshot) foreach($screenshots as $Screenshot)
{ {
$Count+= 1; $Count+= 1;
$Temp.= '<img src="./packages/' . $Row['Path'] . '/' . basename($Screenshot['path']) . '" alt="' . $Screenshot->description . '"/><br/><em>' . $Screenshot->description . '</em><br/>'; $Temp.= '<img src="./packages/' . $Row['Path'] . '/' . basename($Screenshot['path']) . '" alt="' . $Screenshot->description . '"/><br/><em>' . $Screenshot->description . '</em><br/>';
if(count($Xml->screenshot) != $Count)$Temp.= '<br/>'; if(count($screenshots) != $Count)$Temp.= '<br/>';
} }
$Fieldname = $lng['aps']['screenshots']; $Fieldname = $lng['aps']['screenshots'];

View File

@@ -0,0 +1,18 @@
<?php
/**
* This file is part of the Froxlor project.
* 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 Froxlor team <team@froxlor.org> (2010-)
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
* @package APS
* @version $Id$
*/
class DynamicProperties { /* empty class for some magic */ }

View File

@@ -0,0 +1,30 @@
<?php
/**
* This file is part of the Froxlor project.
* 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 Froxlor team <team@froxlor.org> (2010-)
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
* @package APS
* @version $Id$
*/
function getXPathValue($xmlobj = null, $path = null, $single = true)
{
$result = null;
$tmpxml = new DynamicProperties;
$tmpxml = ($xmlobj->xpath($path)) ? $xmlobj->xpath($path) : false;
if($result !== false)
{
$result = ($single == true) ? (string)$tmpxml[0] : $tmpxml;
}
return $result;
}

View File

@@ -27,6 +27,7 @@
* @param int The uid of the user * @param int The uid of the user
* @param int The gid of the user * @param int The gid of the user
* @param bool Place standard-index.html into the new folder * @param bool Place standard-index.html into the new folder
* @param bool Allow creating a directory out of the customers docroot
* *
* @return bool true if everything went okay, false if something went wrong * @return bool true if everything went okay, false if something went wrong
* *
@@ -34,7 +35,7 @@
* @author Martin Burchert <martin.burchert@syscp.org> * @author Martin Burchert <martin.burchert@syscp.org>
*/ */
function mkDirWithCorrectOwnership($homeDir, $dirToCreate, $uid, $gid, $placeindex = false) function mkDirWithCorrectOwnership($homeDir, $dirToCreate, $uid, $gid, $placeindex = false, $allow_notwithinhomedir = false)
{ {
$returncode = true; $returncode = true;
@@ -47,16 +48,20 @@ function mkDirWithCorrectOwnership($homeDir, $dirToCreate, $uid, $gid, $placeind
if(substr($dirToCreate, 0, strlen($homeDir)) == $homeDir) if(substr($dirToCreate, 0, strlen($homeDir)) == $homeDir)
{ {
$subdir = substr($dirToCreate, strlen($homeDir)); $subdir = substr($dirToCreate, strlen($homeDir));
$within_homedir = true;
} }
else else
{ {
$subdir = $dirToCreate; $subdir = $dirToCreate;
$within_homedir = false;
} }
$subdir = makeCorrectDir($subdir); $subdir = makeCorrectDir($subdir);
$subdirlen = strlen($subdir);
$subdirs = array(); $subdirs = array();
array_push($subdirs, $dirToCreate);
if($within_homedir || !$allow_notwithinhomedir)
{
$subdirlen = strlen($subdir);
$offset = 0; $offset = 0;
while($offset < $subdirlen) while($offset < $subdirlen)
@@ -66,6 +71,11 @@ function mkDirWithCorrectOwnership($homeDir, $dirToCreate, $uid, $gid, $placeind
$offset++; $offset++;
array_push($subdirs, makeCorrectDir($homeDir . $subdirelem)); array_push($subdirs, makeCorrectDir($homeDir . $subdirelem));
} }
}
else
{
array_push($subdirs, $dirToCreate);
}
$subdirs = array_unique($subdirs); $subdirs = array_unique($subdirs);
sort($subdirs); sort($subdirs);

View File

@@ -62,6 +62,17 @@ function inserttask($type, $param1 = '', $param2 = '', $param3 = '')
$db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`, `data`) VALUES ("6", "' . $db->escape($data) . '")'); $db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`, `data`) VALUES ("6", "' . $db->escape($data) . '")');
$doupdate = true; $doupdate = true;
} }
elseif($type == '7'
&& $param1 != ''
&& $param2 != '')
{
$data = Array();
$data['loginname'] = $param1;
$data['email'] = $param2;
$data = serialize($data);
$db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`, `data`) VALUES ("7", "' . $db->escape($data) . '")');
$doupdate = true;
}
if($doupdate === true if($doupdate === true
&& (int)$settings['system']['realtime_port'] !== 0 && (int)$settings['system']['realtime_port'] !== 0

View File

@@ -72,7 +72,7 @@ define('PACKAGE_ENABLED', 2);
// VERSION INFO // VERSION INFO
$version = '0.9.8'; $version = '0.9.9';
$dbversion = '2'; $dbversion = '2';
$branding = ''; $branding = '';

View File

@@ -256,6 +256,7 @@ $lng['question']['ftp_reallydelete'] = 'Do you really want to delete the FTP acc
$lng['question']['mysql_reallydelete'] = 'Do you really want to delete the database %s? This cannot be undone!'; $lng['question']['mysql_reallydelete'] = 'Do you really want to delete the database %s? This cannot be undone!';
$lng['question']['admin_configs_reallyrebuild'] = 'Do you really want to rebuild all config files?'; $lng['question']['admin_configs_reallyrebuild'] = 'Do you really want to rebuild all config files?';
$lng['question']['admin_customer_alsoremovefiles'] = 'Remove user files too?'; $lng['question']['admin_customer_alsoremovefiles'] = 'Remove user files too?';
$lng['question']['admin_customer_alsoremovemail'] = 'Completely remove email data from filesystem?';
/** /**
* Mails * Mails
@@ -1064,7 +1065,7 @@ $lng['aps']['nospecialchars'] = 'Special characters are not allowed in the searc
$lng['aps']['noitemsfound'] = 'No Packages were found!'; $lng['aps']['noitemsfound'] = 'No Packages were found!';
$lng['aps']['nopackagesinstalled'] = 'You haven\'t installed any package yet which could be shown.'; $lng['aps']['nopackagesinstalled'] = 'You haven\'t installed any package yet which could be shown.';
$lng['aps']['instance_install'] = 'Package Installation pending'; $lng['aps']['instance_install'] = 'Package Installation pending';
$lng['aps']['instance_task_active'] = 'Installation running at this moment'; $lng['aps']['instance_task_active'] = 'Package is currently being processed';
$lng['aps']['instance_success'] = 'Package is installed/was installed successfully'; $lng['aps']['instance_success'] = 'Package is installed/was installed successfully';
$lng['aps']['instance_error'] = 'Package isn\'t installed - there occured some errors on the Installation'; $lng['aps']['instance_error'] = 'Package isn\'t installed - there occured some errors on the Installation';
$lng['aps']['instance_uninstall'] = 'Package Uninstallation pending'; $lng['aps']['instance_uninstall'] = 'Package Uninstallation pending';
@@ -1420,7 +1421,10 @@ $lng['redirect_desc']['rc_found'] = 'found';
$lng['redirect_desc']['rc_seeother'] = 'see other'; $lng['redirect_desc']['rc_seeother'] = 'see other';
$lng['redirect_desc']['rc_tempred'] = 'temporary redirect'; $lng['redirect_desc']['rc_tempred'] = 'temporary redirect';
// ADDED UN FROXLOR 0.9.8 // ADDED IN FROXLOR 0.9.8
$lng['error']['exception'] = '%s'; $lng['error']['exception'] = '%s';
// ADDED IN FROXLOR 0.9.9-svn1
$lng['serversettings']['mail_also_with_mxservers'] = 'Create mail-, imap-, pop3- and smtp-"A record" also with MX-Servers set';
?> ?>

View File

@@ -256,6 +256,7 @@ $lng['question']['ftp_reallydelete'] = 'Wollen Sie das FTP-Benutzerkonto %s wirk
$lng['question']['mysql_reallydelete'] = 'Wollen Sie die Datenbank %s wirklich l&ouml;schen?<br />ACHTUNG! Alle Daten gehen unwiderruflich verloren!'; $lng['question']['mysql_reallydelete'] = 'Wollen Sie die Datenbank %s wirklich l&ouml;schen?<br />ACHTUNG! Alle Daten gehen unwiderruflich verloren!';
$lng['question']['admin_configs_reallyrebuild'] = 'Wollen Sie wirklich alle Konfigurationsdateien neu erstellen lassen?'; $lng['question']['admin_configs_reallyrebuild'] = 'Wollen Sie wirklich alle Konfigurationsdateien neu erstellen lassen?';
$lng['question']['admin_customer_alsoremovefiles'] = 'Auch Kunden-Daten l&ouml;schen?'; $lng['question']['admin_customer_alsoremovefiles'] = 'Auch Kunden-Daten l&ouml;schen?';
$lng['question']['admin_customer_alsoremovemail'] = 'E-Mail Daten auf dem Dateisystem l&ouml;schen?';
/** /**
* Mails * Mails
@@ -1069,7 +1070,7 @@ $lng['aps']['nospecialchars'] = 'Sonderzeichen sind im Suchausdruck nicht erlaub
$lng['aps']['noitemsfound'] = 'Es wurden keine Pakete gefunden!'; $lng['aps']['noitemsfound'] = 'Es wurden keine Pakete gefunden!';
$lng['aps']['nopackagesinstalled'] = 'Sie haben noch kein Paket installiert welches angezeigt werden k&ouml;nnte.'; $lng['aps']['nopackagesinstalled'] = 'Sie haben noch kein Paket installiert welches angezeigt werden k&ouml;nnte.';
$lng['aps']['instance_install'] = 'Paket wurde zur Installation vorgemerkt'; $lng['aps']['instance_install'] = 'Paket wurde zur Installation vorgemerkt';
$lng['aps']['instance_task_active'] = 'Paket wird gerade installiert'; $lng['aps']['instance_task_active'] = 'Paket wird gerade bearbeitet';
$lng['aps']['instance_success'] = 'Paket ist installiert bzw. wurde erfolgreich installiert'; $lng['aps']['instance_success'] = 'Paket ist installiert bzw. wurde erfolgreich installiert';
$lng['aps']['instance_error'] = 'Paket ist nicht installiert - bei der Installation traten Fehler auf'; $lng['aps']['instance_error'] = 'Paket ist nicht installiert - bei der Installation traten Fehler auf';
$lng['aps']['instance_uninstall'] = 'Paket wurde zur Deinstallation vorgemerkt'; $lng['aps']['instance_uninstall'] = 'Paket wurde zur Deinstallation vorgemerkt';
@@ -1406,4 +1407,8 @@ $lng['tasks']['aps_task_upgrade'] = 'Upgrade eines oder mehrerer APS Pakete';
$lng['tasks']['aps_task_sysupdate'] = 'Aktualisiere alle APS Pakete'; $lng['tasks']['aps_task_sysupdate'] = 'Aktualisiere alle APS Pakete';
$lng['tasks']['aps_task_sysdownload'] = 'Herunterladen neuer APS Pakete'; $lng['tasks']['aps_task_sysdownload'] = 'Herunterladen neuer APS Pakete';
// ADDED IN FROXLOR 0.9.9-svn1
$lng['serversettings']['mail_also_with_mxservers'] = 'Erstelle mail-, imap-, pop3- and smtp-"A Record" auch wenn MX-Server angegeben sind';
?> ?>

View File

@@ -225,6 +225,17 @@ class bind
{ {
$zonefile.= '@ IN MX ' . trim($mxserver) . "\n"; $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";
}
}
} }
/* /*

View File

@@ -677,7 +677,7 @@ class apache
} }
} }
mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true); mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true, true);
$vhost_content.= $this->getWebroot($domain); $vhost_content.= $this->getWebroot($domain);
$vhost_content.= $this->composePhpOptions($domain); $vhost_content.= $this->composePhpOptions($domain);
$vhost_content.= $this->getStats($domain); $vhost_content.= $this->getStats($domain);

View File

@@ -283,10 +283,18 @@ class lighttpd
if((int)$domain['parentdomainid'] == 0) if((int)$domain['parentdomainid'] == 0)
{ {
$vhost_no = '51'; $vhost_no = '51';
if($ssl == '1')
{
$vhost_no = '61';
}
} }
else else
{ {
$vhost_no = '50'; $vhost_no = '50';
if($ssl == '1')
{
$vhost_no = '60';
}
} }
$vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'].'/vhosts/'.$vhost_no.'_'.$domain['domain'].'.conf'); $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'].'/vhosts/'.$vhost_no.'_'.$domain['domain'].'.conf');
@@ -368,15 +376,23 @@ class lighttpd
} }
else else
{ {
mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid'], true); 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); $vhost_content.= $this->getWebroot($domain, $ssl_vhost);
if(!$only_webroot)
{
$vhost_content.= $this->create_htaccess($domain); $vhost_content.= $this->create_htaccess($domain);
$vhost_content.= $this->create_pathOptions($domain); $vhost_content.= $this->create_pathOptions($domain);
$vhost_content.= $this->composePhpOptions($domain); $vhost_content.= $this->composePhpOptions($domain);
$vhost_content.= $this->getStats($domain); $vhost_content.= $this->getStats($domain);
$vhost_content.= $this->getLogFiles($domain); $vhost_content.= $this->getLogFiles($domain);
} }
}
if ($domain['specialsettings'] != "") { if ($domain['specialsettings'] != "") {
$vhost_content.= $domain['specialsettings'] . "\n"; $vhost_content.= $domain['specialsettings'] . "\n";

View File

@@ -213,7 +213,7 @@ $awstatsclean['headerold']) {
/* /*
* remove homedir * remove homedir
*/ */
$homedir = makeCorrectDir($settings['system']['documentroot_prefix'] . $row['data']['loginname']); $homedir = makeCorrectDir($settings['system']['documentroot_prefix'] . '/' . $row['data']['loginname']);
if($homedir != '/' if($homedir != '/'
&& $homedir != $settings['system']['documentroot_prefix'] && $homedir != $settings['system']['documentroot_prefix']
@@ -226,7 +226,7 @@ $awstatsclean['headerold']) {
/* /*
* remove maildir * remove maildir
*/ */
$maildir = makeCorrectDir($settings['system']['vmail_homedir'] . $row['data']['loginname']); $maildir = makeCorrectDir($settings['system']['vmail_homedir'] . '/' . $row['data']['loginname']);
if($maildir != '/' if($maildir != '/'
&& $maildir != $settings['system']['vmail_homedir'] && $maildir != $settings['system']['vmail_homedir']
@@ -269,6 +269,35 @@ $awstatsclean['headerold']) {
} }
} }
} }
/**
* TYPE=7 Customer deleted an email account and wants the data to be deleted on the filesystem
*/
elseif ($row['type'] == '7')
{
fwrite($debugHandler, ' cron_tasks: Task7 started - deleting customer e-mail data' . "\n");
$cronlog->logAction(CRON_ACTION, LOG_INFO, 'Task7 started - deleting customer e-mail data');
if(is_array($row['data']))
{
if(isset($row['data']['loginname'])
&& isset($row['data']['email'])
) {
/*
* remove specific maildir
*/
$maildir = makeCorrectDir($settings['system']['vmail_homedir'] .'/'. $row['data']['loginname'] .'/'. $row['data']['email']);
if($maildir != '/'
&& $maildir != $settings['system']['vmail_homedir']
&& substr($maildir, 0, strlen($settings['system']['vmail_homedir'])) == $settings['system']['vmail_homedir'])
{
$cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: rm -rf ' . escapeshellarg($maildir));
safe_exec('rm -rf '.escapeshellarg($maildir));
}
}
}
}
} }
if($db->num_rows($result_tasks) != 0) if($db->num_rows($result_tasks) != 0)

View File

@@ -17,6 +17,48 @@
* @version $Id$ * @version $Id$
*/ */
/**
* chowns either awstats or webalizer folder,
* either with webserver-user or - if fcgid
* is used - the customers name, #258
*
* @param array $row array if panel_customers
*
* @return void
*/
function makeChownWithNewStats($row)
{
global $settings;
// get correct user
if($settings['system']['mod_fcgid'] == 1)
{
$user = $row['loginname'];
$group = $row['loginname'];
}
else
{
$user = $row['guid'];
$group = $row['guid'];
}
// get correct directory
$dir = $row['documentroot'];
if($settings['system']['awstats_enabled'] == '1')
{
$dir .= '/awstats/';
} else {
$dir .= '/webalizer/';
}
// only run chown if directory exists
if (file_exists($dir))
{
// run chown
safe_exec('chown -R '.escapeshellarg($user).':'.escapeshellarg($group).' '.escapeshellarg(makeCorrectDir($dir)));
}
}
function awstatsDoSingleDomain($domain, $outputdir) function awstatsDoSingleDomain($domain, $outputdir)
{ {
global $cronlog, $settings; global $cronlog, $settings;

View File

@@ -191,6 +191,9 @@ while($row = $db->fetch_array($result))
{ {
$httptraffic+= floatval(callWebalizerGetTraffic($row['loginname'], $row['documentroot'] . '/webalizer/', $caption, $domainlist[$row['customerid']])); $httptraffic+= floatval(callWebalizerGetTraffic($row['loginname'], $row['documentroot'] . '/webalizer/', $caption, $domainlist[$row['customerid']]));
} }
// make the stuff readable for the customer, #258
makeChownWithNewStats($row);
} }
/** /**

View File

@@ -33,7 +33,7 @@ url.access-deny = ("~", ".inc")
fastcgi.server = ( fastcgi.server = (
".php" => ( ".php" => (
"localhost" => ( "localhost" => (
"socket" => "<CUSTOMER_TMP>lighttpd-fcgi-sock-lighttpd", "socket" => "/tmp/lighttpd-fcgi-sock-lighttpd",
"broken-scriptfilename" => "enable", "broken-scriptfilename" => "enable",
"bin-path" => "/usr/bin/php5-cgi", "bin-path" => "/usr/bin/php5-cgi",
"min-procs" => 1, "min-procs" => 1,

View File

@@ -33,7 +33,7 @@ url.access-deny = ("~", ".inc")
fastcgi.server = ( fastcgi.server = (
".php" => ( ".php" => (
"localhost" => ( "localhost" => (
"socket" => "<CUSTOMER_TMP>lighttpd-fcgi-sock-lighttpd", "socket" => "/tmp/lighttpd-fcgi-sock-lighttpd",
"broken-scriptfilename" => "enable", "broken-scriptfilename" => "enable",
"bin-path" => "/usr/bin/php5-cgi", "bin-path" => "/usr/bin/php5-cgi",
"min-procs" => 1, "min-procs" => 1,

View File

@@ -31,11 +31,12 @@ server.bind = "<SERVERIP>"
url.access-deny = ("~", ".inc") url.access-deny = ("~", ".inc")
include "mime-types.conf" include "mime-types.conf"
#include "mod_cgi.conf"
fastcgi.server = ( fastcgi.server = (
".php" => ( ".php" => (
"localhost" => ( "localhost" => (
"socket" => "<CUSTOMER_TMP>lighttpd-fcgi-sock-lighttpd", "socket" => "/tmp/lighttpd-fcgi-sock-lighttpd",
"broken-scriptfilename" => "enable", "broken-scriptfilename" => "enable",
"bin-path" => "/usr/bin/php-cgi", "bin-path" => "/usr/bin/php-cgi",
"min-procs" => 1, "min-procs" => 1,

View File

@@ -33,7 +33,7 @@ url.access-deny = ("~", ".inc")
fastcgi.server = ( fastcgi.server = (
".php" => ( ".php" => (
"localhost" => ( "localhost" => (
"socket" => "<CUSTOMER_TMP>lighttpd-fcgi-sock-lighttpd", "socket" => "/tmp/lighttpd-fcgi-sock-lighttpd",
"broken-scriptfilename" => "enable", "broken-scriptfilename" => "enable",
"bin-path" => "/usr/bin/php5-cgi", "bin-path" => "/usr/bin/php5-cgi",
"min-procs" => 1, "min-procs" => 1,

View File

@@ -33,7 +33,7 @@ url.access-deny = ("~", ".inc")
fastcgi.server = ( fastcgi.server = (
".php" => ( ".php" => (
"localhost" => ( "localhost" => (
"socket" => "<CUSTOMER_TMP>lighttpd-fcgi-sock-lighttpd", "socket" => "/tmp/lighttpd-fcgi-sock-lighttpd",
"broken-scriptfilename" => "enable", "broken-scriptfilename" => "enable",
"bin-path" => "/usr/bin/php5-cgi", "bin-path" => "/usr/bin/php5-cgi",
"min-procs" => 1, "min-procs" => 1,