From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sun, 10 Jul 2016 05:02:35 -0400
Subject: [PATCH] Merge branch 'stable-3.1'
---
server/plugins-available/mailman_plugin.inc.php | 123 +++++++++++++++++++++++-----------------
1 files changed, 70 insertions(+), 53 deletions(-)
diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php
index 5a4593a..b15cd73 100644
--- a/server/plugins-available/mailman_plugin.inc.php
+++ b/server/plugins-available/mailman_plugin.inc.php
@@ -29,89 +29,106 @@
*/
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
if(file_exists($conf["rootpath"]."/conf-custom/mm_cfg.py.master")) {
$content = file_get_contents($conf["rootpath"]."/conf-custom/mm_cfg.py.master");
@@ -119,22 +136,22 @@
$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 = '';
@@ -145,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