From 2d4bd4854790708d362984cf65f3c7ad5ed81482 Mon Sep 17 00:00:00 2001 From: tbrehm Date: Sat, 11 Aug 2007 17:47:59 +0000 Subject: [PATCH] Postfix filter plugin and postfix server configuration plugin. --- .../postfix_filter_plugin.inc.php | 140 ++++++++++++++++++ .../postfix_server_plugin.inc.php | 99 +++++++++++++ 2 files changed, 239 insertions(+) create mode 100644 server/plugins-enabled/postfix_filter_plugin.inc.php create mode 100644 server/plugins-enabled/postfix_server_plugin.inc.php diff --git a/server/plugins-enabled/postfix_filter_plugin.inc.php b/server/plugins-enabled/postfix_filter_plugin.inc.php new file mode 100644 index 0000000000..dcdbe9b93f --- /dev/null +++ b/server/plugins-enabled/postfix_filter_plugin.inc.php @@ -0,0 +1,140 @@ +plugins->registerEvent('mail_content_filter_insert','postfix_filter_plugin','insert'); + $app->plugins->registerEvent('mail_content_filter_update','postfix_filter_plugin','update'); + $app->plugins->registerEvent('mail_content_filter_delete','postfix_filter_plugin','delete'); + + + + } + + function insert($event_name,$data) { + global $app, $conf; + + $this->update($event_name,$data); + + } + + function update($event_name,$data) { + global $app, $conf; + + $type = $data["new"]["type"]; + if($type != '') { + $sql = "SELECT * FROM mail_content_filter WHERE server_id = ".intval($conf["server_id"])." AND type = '".$app->db->quote($type)."' AND active = 'y'"; + $rules = $app->db->queryAllRecords($sql); + $content = ''; + foreach($rules as $rule) { + $content .= $rule["pattern"]."\n"; + $content .= " ".$rule["action"]." ".$rule["data"]."\n"; + } + + if($type == 'header') { + file_put_contents('/etc/postfix/header_checks',$content); + $app->log("Writing /etc/postfix/header_checks",LOGLEVEL_DEBUG); + } + + if($type == 'mime_header') { + file_put_contents('/etc/postfix/mime_header_checks',$content); + $app->log("Writing /etc/postfix/mime_header_checks",LOGLEVEL_DEBUG); + } + + if($type == 'nested_header') { + file_put_contents('/etc/postfix/nested_header_checks',$content); + $app->log("Writing /etc/postfix/nested_header_checks",LOGLEVEL_DEBUG); + } + + if($type == 'body') { + file_put_contents('/etc/postfix/body_checks',$content); + $app->log("Writing /etc/postfix/body_checks",LOGLEVEL_DEBUG); + } + } + + $type = $data["old"]["type"]; + if($type != '') { + $sql = "SELECT * FROM mail_content_filter WHERE server_id = ".intval($conf["server_id"])." AND type = '".$app->db->quote($type)."' AND active = 'y'"; + $rules = $app->db->queryAllRecords($sql); + $content = ''; + foreach($rules as $rule) { + $content .= $rule["pattern"]."\n"; + $content .= " ".$rule["action"]." ".$rule["data"]."\n"; + } + + if($type == 'header') { + file_put_contents('/etc/postfix/header_checks',$content); + $app->log("Writing /etc/postfix/header_checks",LOGLEVEL_DEBUG); + } + + if($type == 'mime_header') { + file_put_contents('/etc/postfix/mime_header_checks',$content); + $app->log("Writing /etc/postfix/mime_header_checks",LOGLEVEL_DEBUG); + } + + if($type == 'nested_header') { + file_put_contents('/etc/postfix/nested_header_checks',$content); + $app->log("Writing /etc/postfix/nested_header_checks",LOGLEVEL_DEBUG); + } + + if($type == 'body') { + file_put_contents('/etc/postfix/body_checks',$content); + $app->log("Writing /etc/postfix/body_checks",LOGLEVEL_DEBUG); + } + } + } + + function delete($event_name,$data) { + global $app, $conf; + + $this->update($event_name,$data); + } + + +} // end class + +?> \ No newline at end of file diff --git a/server/plugins-enabled/postfix_server_plugin.inc.php b/server/plugins-enabled/postfix_server_plugin.inc.php new file mode 100644 index 0000000000..a63eb95698 --- /dev/null +++ b/server/plugins-enabled/postfix_server_plugin.inc.php @@ -0,0 +1,99 @@ +plugins->registerEvent('server_insert','postfix_server_plugin','insert'); + $app->plugins->registerEvent('server_update','postfix_server_plugin','update'); + + + + } + + function insert($event_name,$data) { + global $app, $conf; + + $this->update($event_name,$data); + + } + + // The purpose of this plugin is to rewrite the main.cf file + function update($event_name,$data) { + global $app, $conf; + + // get the config + $app->uses("getconf"); + $mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail'); + + copy('/etc/postfix/main.cf','/etc/postfix/main.cf~'); + + if($mail_config["relayhost"] != '') { + exec("postconf -e 'relayhost = ".$mail_config["relayhost"]."'"); + exec("postconf -e 'smtp_sasl_auth_enable = yes'"); + exec("postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'"); + exec("postconf -e 'smtp_sasl_security_options ='"); + + // Store the sasl passwd + $content = $mail_config["relayhost"]." ".$mail_config["relayhost_user"].":".$mail_config["relayhost_password"]; + file_put_contents('/etc/postfix/sasl_passwd',$content); + exec("chown root:root /etc/postfix/sasl_passwd"); + exec("chmod 600 /etc/postfix/sasl_passwd"); + exec("postmap /etc/postfix/sasl_passwd"); + exec("/etc/init.d/postfix restart"); + + } else { + exec("postconf -e 'relayhost ='"); + } + + exec("postconf -e 'mailbox_size_limit = ".intval($mail_config["mailbox_size_limit"])."'"); + exec("postconf -e 'message_size_limit = ".intval($mail_config["message_size_limit"])."'"); + + } + +} // end class + +?> \ No newline at end of file -- GitLab