From ba747c0be201755bed0e36e02edfb85d31f5214f Mon Sep 17 00:00:00 2001 From: tbrehm Date: Wed, 30 May 2007 14:11:32 +0000 Subject: [PATCH] Enhanced getmail support and the installer. --- install/install.php | 20 +- install/lib/installer_base.lib.php | 26 +- install/tpl/config.inc.php.master | 12 + install/uninstall.php | 45 ++++ interface/lib/classes/tform.inc.php | 19 +- interface/web/admin/form/server.tform.php | 25 ++ interface/web/admin/lib/lang/en_server.lng | 23 +- .../admin/templates/server_edit_config.htm | 16 ++ .../client/templates/client_edit_limits.htm | 2 + interface/web/mail/lib/lang/en_mail_get.lng | 22 +- .../web/mail/lib/lang/en_mail_get_list.lng | 27 +- .../mail/lib/lang/en_spamfilter_policy.lng | 78 +++--- interface/web/mail/lib/module.conf.php | 235 +++++++++--------- interface/web/mail/mail_user_edit.php | 6 +- server/lib/app.inc.php | 2 +- server/lib/classes/getconf.inc.php | 60 +++++ server/plugins-enabled/getmail_plugin.inc.php | 13 +- server/scripts/getmail.sh | 2 + server/server.php | 2 +- 19 files changed, 418 insertions(+), 217 deletions(-) create mode 100644 install/uninstall.php create mode 100644 interface/web/admin/templates/server_edit_config.htm create mode 100644 server/lib/classes/getconf.inc.php create mode 100644 server/scripts/getmail.sh diff --git a/install/install.php b/install/install.php index 39ad865f9..1805ef310 100644 --- a/install/install.php +++ b/install/install.php @@ -86,7 +86,11 @@ $inst->configure_spamassassin(); swriteln('Configuring Amavisd'); $inst->configure_amavis(); -// Configure Amavis +// Configure Getmail +swriteln('Configuring Getmail'); +$inst->configure_getmail(); + +// Configure ISPConfig swriteln('Installing ISPConfig'); $inst->install_ispconfig(); @@ -101,11 +105,19 @@ postfix amavisd calmd spamd - - - */ +exec("/etc/init.d/mysql restart"); +exec("/etc/init.d/postfix restart"); +exec("/etc/init.d/saslauthd restart"); +exec("/etc/init.d/amavis restart"); +exec("/etc/init.d/clamav-daemon restart"); +exec("/etc/init.d/courier-authdaemon restart"); +exec("/etc/init.d/courier-imap restart"); +exec("/etc/init.d/courier-imap-ssl restart"); +exec("/etc/init.d/courier-pop restart"); +exec("/etc/init.d/courier-pop-ssl restart"); + echo "Installation finished.\n"; diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 9c89a7ca0..a4c5a2b46 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -439,6 +439,16 @@ postfix check wf($configfile,$content); } + function configure_getmail() { + global $conf; + + $command = "useradd -b /etc/getmail -d /etc/getmail getmail"; + caselog($command." &> /dev/null", __FILE__, __LINE__,"EXECUTED: ".$command,"Failed to execute the command ".$command); + + $command = "chmod -R 700 /etc/getmail"; + caselog($command." &> /dev/null", __FILE__, __LINE__,"EXECUTED: ".$command,"Failed to execute the command ".$command); + } + function install_ispconfig() { global $conf; @@ -466,7 +476,7 @@ postfix check $command = "ln -s ".$conf["ispconfig_install_dir"]."/interface/web/ /var/www/ispconfig"; caselog($command." &> /dev/null", __FILE__, __LINE__,"EXECUTED: ".$command,"Failed to execute the command ".$command); - // Create the config file for ISPConfig + // Create the config file for ISPConfig interface $configfile = 'config.inc.php'; if(is_file($conf["ispconfig_install_dir"].'/interface/lib/'.$configfile)) copy($conf["ispconfig_install_dir"].'/interface/lib/'.$configfile,$conf["ispconfig_install_dir"].'/interface/lib/'.$configfile.'~'); $content = rf("tpl/".$configfile.".master"); @@ -476,6 +486,17 @@ postfix check $content = str_replace('{mysql_server_host}',$conf["mysql_server_host"],$content); wf($conf["ispconfig_install_dir"].'/interface/lib/'.$configfile,$content); + // Create the config file for ISPConfig server + $configfile = 'config.inc.php'; + if(is_file($conf["ispconfig_install_dir"].'/server/lib/'.$configfile)) copy($conf["ispconfig_install_dir"].'/server/lib/'.$configfile,$conf["ispconfig_install_dir"].'/interface/lib/'.$configfile.'~'); + $content = rf("tpl/".$configfile.".master"); + $content = str_replace('{mysql_server_ispconfig_user}',$conf["mysql_server_ispconfig_user"],$content); + $content = str_replace('{mysql_server_ispconfig_password}',$conf["mysql_server_ispconfig_password"],$content); + $content = str_replace('{mysql_server_database}',$conf["mysql_server_database"],$content); + $content = str_replace('{mysql_server_host}',$conf["mysql_server_host"],$content); + wf($conf["ispconfig_install_dir"].'/server/lib/'.$configfile,$content); + + // Chmod the files $command = "chmod -R 750 ".$conf["ispconfig_install_dir"]; caselog($command." &> /dev/null", __FILE__, __LINE__,"EXECUTED: ".$command,"Failed to execute the command ".$command); @@ -491,6 +512,9 @@ postfix check $command = "adduser www-data ispconfig"; caselog($command." &> /dev/null", __FILE__, __LINE__,"EXECUTED: ".$command,"Failed to execute the command ".$command); + // Make the shell scripts executable + $command = "chmod +x ".$conf["ispconfig_install_dir"]."/server/scripts/*.sh"; + caselog($command." &> /dev/null", __FILE__, __LINE__,"EXECUTED: ".$command,"Failed to execute the command ".$command); } diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master index 79150295e..5bf2aed23 100644 --- a/install/tpl/config.inc.php.master +++ b/install/tpl/config.inc.php.master @@ -35,6 +35,7 @@ ini_set('register_globals',0); $conf["app_title"] = "ISPConfig"; $conf["app_version"] = "3.0.0"; +$conf["server_id"] = "1"; /* @@ -69,6 +70,13 @@ define("DB_DATABASE",$conf["db_database"]); define("DB_USER",$conf["db_user"]); define("DB_PASSWORD",$conf["db_password"]); +/* + Logging +*/ + +$conf["log_file"] = $conf["rootpath"].$conf["fs_div"]."ispconfig.log"; +$conf["log_priority"] = 0; // 0 = Debug, 1 = Warning, 2 = Error + /* Themes */ @@ -104,4 +112,8 @@ $conf["default_retry"] = 7200; $conf["default_expire"] = 604800; $conf["default_minimum_ttl"] = 86400; +define("LOGLEVEL_DEBUG",0); +define("LOGLEVEL_WARN",1); +define("LOGLEVEL_ERROR",2); + ?> \ No newline at end of file diff --git a/install/uninstall.php b/install/uninstall.php new file mode 100644 index 000000000..9a1702e46 --- /dev/null +++ b/install/uninstall.php @@ -0,0 +1,45 @@ +db->query('DROP DATABASE '.$conf["db_database"]); + +// Deleting the symlink in /var/www +unlink("/var/www/ispconfig"); + +// Delete the ispconfig files +exec('rm -rf /usr/local/ispconfig'); + +echo "Finished.\n"; + +?> \ No newline at end of file diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php index ca6e59451..a9ae437ce 100644 --- a/interface/lib/classes/tform.inc.php +++ b/interface/lib/classes/tform.inc.php @@ -875,14 +875,17 @@ class tform { } function getAuthSQL($perm) { - - $sql = '('; - $sql .= "(sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND sys_perm_user like '%$perm%') OR "; - $sql .= "(sys_groupid IN (".$_SESSION["s"]["user"]["groups"].") AND sys_perm_group like '%$perm%') OR "; - $sql .= "sys_perm_other like '%$perm%'"; - $sql .= ')'; - - return $sql; + if($_SESSION["s"]["user"]["typ"] == 'admin') { + return '1'; + } else { + $sql = '('; + $sql .= "(sys_userid = ".$_SESSION["s"]["user"]["userid"]." AND sys_perm_user like '%$perm%') OR "; + $sql .= "(sys_groupid IN (".$_SESSION["s"]["user"]["groups"].") AND sys_perm_group like '%$perm%') OR "; + $sql .= "sys_perm_other like '%$perm%'"; + $sql .= ')'; + + return $sql; + } } /* diff --git a/interface/web/admin/form/server.tform.php b/interface/web/admin/form/server.tform.php index 968218076..f4ebd4c77 100644 --- a/interface/web/admin/form/server.tform.php +++ b/interface/web/admin/form/server.tform.php @@ -123,4 +123,29 @@ $form["tabs"]['services'] = array ( ); +$form["tabs"]['config'] = array ( + 'title' => "Config", + 'width' => 100, + 'template' => "templates/server_edit_config.htm", + 'fields' => array ( + ################################## + # Begin Datatable fields + ################################## + 'config' => array ( + 'datatype' => 'TEXT', + 'formtype' => 'TEXTAREA', + 'default' => '', + 'value' => '', + 'width' => '', + 'cols' => '40', + 'rows' => '20', + 'maxlength' => '' + ), + ################################## + # ENDE Datatable fields + ################################## + ) +); + + ?> \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_server.lng b/interface/web/admin/lib/lang/en_server.lng index b8f1acf0d..f98f66853 100644 --- a/interface/web/admin/lib/lang/en_server.lng +++ b/interface/web/admin/lib/lang/en_server.lng @@ -1,12 +1,13 @@ - \ No newline at end of file diff --git a/interface/web/admin/templates/server_edit_config.htm b/interface/web/admin/templates/server_edit_config.htm new file mode 100644 index 000000000..3e1a335d2 --- /dev/null +++ b/interface/web/admin/templates/server_edit_config.htm @@ -0,0 +1,16 @@ + + + + + + + + + + + + +
{tmpl_var name='config_txt'}:
  
 
  +
