From bfa0da42269b1763044f6795f5a71c3c8336def3 Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Wed, 20 Jan 2010 09:16:45 +0000 Subject: [PATCH 01/19] branching for d00p From 209bd9f8d342798d1538830073ccf19fa8f26408 Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Wed, 20 Jan 2010 09:26:31 +0000 Subject: [PATCH 02/19] fixing open_basedir-directive when set to OFF; fixing -directive for FCGID; --- install/syscp.sql | 2 +- lng/english.lng.php | 1 + lng/german.lng.php | 1 + scripts/cron_tasks.inc.http.15.apache_fcgid.php | 6 ++++++ templates/admin/phpconfig/overview_add.tpl | 4 ++++ templates/admin/phpconfig/overview_edit.tpl | 4 ++++ 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/install/syscp.sql b/install/syscp.sql index 7bd60c1e..0e435977 100644 --- a/install/syscp.sql +++ b/install/syscp.sql @@ -841,7 +841,7 @@ CREATE TABLE `panel_phpconfigs` ( # Dumping data for table `panel_phpconfigs` # -INSERT INTO `panel_phpconfigs` (`id`, `description`, `binary`, `file_extensions`, `mod_fcgid_starter`, `mod_fcgid_maxrequests`, `phpsettings`) VALUES(1, 'Default Config', '/usr/bin/php-cgi', 'php', '-1', '-1', 'short_open_tag = On\r\nasp_tags = Off\r\nprecision = 14\r\noutput_buffering = 4096\r\nallow_call_time_pass_reference = Off\r\nsafe_mode = {SAFE_MODE}\r\nsafe_mode_gid = Off\r\nsafe_mode_include_dir = "{PEAR_DIR}"\r\nsafe_mode_allowed_env_vars = PHP_\r\nsafe_mode_protected_env_vars = LD_LIBRARY_PATH\r\nopen_basedir = "{OPEN_BASEDIR}"\r\ndisable_functions = exec,passthru,shell_exec,system,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate\r\ndisable_classes =\r\nexpose_php = Off\r\nmax_execution_time = 30\r\nmax_input_time = 60\r\nmemory_limit = 16M\r\npost_max_size = 16M\r\nerror_reporting = E_ALL & ~E_NOTICE\r\ndisplay_errors = On\r\ndisplay_startup_errors = Off\r\nlog_errors = On\r\nlog_errors_max_len = 1024\r\nignore_repeated_errors = Off\r\nignore_repeated_source = Off\r\nreport_memleaks = On\r\ntrack_errors = Off\r\nhtml_errors = Off\r\nvariables_order = "GPCS"\r\nregister_globals = Off\r\nregister_argc_argv = Off\r\ngpc_order = "GPC"\r\nmagic_quotes_gpc = Off\r\nmagic_quotes_runtime = Off\r\nmagic_quotes_sybase = Off\r\ninclude_path = ".:{PEAR_DIR}"\r\nenable_dl = Off\r\nfile_uploads = On\r\nupload_tmp_dir = "{TMP_DIR}"\r\nupload_max_filesize = 32M\r\nallow_url_fopen = Off\r\nsendmail_path = "/usr/sbin/sendmail -t -f {CUSTOMER_EMAIL}"\r\nsession.save_handler = files\r\nsession.save_path = "{TMP_DIR}"\r\nsession.use_cookies = 1\r\nsession.name = PHPSESSID\r\nsession.auto_start = 0\r\nsession.cookie_lifetime = 0\r\nsession.cookie_path = /\r\nsession.cookie_domain =\r\nsession.serialize_handler = php\r\nsession.gc_probability = 1\r\nsession.gc_divisor = 1000\r\nsession.gc_maxlifetime = 1440\r\nsession.bug_compat_42 = 0\r\nsession.bug_compat_warn = 1\r\nsession.referer_check =\r\nsession.entropy_length = 16\r\nsession.entropy_file = /dev/urandom\r\nsession.cache_limiter = nocache\r\nsession.cache_expire = 180\r\nsession.use_trans_sid = 0\r\nsuhosin.simulation = Off\r\nsuhosin.mail.protect = 1\r\n'); +INSERT INTO `panel_phpconfigs` (`id`, `description`, `binary`, `file_extensions`, `mod_fcgid_starter`, `mod_fcgid_maxrequests`, `phpsettings`) VALUES(1, 'Default Config', '/usr/bin/php-cgi', 'php', '-1', '-1', 'short_open_tag = On\r\nasp_tags = Off\r\nprecision = 14\r\noutput_buffering = 4096\r\nallow_call_time_pass_reference = Off\r\nsafe_mode = {SAFE_MODE}\r\nsafe_mode_gid = Off\r\nsafe_mode_include_dir = "{PEAR_DIR}"\r\nsafe_mode_allowed_env_vars = PHP_\r\nsafe_mode_protected_env_vars = LD_LIBRARY_PATH\r\n{OPEN_BASEDIR_C}open_basedir = "{OPEN_BASEDIR}"\r\ndisable_functions = exec,passthru,shell_exec,system,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate\r\ndisable_classes =\r\nexpose_php = Off\r\nmax_execution_time = 30\r\nmax_input_time = 60\r\nmemory_limit = 16M\r\npost_max_size = 16M\r\nerror_reporting = E_ALL & ~E_NOTICE\r\ndisplay_errors = On\r\ndisplay_startup_errors = Off\r\nlog_errors = On\r\nlog_errors_max_len = 1024\r\nignore_repeated_errors = Off\r\nignore_repeated_source = Off\r\nreport_memleaks = On\r\ntrack_errors = Off\r\nhtml_errors = Off\r\nvariables_order = "GPCS"\r\nregister_globals = Off\r\nregister_argc_argv = Off\r\ngpc_order = "GPC"\r\nmagic_quotes_gpc = Off\r\nmagic_quotes_runtime = Off\r\nmagic_quotes_sybase = Off\r\ninclude_path = ".:{PEAR_DIR}"\r\nenable_dl = Off\r\nfile_uploads = On\r\nupload_tmp_dir = "{TMP_DIR}"\r\nupload_max_filesize = 32M\r\nallow_url_fopen = Off\r\nsendmail_path = "/usr/sbin/sendmail -t -f {CUSTOMER_EMAIL}"\r\nsession.save_handler = files\r\nsession.save_path = "{TMP_DIR}"\r\nsession.use_cookies = 1\r\nsession.name = PHPSESSID\r\nsession.auto_start = 0\r\nsession.cookie_lifetime = 0\r\nsession.cookie_path = /\r\nsession.cookie_domain =\r\nsession.serialize_handler = php\r\nsession.gc_probability = 1\r\nsession.gc_divisor = 1000\r\nsession.gc_maxlifetime = 1440\r\nsession.bug_compat_42 = 0\r\nsession.bug_compat_warn = 1\r\nsession.referer_check =\r\nsession.entropy_length = 16\r\nsession.entropy_file = /dev/urandom\r\nsession.cache_limiter = nocache\r\nsession.cache_expire = 180\r\nsession.use_trans_sid = 0\r\nsuhosin.simulation = Off\r\nsuhosin.mail.protect = 1\r\n'); # -------------------------------------------------------- diff --git a/lng/english.lng.php b/lng/english.lng.php index 564704bc..0ddb161f 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -983,6 +983,7 @@ $lng['error']['info'] = 'Info'; $lng['admin']['phpconfig']['template_replace_vars'] = 'Variables that will be replaced in the configs'; $lng['admin']['phpconfig']['safe_mode'] = 'Will be replaced with the safe_mode setting of the domain.'; $lng['admin']['phpconfig']['pear_dir'] = 'Will be replaced with the global setting for the pear directory.'; +$lng['admin']['phpconfig']['open_basedir_c'] = 'Will insert a ; (semicolon) to comment-out/deactivate open_basedir when set'; $lng['admin']['phpconfig']['open_basedir'] = 'Will be replaced with the open_basedir setting of the domain.'; $lng['admin']['phpconfig']['tmp_dir'] = 'Will be replaced with the temporary directory of the domain.'; $lng['admin']['phpconfig']['open_basedir_global'] = 'Will be replaced with the global value of the path which will be attached to the open_basedir.'; diff --git a/lng/german.lng.php b/lng/german.lng.php index 8698348a..2849f6f9 100644 --- a/lng/german.lng.php +++ b/lng/german.lng.php @@ -986,6 +986,7 @@ $lng['error']['info'] = 'Info'; $lng['admin']['phpconfig']['template_replace_vars'] = 'Variablen, die in den Konfigurationen ersetzt werden'; $lng['admin']['phpconfig']['safe_mode'] = 'Wird mit der safe_mode Einstellung der Domain ersetzt.'; $lng['admin']['phpconfig']['pear_dir'] = 'Wird mit dem globalen Wert für das Include Verzeichnis ersetzt.'; +$lng['admin']['phpconfig']['open_basedir_c'] = 'Wird mit einem ; (Semikolon) ersetzt, um open_basedir auszukommentieren/deaktivieren, wenn eingestellt.'; $lng['admin']['phpconfig']['open_basedir'] = 'Wird mit der open_basedir Einstellung der Domain ersetzt.'; $lng['admin']['phpconfig']['tmp_dir'] = 'Wird mit der Einstellung für das temporäre Verzeichnis der Domain ersetzt.'; $lng['admin']['phpconfig']['open_basedir_global'] = 'Wird mit der globalen Einstellung des Pfades ersetzt, der dem open_basedir hinzugefügt wird.'; diff --git a/scripts/cron_tasks.inc.http.15.apache_fcgid.php b/scripts/cron_tasks.inc.http.15.apache_fcgid.php index 221abfdd..35c6dc3a 100644 --- a/scripts/cron_tasks.inc.http.15.apache_fcgid.php +++ b/scripts/cron_tasks.inc.http.15.apache_fcgid.php @@ -87,6 +87,8 @@ class apache_fcgid extends apache } $php_options_text.= ' Options +ExecCGI' . "\n"; + $php_options_text.= ' Order allow,deny' . "\n"; + $php_options_text.= ' allow from all' . "\n"; $php_options_text.= ' ' . "\n"; } @@ -161,9 +163,11 @@ class apache_fcgid extends apache // define the php.ini $openbasedir = ''; + $openbasedirc = ';'; if($domain['openbasedir'] == '1') { + $openbasedirc = ''; if($domain['openbasedir_path'] == '0') { $openbasedir = $domain['documentroot'] . ':' . $tmpdir . ':' . $this->settings['system']['mod_fcgid_peardir'] . ':' . $this->settings['system']['phpappendopenbasedir']; @@ -184,6 +188,7 @@ class apache_fcgid extends apache else { $openbasedir = 'none'; + $openbasedirc = ';'; } $admin = $this->getAdminData($domain['adminid']); @@ -191,6 +196,7 @@ class apache_fcgid extends apache 'SAFE_MODE' => ($domain['safemode'] == '0' ? 'Off' : 'On'), 'PEAR_DIR' => $this->settings['system']['mod_fcgid_peardir'], 'OPEN_BASEDIR' => $openbasedir, + 'OPEN_BASEDIR_C' => $openbasedirc, 'OPEN_BASEDIR_GLOBAL' => $this->settings['system']['phpappendopenbasedir'], 'TMP_DIR' => $tmpdir, 'CUSTOMER_EMAIL' => $domain['email'], diff --git a/templates/admin/phpconfig/overview_add.tpl b/templates/admin/phpconfig/overview_add.tpl index 9a6ca274..12406ba4 100644 --- a/templates/admin/phpconfig/overview_add.tpl +++ b/templates/admin/phpconfig/overview_add.tpl @@ -51,6 +51,10 @@ $header {PEAR_DIR} {$lng['admin']['phpconfig']['pear_dir']} + + {OPEN_BASEDIR_C} + {$lng['admin']['phpconfig']['open_basedir_c']} + {OPEN_BASEDIR} {$lng['admin']['phpconfig']['open_basedir']} diff --git a/templates/admin/phpconfig/overview_edit.tpl b/templates/admin/phpconfig/overview_edit.tpl index 458109f2..6e3b18e4 100644 --- a/templates/admin/phpconfig/overview_edit.tpl +++ b/templates/admin/phpconfig/overview_edit.tpl @@ -52,6 +52,10 @@ $header {PEAR_DIR} {$lng['admin']['phpconfig']['pear_dir']} + + {OPEN_BASEDIR_C} + {$lng['admin']['phpconfig']['open_basedir_c']} + {OPEN_BASEDIR} {$lng['admin']['phpconfig']['open_basedir']} From e7162b89027835368da51606609068daf10c3ebe Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Wed, 20 Jan 2010 09:55:30 +0000 Subject: [PATCH 03/19] added TODO-file; fixed syscp-bug #1246; fixed syscp-bug #1279; fixed syscp-bug #1283; --- TODO | 50 +++++++++++++++++++++ lib/classes/aps/class.ApsInstaller.php | 2 +- scripts/cron_tasks.inc.dns.10.bind.php | 12 ++--- scripts/cron_tasks.inc.http.20.lighttpd.php | 19 ++++++-- templates/admin/customers/customers_add.tpl | 2 +- templates/footer.tpl | 6 +-- templates/header.tpl | 8 ++-- 7 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 TODO diff --git a/TODO b/TODO new file mode 100644 index 00000000..fe0fa7a4 --- /dev/null +++ b/TODO @@ -0,0 +1,50 @@ + 0001282 Homedirs von Dovecot identisch + 0001274 Option to mark a Domain as Subdomain possible or not +FIXED 0001283 SysCP creating broken lighttpd config files + 0001213 APS class_apsinstaller.php on line 510 - error installing different apps + 0001272 Default Config for libnss incomplete (debian/lenny) +FIXED 0001281 Wrong open_basedir directive + 0001280 deb packet 1.4.2.1-2 fu*ked +FIXED 0001279 incorrect usage of escapeshellcmd + 0001269 AWStats RewriteRule is wrong + 0001278 Customer and domain directories are not created + 0001277 Apache Redirect => permanent 301 + 0001276 Bind Zones Not Updated on Nameserver Change + 0001275 Setting up Traffic limit is limited to 999 GB + 0001273 APS-Installer + 0001271 cant install the package magento + 0001270 xinet reltime update mistake + 0001268 SysCP Funktion: aktualisierung in Real-Time + 0001041 Customer should have access to his webserver logs. + 0001267 Domain-Aliases also create a HOST-entry + 0001266 Lighttpd has a internal limit of regex-hits which limits max amount of domain-aliases + 0001263 Cosmettic Change +WONTFIX 0001056 Need extra payment methods +WONTFIX 0001262 Currency type modification. +WONTFIX 0001257 Fee is recalculated with current contract data although interval is over + 0001255 Wrong path to usage statistics under domain settings + 0001261 No e-mail on 90% traffic + 0001260 2x F5 causes bigger fonts +WONTFIX 0001259 contract-changes optional with cron to the end of the interval +WONTFIX 0001258 Make invoices immediately + 0001120 Missing function to calculate the mail traffic + 0001236 the cron doesnt delete user directories + 0001244 customer view too wide for 1024x768 resolutions + 0001229 subdomains and Own vHost-Settings + 0001254 Installation no next button +FIXED 0001253 admin_customers.php line 803 / 804 contain the same + 0001252 Backup Cronjob for Customers + 0001250 Apache redirect to Umlautdomains does not work + 0001251 possibility to manage WebDAV config in SysCP + 0001249 SysCP SVN(!) settings loader doesn't load some settings +WONTFIX 0001248 blog.syscp.org + 0001042 Webalizer dir should not be deletable + 0001247 tab order problems at email forward mask +FIXED 0001246 wrong variable assigned in /templates/admin/customers/customers_add.tpl + 0001245 Password Protect /awstats/ when using awstats and fcgid + 0001156 Repairing use of awstats and awstats-icons with fcgi + 0001243 Wrong uid and gid for php-fcgi-starter + 0001242 When email qouta is enabled, you cannot add more resources to a client. + 0001241 Patch for facilate customizing syscp + 0001240 Wrong php.ini for subdomains with fastCGI + 0001239 awstats configs get cluttered up after domain deletion \ No newline at end of file diff --git a/lib/classes/aps/class.ApsInstaller.php b/lib/classes/aps/class.ApsInstaller.php index 54090107..7ddcf694 100644 --- a/lib/classes/aps/class.ApsInstaller.php +++ b/lib/classes/aps/class.ApsInstaller.php @@ -135,7 +135,7 @@ class ApsInstaller extends ApsParser chdir($this->RealPath . $this->DomainPath . '/install_scripts/'); $Return = array(); $ReturnStatus = 0; - $Return = safe_exec('php ' . escapeshellcmd($this->RealPath . $this->DomainPath . '/install_scripts/configure install'), $ReturnStatus); + $Return = safe_exec('php ' . escapeshellarg($this->RealPath . $this->DomainPath . '/install_scripts/configure install'), $ReturnStatus); if($ReturnStatus != 0) { diff --git a/scripts/cron_tasks.inc.dns.10.bind.php b/scripts/cron_tasks.inc.dns.10.bind.php index a8288390..33833f92 100644 --- a/scripts/cron_tasks.inc.dns.10.bind.php +++ b/scripts/cron_tasks.inc.dns.10.bind.php @@ -290,13 +290,13 @@ class bind $max_dkim_id = $this->db->query_first("SELECT MAX(`dkim_id`) as `max_dkim_id` FROM `" . TABLE_PANEL_DOMAINS . "`"); $domain['dkim_id'] = (int)$max_dkim_id['max_dkim_id'] + 1; $privkey_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/dkim_' . $domain['dkim_id'] . '.private'); - safe_exec('openssl genrsa -out ' . escapeshellcmd($privkey_filename) . ' 1024'); + safe_exec('openssl genrsa -out ' . escapeshellarg($privkey_filename) . ' 1024'); $domain['dkim_privkey'] = file_get_contents($privkey_filename); - safe_exec("chmod 0640 " . escapeshellcmd($privkey_filename)); + safe_exec("chmod 0640 " . escapeshellarg($privkey_filename)); $pubkey_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/dkim_' . $domain['dkim_id'] . '.public'); - safe_exec('openssl rsa -in ' . escapeshellcmd($privkey_filename) . ' -pubout -outform pem -out ' . escapeshellcmd($pubkey_filename)); + safe_exec('openssl rsa -in ' . escapeshellarg($privkey_filename) . ' -pubout -outform pem -out ' . escapeshellarg($pubkey_filename)); $domain['dkim_pubkey'] = file_get_contents($pubkey_filename); - safe_exec("chmod 0664 " . escapeshellcmd($pubkey_filename)); + safe_exec("chmod 0664 " . escapeshellarg($pubkey_filename)); $this->db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `dkim_id` = '" . $domain['dkim_id'] . "', `dkim_privkey` = '" . $domain['dkim_privkey'] . "', `dkim_pubkey` = '" . $domain['dkim_pubkey'] . "' WHERE `id` = '" . $domain['id'] . "'"); } @@ -306,7 +306,7 @@ class bind $privkey_file_handler = fopen($privkey_filename, "w"); fwrite($privkey_file_handler, $domain['dkim_privkey']); fclose($privkey_file_handler); - safe_exec("chmod 0640 " . escapeshellcmd($privkey_filename)); + safe_exec("chmod 0640 " . escapeshellarg($privkey_filename)); } if(!file_exists($pubkey_filename) @@ -315,7 +315,7 @@ class bind $pubkey_file_handler = fopen($pubkey_filename, "w"); fwrite($pubkey_file_handler, $domain['dkim_pubkey']); fclose($pubkey_file_handler); - safe_exec("chmod 0664 " . escapeshellcmd($pubkey_filename)); + safe_exec("chmod 0664 " . escapeshellarg($pubkey_filename)); } $dkimdomains.= $domain['domain'] . "\n"; diff --git a/scripts/cron_tasks.inc.http.20.lighttpd.php b/scripts/cron_tasks.inc.http.20.lighttpd.php index 2bff8ccb..b33b76a4 100644 --- a/scripts/cron_tasks.inc.http.20.lighttpd.php +++ b/scripts/cron_tasks.inc.http.20.lighttpd.php @@ -287,6 +287,9 @@ class lighttpd $query = "SELECT * FROM " . TABLE_PANEL_HTACCESS . " WHERE `path` LIKE '" . $domain['documentroot'] . "%'"; $result = $this->db->query($query); + $path_options = ''; + $error_string = ''; + while($row = $this->db->fetch_array($result)) { if(!empty($row['error404path'])) @@ -301,13 +304,21 @@ class lighttpd // We need to remove the last slash, otherwise the regex wouldn't work $path = substr($path, 0, -1); - $error_string.= '$HTTP["url"] =~ "^' . $path . '($|/)" {' . "\n"; - $error_string.= "\t" . 'dir-listing.activate = "enable"' . "\n"; - $error_string.= '}' . "\n"; + $path_options.= '$HTTP["url"] =~ "^' . $path . '($|/)" {' . "\n"; + $path_options.= "\t" . 'dir-listing.activate = "enable"' . "\n"; + if(!empty($error_string)) + { + $path_options.= $error_string; + } + $path_options.= '}' . "\n"; + } + else + { + $path_options = $error_string; } } - return $error_string; + return $path_options; } protected function getDirOptions($domain) diff --git a/templates/admin/customers/customers_add.tpl b/templates/admin/customers/customers_add.tpl index ff0cd898..1e0f3536 100644 --- a/templates/admin/customers/customers_add.tpl +++ b/templates/admin/customers/customers_add.tpl @@ -119,7 +119,7 @@ $header {$lng['customer']['email_quota']}: * -  {$diskspace_ul} +  {$email_quota_ul} diff --git a/templates/footer.tpl b/templates/footer.tpl index 9762ede7..8bc815e4 100644 --- a/templates/footer.tpl +++ b/templates/footer.tpl @@ -4,11 +4,11 @@