From afee192d2a77afa1c11d25156d0a44df94e19aed Mon Sep 17 00:00:00 2001 From: A. Täffner <darkalex@firesplash.de> Date: Sat, 23 Jan 2016 07:30:37 -0500 Subject: [PATCH] fixed the cronjob and noticed a bug in ISPC but not able to report as FlySpray is offline --- server/plugins-available/mailman_plugin.inc.php | 129 +++++++++++++++++++++++++------------------ 1 files changed, 75 insertions(+), 54 deletions(-) diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php index fd2fa7a..b15cd73 100644 --- a/server/plugins-available/mailman_plugin.inc.php +++ b/server/plugins-available/mailman_plugin.inc.php @@ -29,108 +29,129 @@ */ class mailman_plugin { - + var $plugin_name = 'mailman_plugin'; var $class_name = 'mailman_plugin'; - - + + var $mailman_config_dir = '/etc/mailman/'; - + //* This function is called during ispconfig installation to determine // if a symlink shall be created for this plugin. function onInstall() { global $conf; - + if($conf['services']['mail'] == true) { return true; } else { return false; } - + } - + /* This function is called when the plugin is loaded */ - + function onLoad() { global $app; - + /* Register for the events */ - - $app->plugins->registerEvent('mail_mailinglist_insert','mailman_plugin','insert'); - $app->plugins->registerEvent('mail_mailinglist_update','mailman_plugin','update'); - $app->plugins->registerEvent('mail_mailinglist_delete','mailman_plugin','delete'); - - - + + $app->plugins->registerEvent('mail_mailinglist_insert', 'mailman_plugin', 'insert'); + $app->plugins->registerEvent('mail_mailinglist_update', 'mailman_plugin', 'update'); + $app->plugins->registerEvent('mail_mailinglist_delete', 'mailman_plugin', 'delete'); + + + } - - function insert($event_name,$data) { + + function insert($event_name, $data) { global $app, $conf; - + $this->update_config(); - - exec("/usr/lib/mailman/bin/newlist -u ".escapeshellcmd($data["new"]["domain"])." -e ".escapeshellcmd($data["new"]["domain"])." ".escapeshellcmd($data["new"]["listname"])." ".escapeshellcmd($data["new"]["email"])." ".escapeshellcmd($data["new"]["password"]).""); - - exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null'); - - $app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$app->db->quote($data["new"]['mailinglist_id'])); - + + $pid = exec("nohup /usr/lib/mailman/bin/newlist -u ".escapeshellcmd($data["new"]["domain"])." -e ".escapeshellcmd($data["new"]["domain"])." ".escapeshellcmd($data["new"]["listname"])." ".escapeshellcmd($data["new"]["email"])." ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 & echo $!;"); + // wait for /usr/lib/mailman/bin/newlist-call + $running = true; + do { + exec('ps -p '.intval($pid), $out); + if (count($out) ==1) $running=false; else sleep(1); + unset($out); + } while ($running); + unset($out); + if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman'); + if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman'); + exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &'); + + $app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']); + } - + // The purpose of this plugin is to rewrite the main.cf file - function update($event_name,$data) { - global $app, $conf; - - if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') { - exec("/usr/lib/mailman/bin/change_pw -l ".escapeshellcmd($data["new"]["listname"])." -p ".escapeshellcmd($data["new"]["password"]).""); - exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null'); - $app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ".$app->db->quote($data["new"]['mailinglist_id'])); - } - } - - function delete($event_name,$data) { + function update($event_name, $data) { global $app, $conf; $this->update_config(); + + if($data["new"]["password"] != $data["old"]["password"] && $data["new"]["password"] != '') { + exec("nohup /usr/lib/mailman/bin/change_pw -l ".escapeshellcmd($data["new"]["listname"])." -p ".escapeshellcmd($data["new"]["password"])." >/dev/null 2>&1 &"); + exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &'); + $app->db->query("UPDATE mail_mailinglist SET password = '' WHERE mailinglist_id = ?", $data["new"]['mailinglist_id']); + } - exec("/usr/lib/mailman/bin/rmlist -a ".escapeshellcmd($data["old"]["listname"])); - - exec($conf['init_scripts'] . '/' . 'mailman reload &> /dev/null'); - + if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman'); + if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman'); } - + + function delete($event_name, $data) { + global $app, $conf; + + $this->update_config(); + + exec("nohup /usr/lib/mailman/bin/rmlist -a ".escapeshellcmd($data["old"]["listname"])." >/dev/null 2>&1 &"); + + exec('nohup '.$conf['init_scripts'] . '/' . 'mailman reload >/dev/null 2>&1 &'); + + if(is_file('/var/lib/mailman/data/virtual-mailman')) exec('postmap /var/lib/mailman/data/virtual-mailman'); + if(is_file('/var/lib/mailman/data/transport-mailman')) exec('postmap /var/lib/mailman/data/transport-mailman'); + + } + function update_config() { global $app, $conf; - - copy($this->mailman_config_dir.'mm_cfg.py',$this->mailman_config_dir.'mm_cfg.py'); - + + copy($this->mailman_config_dir.'mm_cfg.py', $this->mailman_config_dir.'mm_cfg.py~'); + // load the server configuration options $app->uses('getconf'); $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); - + // load files - $content = file_get_contents($conf["rootpath"]."/conf/mm_cfg.py.master"); + if(file_exists($conf["rootpath"]."/conf-custom/mm_cfg.py.master")) { + $content = file_get_contents($conf["rootpath"]."/conf-custom/mm_cfg.py.master"); + } else { + $content = file_get_contents($conf["rootpath"]."/conf/mm_cfg.py.master"); + } $old_file = file_get_contents($this->mailman_config_dir."/mm_cfg.py"); - + $old_options = array(); - $lines = explode("\n", $old_file); + $lines = explode("\n", $old_file); foreach ($lines as $line) { if (strlen($line) && substr($line, 0, 1) != '#') { list($key, $value) = explode("=", $line); - if (!empty($value)) + if ($value && $value !== '') { $key = rtrim($key); $old_options[$key] = trim($value); } } } - + // create virtual_domains list $domainAll = $app->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain"); $virtual_domains = ''; @@ -141,11 +162,11 @@ else $virtual_domains .= ", '".$domain['domain']."'"; } - + $content = str_replace('{hostname}', $server_config['hostname'], $content); $content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content); $content = str_replace('{virtual_domains}', $virtual_domains, $content); - + file_put_contents($this->mailman_config_dir."/mm_cfg.py", $content); } -- Gitblit v1.9.1