diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/postfix/postfix.inc | 114 | ||||
-rw-r--r-- | config/postfix/postfix.xml | 99 |
2 files changed, 213 insertions, 0 deletions
diff --git a/config/postfix/postfix.inc b/config/postfix/postfix.inc new file mode 100644 index 00000000..63add863 --- /dev/null +++ b/config/postfix/postfix.inc @@ -0,0 +1,114 @@ +<?php +/* + postfix.inc + part of the Postfix package for pfSense + Copyright (C) 2010 Erik Fonnesbeck + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +*/ + +require_once("util.inc"); + +function sync_package_postfix() { + global $config; + + $myhostname = $config['system']['hostname'] . '.' . $config['system']['domain']; + $mydomain = $config['system']['domain']; + $relay_domains = ""; + $transport = ""; + + if (is_array($config['installedpackages']['postfix']['config'])) { + foreach ($config['installedpackages']['postfix']['config'] as $postfix_config) { + if (is_array($postfix_config['row'])) { + foreach ($postfix_config['row'] as $postfix_row) { + $relay_domains .= ' ' . $postfix_row['domain']; + if (!empty($postfix_row['mailserverip'])) + $transport .= $postfix_row['domain'] . " smtp:[" . $postfix_row['mailserverip'] . "]\n"; + } + } + } + } + + $postfix_main = + "myhostname = {$myhostname}\n" . + "mydomain = {$mydomain}\n" . + "relay_domains ={$relay_domains}\n" . + "local_recipient_maps =\n"; + + conf_mount_rw(); + + log_error("Writing out configuration"); + file_put_contents("/usr/local/etc/postfix/main.cf", $postfix_main, LOCK_EX); + file_put_contents("/usr/local/etc/postfix/transport", $transport, LOCK_EX); + exec("/usr/local/sbin/postmap /usr/local/etc/postfix/transport"); + if (!is_dir("/etc/mail")) + mkdir("/etc/mail", 0755); + if (!file_exists("/etc/mail/aliases")) + touch("/etc/mail/aliases"); + exec("/usr/local/bin/newaliases"); + + $start = "/usr/local/sbin/postfix start\n"; + $stop = "/usr/local/sbin/postfix stop\n"; + log_error("Writing rc_file"); + write_rcfile(array("file" => "postfix.sh", "start" => $start, "stop" => $stop)); + + conf_mount_ro(); + + log_error("Stopping postfix"); + mwexec("/usr/local/etc/rc.d/postfix.sh stop"); + sleep(1); + log_error("Starting postfix"); + mwexec_bg("/usr/local/etc/rc.d/postfix.sh start"); + log_error("Postfix setup completed"); +} + +function postfix_validate_input($post, &$input_errors) { + foreach ($post as $key => $value) { + if (empty($value)) + continue; + if (substr($key, 0, 6) == "domain" && is_numeric(substr($key, 6))) { + if (!is_domain($value)) + $input_errors[] = "{$value} is not a valid domain name."; + } else if (substr($key, 0, 12) == "mailserverip" && is_numeric(substr($key, 12))) { + if (empty($post['domain' . substr($key, 12)])) + $input_errors[] = "Domain for {$value} cannot be blank."; + if (!is_ipaddr($value) && !is_hostname($value)) + $input_errors[] = "{$value} is not a valid IP address or host name."; + } + } +} + +function postfix_php_install_command() { + sync_package_postfix(); +} + +function postfix_php_deinstall_command() { + mwexec("/usr/local/etc/rc.d/postfix.sh stop"); + sleep(1); + conf_mount_rw(); + unlink_if_exists("/usr/local/etc/rc.d/postfix.sh"); + conf_mount_ro(); +} + +?>
\ No newline at end of file diff --git a/config/postfix/postfix.xml b/config/postfix/postfix.xml new file mode 100644 index 00000000..d8103f02 --- /dev/null +++ b/config/postfix/postfix.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE packagegui SYSTEM "./schema/packages.dtd"> +<?xml-stylesheet type="text/xsl" href="./xsl/package.xsl"?> +<packagegui> + <copyright> + <![CDATA[ +/* $Id$ */ +/* ========================================================================== */ +/* + postfix.xml + part of the Postfix package for pfSense + Copyright (C) 2010 Erik Fonnesbeck + All rights reserved. + */ +/* ========================================================================== */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ +/* ========================================================================== */ + ]]> + </copyright> + <description>Describe your package here</description> + <requirements>Describe your package requirements here</requirements> + <faq>Currently there are no FAQ items provided.</faq> + <name>postfix</name> + <version>1.0</version> + <title>Services: Postfix Forwarder</title> + <include_file>/usr/local/pkg/postfix.inc</include_file> + <menu> + <name>Postfix Forwarder</name> + <tooltiptext>Configure Postfix Forwarder</tooltiptext> + <section>Services</section> + <configfile>postfix.xml</configfile> + </menu> + <service> + <name>postfix</name> + <rcfile>postfix.sh</rcfile> + <executable>master</executable> + </service> + <additional_files_needed> + <item>http://www.pfsense.org/packages/config/postfix/postfix.inc</item> + <prefix>/usr/local/pkg/</prefix> + <chmod>0755</chmod> + </additional_files_needed> + <fields> + <field> + <fielddescr>Forwarding</fielddescr> + <fieldname>none</fieldname> + <type>rowhelper</type> + <rowhelper> + <rowhelperfield> + <fielddescr>Domain</fielddescr> + <fieldname>domain</fieldname> + <description>Enter the domain here (ex: example.com)</description> + <type>input</type> + <size>20</size> + </rowhelperfield> + <rowhelperfield> + <fielddescr>Mail Server IP</fielddescr> + <fieldname>mailserverip</fieldname> + <description>Enter the mail server IP to forward to here.</description> + <type>input</type> + <size>20</size> + </rowhelperfield> + </rowhelper> + </field> + </fields> + <custom_php_install_command> + postfix_php_install_command(); + </custom_php_install_command> + <custom_php_deinstall_command> + postfix_php_deinstall_command(); + </custom_php_deinstall_command> + <custom_php_validation_command> + postfix_validate_input($_POST, &$input_errors); + </custom_php_validation_command> + <custom_php_resync_config_command> + sync_package_postfix(); + </custom_php_resync_config_command> +</packagegui> |