+
+ \ No newline at end of file diff --git a/interface/web/client/templates/client_edit_limits.htm b/interface/web/client/templates/client_edit_limits.htm index 21c9690f5..be92c42ec 100644 --- a/interface/web/client/templates/client_edit_limits.htm +++ b/interface/web/client/templates/client_edit_limits.htm @@ -34,10 +34,12 @@ {tmpl_var name='limit_mailrouting_txt'}: + {tmpl_var name='limit_fetchmail_txt'}: diff --git a/interface/web/mail/lib/lang/en_mail_get.lng b/interface/web/mail/lib/lang/en_mail_get.lng index f6d37315f..f6828af7a 100644 --- a/interface/web/mail/lib/lang/en_mail_get.lng +++ b/interface/web/mail/lib/lang/en_mail_get.lng @@ -1,12 +1,12 @@ - \ No newline at end of file diff --git a/interface/web/mail/lib/lang/en_mail_get_list.lng b/interface/web/mail/lib/lang/en_mail_get_list.lng index 11a4d02f7..94fdb0645 100644 --- a/interface/web/mail/lib/lang/en_mail_get_list.lng +++ b/interface/web/mail/lib/lang/en_mail_get_list.lng @@ -1,14 +1,15 @@ - \ No newline at end of file diff --git a/interface/web/mail/lib/lang/en_spamfilter_policy.lng b/interface/web/mail/lib/lang/en_spamfilter_policy.lng index 879c2cbee..bf5d94315 100644 --- a/interface/web/mail/lib/lang/en_spamfilter_policy.lng +++ b/interface/web/mail/lib/lang/en_spamfilter_policy.lng @@ -1,40 +1,40 @@ - \ No newline at end of file diff --git a/interface/web/mail/lib/module.conf.php b/interface/web/mail/lib/module.conf.php index a7c7e1ca0..5cf745524 100644 --- a/interface/web/mail/lib/module.conf.php +++ b/interface/web/mail/lib/module.conf.php @@ -1,123 +1,114 @@ - 'mail', - 'title' => 'Email', - 'template' => 'module.tpl.htm', - 'navframe_page' => '', - 'startpage' => 'mail/mail_domain_list.php', - 'tab_width' => '', - 'nav' => - array ( - 0 => - array ( - 'title' => 'Email Accounts', - 'open' => 1, - 'items' => - array ( - 0 => - array ( - 'title' => 'Domain', - 'target' => 'content', - 'link' => 'mail/mail_domain_list.php', - ), - 3 => - array ( - 'title' => 'Email Mailbox', - 'target' => 'content', - 'link' => 'mail/mail_user_list.php', - ), - 4 => - array ( - 'title' => 'Email Alias', - 'target' => 'content', - 'link' => 'mail/mail_alias_list.php', - ), - 5 => - array ( - 'title' => 'Email Forward', - 'target' => 'content', - 'link' => 'mail/mail_forward_list.php', - ), - 6 => - array ( - 'title' => 'Email Catchall', - 'target' => 'content', - 'link' => 'mail/mail_domain_catchall_list.php', - ), - 7 => - array ( - 'title' => 'Email Routing', - 'target' => 'content', - 'link' => 'mail/mail_transport_list.php', - ), - ), - ), - 1 => - array ( - 'title' => 'Email Filter', - 'open' => 1, - 'items' => - array ( - 0 => - array ( - 'title' => 'Whitelist', - 'target' => 'content', - 'link' => 'mail/mail_whitelist_list.php', - ), - 1 => - array ( - 'title' => 'Blacklist', - 'target' => 'content', - 'link' => 'mail/mail_blacklist_list.php', - ), - ), - ), - 2 => - array ( - 'title' => 'Spamfilter', - 'open' => 1, - 'items' => - array ( - 0 => - array ( - 'title' => 'Whitelist', - 'target' => 'content', - 'link' => 'mail/spamfilter_whitelist_list.php', - ), - 1 => - array ( - 'title' => 'Blacklist', - 'target' => 'content', - 'link' => 'mail/spamfilter_blacklist_list.php', - ), - 2 => - array ( - 'title' => 'User', - 'target' => 'content', - 'link' => 'mail/spamfilter_users_list.php', - ), - 3 => - array ( - 'title' => 'Policy', - 'target' => 'content', - 'link' => 'mail/spamfilter_policy_list.php', - ), - ), - ), - 3 => - array ( - 'title' => 'Fetchmail', - 'open' => 1, - 'items' => - array ( - 0 => - array ( - 'title' => 'Fetchmail', - 'target' => 'content', - 'link' => 'mail/mail_get_list.php', - ), - ), - ), - ), -) + "Domain", + 'target' => 'content', + 'link' => 'mail/mail_domain_list.php'); + +$items[] = array( 'title' => "Email Mailbox", + 'target' => 'content', + 'link' => 'mail/mail_user_list.php'); + +$items[] = array( 'title' => "Email Alias", + 'target' => 'content', + 'link' => 'mail/mail_alias_list.php'); + +$items[] = array( 'title' => "Email Forward", + 'target' => 'content', + 'link' => 'mail/mail_forward_list.php'); + +$items[] = array( 'title' => "Email Catchall", + 'target' => 'content', + 'link' => 'mail/mail_domain_catchall_list.php'); + +$items[] = array( 'title' => "Email Routing", + 'target' => 'content', + 'link' => 'mail/mail_transport_list.php'); + +$module["nav"][] = array( 'title' => 'Email Accounts', + 'open' => 1, + 'items' => $items); + +// aufräumen +unset($items); + +/* + Spamfilter menu +*/ + +$items[] = array( 'title' => "Whitelist", + 'target' => 'content', + 'link' => 'mail/spamfilter_whitelist_list.php'); + +$items[] = array( 'title' => "Blacklist", + 'target' => 'content', + 'link' => 'mail/spamfilter_blacklist_list.php'); + +if($_SESSION["s"]["user"]["typ"] == 'admin') { + + $items[] = array( 'title' => "User / Domain", + 'target' => 'content', + 'link' => 'mail/spamfilter_users_list.php'); + + $items[] = array( 'title' => "Policy", + 'target' => 'content', + 'link' => 'mail/spamfilter_policy_list.php'); +} + +$module["nav"][] = array( 'title' => 'Spamfilter', + 'open' => 1, + 'items' => $items); + +// aufräumen +unset($items); + +/* + Fetchmail menu +*/ + + +$items[] = array( 'title' => "Fetchmail", + 'target' => 'content', + 'link' => 'mail/mail_get_list.php'); + + +$module["nav"][] = array( 'title' => 'Fetchmail', + 'open' => 1, + 'items' => $items); + +// aufräumen +unset($items); + +/* + Global filters menu +*/ + +if($_SESSION["s"]["user"]["typ"] == 'admin') { + + $items[] = array( 'title' => "Whitelist", + 'target' => 'content', + 'link' => 'mail/mail_whitelist_list.php'); + + $items[] = array( 'title' => "Blacklist", + 'target' => 'content', + 'link' => 'mail/mail_blacklist_list.php'); + + $module["nav"][] = array( 'title' => 'Global Filters', + 'open' => 1, + 'items' => $items); + + // aufräumen + unset($items); +} + + ?> \ No newline at end of file diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php index d611e23ac..4659d8758 100644 --- a/interface/web/mail/mail_user_edit.php +++ b/interface/web/mail/mail_user_edit.php @@ -96,7 +96,7 @@ class page_action extends tform_actions { $app->tpl->setVar("email_domain",$domain_select); // Convert quota from Bytes to MB - $app->tpl->setVar("quota",$this->dataRecord["quota"] / 1024); + $app->tpl->setVar("quota",$this->dataRecord["quota"] / 1024/ 1024); parent::onShowEnd(); } @@ -133,7 +133,7 @@ class page_action extends tform_actions { // Check the quota and adjust if($client["limit_mailquota"] >= 0) { $tmp = $app->db->queryOneRecord("SELECT sum(quota) as mailquota FROM mail_user WHERE mailuser_id != ".intval($this->id)." AND sys_groupid = $client_group_id"); - $mailquota = $tmp["mailquota"] / 1024; + $mailquota = $tmp["mailquota"] / 1024 / 1024; $new_mailbox_quota = intval($this->dataRecord["quota"]); if($mailquota + $new_mailbox_quota > $client["limit_mailquota"]) { $max_free_quota = $client["limit_mailquota"] - $mailquota; @@ -156,7 +156,7 @@ class page_action extends tform_actions { unset($this->dataRecord["email_domain"]); // Convert quota from MB to Bytes - $this->dataRecord["quota"] = $this->dataRecord["quota"] * 1024; + $this->dataRecord["quota"] = $this->dataRecord["quota"] * 1024 * 1024; // setting Maildir, Homedir, UID and GID $app->uses('getconf'); diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php index dd52be176..e8e9b9389 100644 --- a/server/lib/app.inc.php +++ b/server/lib/app.inc.php @@ -104,7 +104,7 @@ class app { if (!fwrite($fp, date("d.m.Y-H:i")." - ".$priority_txt." - ". $msg."\r\n")) { die("Unable to write to logfile."); } - echo date("d.m.Y-H:i")." - ".$priority_txt." - ". $msg."
"; + echo date("d.m.Y-H:i")." - ".$priority_txt." - ". $msg."
\n"; fclose($fp); //} else { diff --git a/server/lib/classes/getconf.inc.php b/server/lib/classes/getconf.inc.php new file mode 100644 index 000000000..fd0c08864 --- /dev/null +++ b/server/lib/classes/getconf.inc.php @@ -0,0 +1,60 @@ +config[$server_id])) { + $app->uses('ini_parser'); + $server_id = intval($server_id); + $server = $app->db->queryOneRecord("SELECT config FROM server WHERE server_id = $server_id"); + $this->config[$server_id] = $app->ini_parser->parse_ini_string(stripslashes($server["config"])); + } + + if($section == '') { + return $this->config[$server_id]; + } else { + return $this->config[$server_id][$section]; + } + } + + function get_global_config() { + + die("not yet implemented"); + + } + +} + +?> \ No newline at end of file diff --git a/server/plugins-enabled/getmail_plugin.inc.php b/server/plugins-enabled/getmail_plugin.inc.php index cc18d2d94..65569d4bf 100644 --- a/server/plugins-enabled/getmail_plugin.inc.php +++ b/server/plugins-enabled/getmail_plugin.inc.php @@ -34,7 +34,7 @@ class getmail_plugin { var $class_name = 'getmail_plugin'; - var $getmail_config_dir = '/etc/getmail'; + var $getmail_config_dir = ''; /* This function is called when the plugin is loaded @@ -51,6 +51,8 @@ class getmail_plugin { $app->plugins->registerEvent('mail_get_update','getmail_plugin','update'); $app->plugins->registerEvent('mail_get_delete','getmail_plugin','delete'); + + } function insert($event_name,$data) { @@ -63,6 +65,11 @@ class getmail_plugin { function update($event_name,$data) { global $app, $conf; + // load the server specific configuration options for getmail + $app->uses("getconf"); + $getmail_config = $app->getconf->get_server_config($conf["server_id"], 'getmail'); + $this->getmail_config_dir = $getmail_config["getmail_config_dir"]; + // Check if the config directory exists. if(!is_dir($this->getmail_config_dir)) { $app->log("Getmail config directory '".$this->getmail_config_dir."' does not exist.",LOGLEVEL_ERROR); @@ -79,7 +86,7 @@ class getmail_plugin { } - if($data["new"]["source_active"] == 'y') { + if($data["new"]["active"] == 'y') { // Open master template $tpl = file_get_contents($conf["rootpath"].'/conf/getmail.conf.master'); @@ -101,7 +108,7 @@ class getmail_plugin { $tpl = str_replace('{SERVER}',$data["new"]["source_server"],$tpl); $tpl = str_replace('{USERNAME}',$data["new"]["source_username"],$tpl); $tpl = str_replace('{PASSWORD}',$data["new"]["source_password"],$tpl); - $tpl = str_replace('{DESTINATION}',$data["new"]["source_destination"],$tpl); + $tpl = str_replace('{DESTINATION}',$data["new"]["destination"],$tpl); // Write the config file. file_put_contents($config_file_path,$tpl); diff --git a/server/scripts/getmail.sh b/server/scripts/getmail.sh new file mode 100644 index 000000000..cf9160a04 --- /dev/null +++ b/server/scripts/getmail.sh @@ -0,0 +1,2 @@ +#!/bin/bash +getmail -g /etc/getmail/ -r /etc/getmail/*.conf \ No newline at end of file diff --git a/server/server.php b/server/server.php index b4973f894..89341eb8d 100644 --- a/server/server.php +++ b/server/server.php @@ -109,5 +109,5 @@ if($tmp_num_records > 0) { $app->log("Remove Lock: ".$conf["temppath"].$conf["fs_div"].".ispconfig_lock",LOGLEVEL_DEBUG); */ -die('finished.'); +die("finished.\n"); ?> \ No newline at end of file -- GitLab