diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/postfix/postfix.inc | 276 | ||||
-rw-r--r-- | config/postfix/postfix.php | 560 | ||||
-rw-r--r-- | config/postfix/postfix.priv.inc | 24 | ||||
-rwxr-xr-x | config/postfix/postfix.sh | 27 | ||||
-rwxr-xr-x | config/postfix/postfix.widget.php | 75 | ||||
-rw-r--r-- | config/postfix/postfix.xml | 99 | ||||
-rwxr-xr-x | config/postfix/postfix_about.php | 102 | ||||
-rw-r--r-- | config/postfix/postfix_acl.xml | 91 | ||||
-rw-r--r-- | config/postfix/postfix_antispam.xml | 78 | ||||
-rw-r--r-- | config/postfix/postfix_domains.xml | 145 | ||||
-rwxr-xr-x | config/postfix/postfix_queue.php | 242 | ||||
-rw-r--r-- | config/postfix/postfix_recipients.xml | 68 | ||||
-rwxr-xr-x | config/postfix/postfix_search.php | 66 | ||||
-rw-r--r-- | config/postfix/postfix_sync.xml | 101 | ||||
-rw-r--r-- | config/postfix/postfix_view_config.php | 196 |
15 files changed, 1558 insertions, 592 deletions
diff --git a/config/postfix/postfix.inc b/config/postfix/postfix.inc index ca81be8e..323c3e3f 100644 --- a/config/postfix/postfix.inc +++ b/config/postfix/postfix.inc @@ -48,42 +48,21 @@ function px_get_real_interface_address($iface) { } function sync_relay_recipients($via_cron="cron"){ - global $config; + global $config,$g; #relay recipients if ($config['installedpackages']['postfixrecipients']['config']) { $relay_recipients=""; $relay_ldap_recipients=""; $ad_export="/usr/local/etc/postfix/adexport.pl"; - $cron_cmd="/usr/local/bin/php -q /usr/local/www/postfix_recipients.php"; $postfix_enabled=$config['installedpackages']['postfix']['config'][0]['enable_postfix']; - foreach ($config['installedpackages']['postfixrecipients']['config'] as $postfix_recipients_config) { + if (is_array($config['installedpackages']['postfixrecipients']['config'])) { + $postfix_recipients_config=$config['installedpackages']['postfixrecipients']['config'][0]; if($postfix_recipients_config['location'] && file_exists($postfix_recipients_config['location'])) $relay_recipients .= file_get_contents($postfix_recipients_config['location']); if($postfix_recipients_config['custom_recipients']) $relay_recipients .= px_text_area_decode($postfix_recipients_config['custom_recipients']); if($postfix_recipients_config['enable_ldap']){ #validate cront job - if(preg_match("/(\d+)(\w)/",$postfix_recipients_config['freq'],$matches)){ - $cron_postfix=array("minute" => "*", - "hour" => "*", - "mday" => "*", - "month" => "*", - "wday" => "*", - "who" => "root", - "command"=> $cron_cmd); - switch ($matches[2]){ - case m: - $cron_postfix["month"]="*/".$matches[1]; - break; - case h: - $cron_postfix["hour"]="*/".$matches[1]; - break; - case d: - $cron_postfix["mday"]="*/".$matches[1]; - break; - default: - $input_errors[] = "A valid number with a time reference is required for the field 'Frequency'"; - } $relay_ldap_recipients=""; if ($via_cron == "gui"){ #running via pfsense gui, not time for ldap fetch. @@ -132,11 +111,52 @@ function sync_relay_recipients($via_cron="cron"){ file_put_contents("/usr/local/etc/postfix/relay_ldap_recipients.txt",$relay_ldap_recipients, LOCK_EX); } } - } + } + #save all relay recipients and reload postfix + file_put_contents("/usr/local/etc/postfix/relay_recipients",$relay_ldap_recipients."\n".$relay_recipients, LOCK_EX); + exec("/usr/local/sbin/postmap /usr/local/etc/postfix/relay_recipients"); + mwexec("/usr/local/sbin/postfix reload"); + } + if($relay_recipients !="" || $relay_ldap_recipients!="") + return("relay_recipient_maps = hash:/usr/local/etc/postfix/relay_recipients\n"); + +} +function check_cron(){ + global $config, $g; #check crontab $new_cron=array(); $cron_cmd_sqlite = ""; $cron_postfix_sqlite=""; + $cron_cmd="/usr/local/bin/php -q /usr/local/www/postfix_recipients.php"; + $postfix_enabled=$config['installedpackages']['postfix']['config'][0]['enable_postfix']; + #check ldap update + if (is_array($config['installedpackages']['postfixrecipients']['config'])) + $postfix_recipients_config=$config['installedpackages']['postfixrecipients']['config'][0]; + if(preg_match("/(\d+)(\w)/",$postfix_recipients_config['freq'],$matches)){ + $cron_postfix=array("minute" => "*", + "hour" => "*", + "mday" => "*", + "month" => "*", + "wday" => "*", + "who" => "root", + "command"=> $cron_cmd); + switch ($matches[2]){ + case m: + $cron_postfix["month"]="*/".$matches[1]; + break; + case h: + $cron_postfix["minute"]="0"; + $cron_postfix["hour"]="*/".$matches[1]; + break; + case d: + $cron_postfix["minute"]="0"; + $cron_postfix["hour"]="0"; + $cron_postfix["mday"]="*/".$matches[1]; + break; + default: + $input_errors[] = "A valid number with a time reference is required for the field 'Frequency'"; + } + } #check crontab Sqlite databases if (is_array($config['installedpackages']['postfix']['config']) && $postfix_enabled=="on"){ $cron_sqlite_queue=$config['installedpackages']['postfix']['config'][0]['update_sqlite']; @@ -150,6 +170,9 @@ function sync_relay_recipients($via_cron="cron"){ "who" => "root", "command"=> ""); switch ($cron_sqlite_queue){ + case '01min': + $cron_postfix_sqlite["command"] = $cron_cmd_sqlite ." 01min"; + break; case '10min': $cron_postfix_sqlite["minute"]="*/10"; $cron_postfix_sqlite["command"] = $cron_cmd_sqlite ." 10min"; @@ -215,7 +238,7 @@ function sync_relay_recipients($via_cron="cron"){ #call cron functions if ($write_cron==1){ $config['cron']=$new_cron; - write_config(); + write_config('Postfix - sync remote sqlite database',$backup = false); configure_cron(); } #remove postfix old cron call @@ -230,30 +253,31 @@ function sync_relay_recipients($via_cron="cron"){ } if ($old_cron==1) file_put_contents("/etc/crontab",$new_crontab, LOCK_EX); - } - #save all relay recipients and reload postfix - file_put_contents("/usr/local/etc/postfix/relay_recipients",$relay_ldap_recipients."\n".$relay_recipients, LOCK_EX); - exec("/usr/local/sbin/postmap /usr/local/etc/postfix/relay_recipients"); - mwexec("/usr/local/sbin/postfix reload"); - } - if($relay_recipients !="" || $relay_ldap_recipients!="") - return("relay_recipient_maps = hash:/usr/local/etc/postfix/relay_recipients\n"); + #print "<pre>". var_dump($new_cron). var_dump($cron_postfix_sqlite).var_dump($config['cron']); + #exit; + + } function sync_package_postfix() { global $config; + + #check patch in /etc/inc/config. $relay_domains = ""; $transport = ""; $postfix_config=$config['installedpackages']['postfix']['config'][0]; + $postfix_domains=$config['installedpackages']['postfixdomains']['config'][0]; $message_size_limit=($postfix_config['message_size_limit']?$postfix_config['message_size_limit']:"10240000"); $process_limit=($postfix_config['process_limit']?$postfix_config['process_limit']:"100"); - if (is_array($postfix_config['row'])) { - foreach ($postfix_config['row'] as $postfix_row) { + if (is_array($postfix_domains['row'])) { + foreach ($postfix_domains['row'] as $postfix_row) { $relay_domains .= ' ' . $postfix_row['domain']; if (!empty($postfix_row['mailserverip'])) $transport .= $postfix_row['domain'] . " smtp:[" . $postfix_row['mailserverip'] . "]\n"; } } + #check cron + check_cron(); #check logging if ($postfix_config['log_to']){ switch($postfix_config['log_to']){ @@ -311,7 +335,18 @@ function sync_package_postfix() { ABOUT; - $postfix_main="#main.cf\n".$copyright; + $postfix_main=<<<EOF +#main.cf\ +{$copyright} +mynetworks = /usr/local/etc/postfix/mynetwork_table +mynetworks_style = host + +EOF; + #Header Maps + $mynetworks = ""; + if ($config['installedpackages']['postfixacl']['config'][0]['mynetworks']){ + $mynetworks = px_text_area_decode($config['installedpackages']['postfixacl']['config'][0]['mynetworks']); + } #Header Maps if ($config['installedpackages']['postfixacl']['config'][0]['header_maps']){ $postfix_main .= "header_checks = pcre:/usr/local/etc/postfix/header_check\n"; @@ -406,7 +441,10 @@ smtpd_client_restrictions = check_client_access pcre:/usr/local/etc/postfix/cal_ reject_multi_recipient_bounce, permit -smtpd_recipient_restrictions = reject_invalid_helo_hostname, +smtpd_recipient_restrictions = permit_mynetworks, + check_client_access pcre:/usr/local/etc/postfix/cal_pcre, + check_client_access cidr:/usr/local/etc/postfix/cal_cidr, + reject_invalid_helo_hostname, reject_unknown_recipient_domain, reject_non_fqdn_helo_hostname, reject_non_fqdn_recipient, @@ -437,7 +475,9 @@ smtpd_client_restrictions = check_client_access pcre:/usr/local/etc/postfix/cal_ RBLRBLRBL # Whitelisting: local clients may specify any destination domain. -smtpd_recipient_restrictions = reject_unauth_destination, +#, +smtpd_recipient_restrictions = permit_mynetworks, + reject_unauth_destination, SPFSPFSPFRBLRBLRBL EOF; @@ -499,7 +539,7 @@ switch ($antispam['zombie_blocker']) $postfix_main.="postscreen_greet_action = ".$antispam['zombie_blocker']."\n"; } - $postfix_main.="postscreen_access_list = cidr:/usr/local/etc/postfix/cal_cidr\n"; + $postfix_main.="postscreen_access_list = permit_mynetworks,\n\t\t\tcidr:/usr/local/etc/postfix/cal_cidr\n"; $postfix_main.="postscreen_dnsbl_action= ".$antispam['zombie_blocker']."\n"; $postfix_main.="postscreen_blacklist_action= ".$antispam['zombie_blocker']."\n"; @@ -554,6 +594,12 @@ MASTEREOF; } $rbl2.=($rbl2 !=""?"\t\t\t\tpermit\n":"permit\n"); $postfix_main=preg_replace("/RBLRBLRBL/",$rbl2,$postfix_main); + + #Header Maps + $anvil_config=$config['installedpackages']['postfixantispam']['config'][0]['anvil']; + if ($anvil_config =='enabled' || ($anvil_config =='postscreen' && $postscreen==1)) + $anvil='anvil unix - - n - 1 anvil'; + $postfix_master .= <<<MASTEREOF2 pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup @@ -577,8 +623,8 @@ discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp -anvil unix - - n - 1 anvil scache unix - - n - 1 scache +{$anvil} MASTEREOF2; @@ -593,6 +639,7 @@ MASTEREOF2; file_put_contents("/usr/local/etc/postfix/header_check", $header_check, LOCK_EX); file_put_contents("/usr/local/etc/postfix/mime_check", $mime_check, LOCK_EX); file_put_contents("/usr/local/etc/postfix/body_check", $body_check, LOCK_EX); + file_put_contents("/usr/local/etc/postfix/mynetwork_table", $mynetworks, LOCK_EX); $FILES=array("transport"); foreach ($FILES as $file) { @@ -670,8 +717,11 @@ function postfix_php_install_command() { } function postfix_php_deinstall_command() { - mwexec("/usr/local/etc/rc.d/postfix.sh stop"); - sleep(1); + global $config; + #disable service + $config['installedpackages']['postfix']['config'][0]['enable_postfix']=""; + write_config(); + sync_package_postfix(); conf_mount_rw(); unlink_if_exists("/usr/local/etc/rc.d/postfix.sh"); conf_mount_ro(); @@ -680,23 +730,25 @@ function postfix_php_deinstall_command() { /* Uses XMLRPC to synchronize the changes to a remote node */ function postfix_sync_on_changes() { global $config, $g; - log_error("[postfix] postfix_xmlrpc_sync.php is starting."); - $synconchanges = $config['installedpackages']['postfixsync']['config'][0]['synconchanges']; - if(!$synconchanges) + $synconchanges = $config['installedpackages']['postfixsync']['config'][0]['synconchanges']; + $syncondbchanges= $config['installedpackages']['postfixsync']['config'][0]['rsync']; + if(!$synconchanges && !$syncondbchanges) return; + log_error("[postfix] postfix_xmlrpc_sync.php is starting."); foreach ($config['installedpackages']['postfixsync']['config'] as $rs ){ foreach($rs['row'] as $sh){ $sync_to_ip = $sh['ipaddress']; $password = $sh['password']; + $sync_type = $sh['sync_type']; if($password && $sync_to_ip) - postfix_do_xmlrpc_sync($sync_to_ip, $password); + postfix_do_xmlrpc_sync($sync_to_ip, $password,$sync_type); } } log_error("[postfix] postfix_xmlrpc_sync.php is ending."); } /* Do the actual XMLRPC sync */ -function postfix_do_xmlrpc_sync($sync_to_ip, $password) { +function postfix_do_xmlrpc_sync($sync_to_ip, $password,$sync_type) { global $config, $g; if(!$password) @@ -722,72 +774,78 @@ function postfix_do_xmlrpc_sync($sync_to_ip, $password) { /* xml will hold the sections to sync */ $xml = array(); - $xml['postfix'] = $config['installedpackages']['postfix']; - $xml['postfixacl'] = $config['installedpackages']['postfixacl']; - $xml['postfixrecipients'] = $config['installedpackages']['postfixrecipients']; - $xml['postfixantispam'] = $config['installedpackages']['postfixantispam']; + $sync_xml=$config['installedpackages']['postfixsync']['config'][0]['synconchanges']; + $sync_db=$config['installedpackages']['postfixsync']['config'][0]['rsync']; + if ($sync_xml && preg_match("/xmlrpc/",$sync_type)){ + log_error("Include postfix xmls"); + $xml['postfix'] = $config['installedpackages']['postfix']; + $xml['postfixdomains'] = $config['installedpackages']['postfixdomains']; + $xml['postfixacl'] = $config['installedpackages']['postfixacl']; + $xml['postfixrecipients'] = $config['installedpackages']['postfixrecipients']; + $xml['postfixantispam'] = $config['installedpackages']['postfixantispam']; + } + if (count($xml) > 0){ + /* assemble xmlrpc payload */ + $params = array( + XML_RPC_encode($password), + XML_RPC_encode($xml) + ); - /* assemble xmlrpc payload */ - $params = array( - XML_RPC_encode($password), - XML_RPC_encode($xml) - ); - - /* set a few variables needed for sync code borrowed from filter.inc */ - $url = $synchronizetoip; - log_error("Beginning Postfix XMLRPC sync to {$url}:{$port}."); - $method = 'pfsense.merge_installedpackages_section_xmlrpc'; - $msg = new XML_RPC_Message($method, $params); - $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); - $cli->setCredentials('admin', $password); - if($g['debug']) - $cli->setDebug(1); - /* send our XMLRPC message and timeout after 250 seconds */ - $resp = $cli->send($msg, "250"); - if(!$resp) { - $error = "A communications error occurred while attempting postfix XMLRPC sync with {$url}:{$port}."; - log_error($error); - file_notice("sync_settings", $error, "Postfix Settings Sync", ""); - } elseif($resp->faultCode()) { - $cli->setDebug(1); + /* set a few variables needed for sync code borrowed from filter.inc */ + $url = $synchronizetoip; + log_error("Beginning Postfix XMLRPC sync to {$url}:{$port}."); + $method = 'pfsense.merge_installedpackages_section_xmlrpc'; + $msg = new XML_RPC_Message($method, $params); + $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); + $cli->setCredentials('admin', $password); + if($g['debug']) + $cli->setDebug(1); + /* send our XMLRPC message and timeout after 250 seconds */ $resp = $cli->send($msg, "250"); - $error = "An error code was received while attempting postfix XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); - log_error($error); - file_notice("sync_settings", $error, "Postfix Settings Sync", ""); - } else { - log_error("Postfix XMLRPC sync successfully completed with {$url}:{$port}."); - } - - /* tell postfix to reload our settings on the destionation sync host. */ - $method = 'pfsense.exec_php'; - $execcmd = "require_once('/usr/local/pkg/postfix.inc');\n"; - $execcmd .= "sync_package_postfix();"; + if(!$resp) { + $error = "A communications error occurred while attempting postfix XMLRPC sync with {$url}:{$port}."; + log_error($error); + file_notice("sync_settings", $error, "Postfix Settings Sync", ""); + } elseif($resp->faultCode()) { + $cli->setDebug(1); + $resp = $cli->send($msg, "250"); + $error = "An error code was received while attempting postfix XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("sync_settings", $error, "Postfix Settings Sync", ""); + } else { + log_error("Postfix XMLRPC sync successfully completed with {$url}:{$port}."); + } + + /* tell postfix to reload our settings on the destionation sync host. */ + $method = 'pfsense.exec_php'; + $execcmd = "require_once('/usr/local/pkg/postfix.inc');\n"; + $execcmd .= "sync_package_postfix();"; + + /* assemble xmlrpc payload */ + $params = array( + XML_RPC_encode($password), + XML_RPC_encode($execcmd) + ); - /* assemble xmlrpc payload */ - $params = array( - XML_RPC_encode($password), - XML_RPC_encode($execcmd) - ); - - log_error("postfix XMLRPC reload data {$url}:{$port}."); - $msg = new XML_RPC_Message($method, $params); - $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); - $cli->setCredentials('admin', $password); - $resp = $cli->send($msg, "250"); - if(!$resp) { - $error = "A communications error occurred while attempting postfix XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; - log_error($error); - file_notice("sync_settings", $error, "postfix Settings Sync", ""); - } elseif($resp->faultCode()) { - $cli->setDebug(1); + log_error("postfix XMLRPC reload data {$url}:{$port}."); + $msg = new XML_RPC_Message($method, $params); + $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port); + $cli->setCredentials('admin', $password); $resp = $cli->send($msg, "250"); - $error = "An error code was received while attempting postfix XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); - log_error($error); - file_notice("sync_settings", $error, "postfix Settings Sync", ""); - } else { - log_error("postfix XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + if(!$resp) { + $error = "A communications error occurred while attempting postfix XMLRPC sync with {$url}:{$port} (pfsense.exec_php)."; + log_error($error); + file_notice("sync_settings", $error, "postfix Settings Sync", ""); + } elseif($resp->faultCode()) { + $cli->setDebug(1); + $resp = $cli->send($msg, "250"); + $error = "An error code was received while attempting postfix XMLRPC sync with {$url}:{$port} - Code " . $resp->faultCode() . ": " . $resp->faultString(); + log_error($error); + file_notice("sync_settings", $error, "postfix Settings Sync", ""); + } else { + log_error("postfix XMLRPC reload data success with {$url}:{$port} (pfsense.exec_php)."); + } } - } ?> diff --git a/config/postfix/postfix.php b/config/postfix/postfix.php index d50fd326..0f397cc9 100644 --- a/config/postfix/postfix.php +++ b/config/postfix/postfix.php @@ -31,13 +31,118 @@ require_once("/etc/inc/util.inc"); require_once("/etc/inc/functions.inc");
require_once("/etc/inc/pkg-utils.inc");
require_once("/etc/inc/globals.inc");
-function grep_log($from="",$to="",$subject=""){
- global $postfix_dir,$postfix_db,$postfix_arg;
- create_db();
+require_once("/usr/local/pkg/postfix.inc");
+
+function get_remote_log(){
+ global $config,$g,$postfix_dir;
+ $curr_time = time();
+ $log_time=date('YmdHis',$curr_time);
+ #get protocol
+ if($config['system']['webgui']['protocol'] != "")
+ $synchronizetoip = $config['system']['webgui']['protocol']. "://";
+ #get port
+ $port = $config['system']['webgui']['port'];
+ #if port is empty lets rely on the protocol selection
+ if($port == "")
+ $port =($config['system']['webgui']['protocol'] == "http"?"80":"443");
+ $synchronizetoip .= $sync_to_ip;
+ if (is_array($config['installedpackages']['postfixsync']))
+ foreach($config['installedpackages']['postfixsync']['config'][0]['row'] as $sh){
+ $sync_to_ip = $sh['ipaddress'];
+ $sync_type = $sh['sync_type'];
+ $password = $sh['password'];
+ $file= '/var/db/postfix/'.$server.'.sql';
+ #get remote data
+ if ($sync_type=='fetch'){
+ $url= $synchronizetoip . $sync_to_ip;
+ print "$sync_to_ip $url, $port\n";
+ $method = 'pfsense.exec_php';
+ $execcmd = "require_once('/usr/local/www/postfix.php');\n";
+ $execcmd .= '$toreturn=get_sql('.$log_time.');';
+ /* assemble xmlrpc payload */
+ $params = array(XML_RPC_encode($password),
+ XML_RPC_encode($execcmd));
+ log_error("postfix get sql data from {$sync_to_ip}.");
+ $msg = new XML_RPC_Message($method, $params);
+ $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port);
+ $cli->setCredentials('admin', $password);
+ #$cli->setDebug(1);
+ $resp = $cli->send($msg, "250");
+ $a=$resp->value();
+ $errors=0;
+ #var_dump($sql);
+ foreach($a as $b)
+ foreach ($b as $c)
+ foreach ($c as $d)
+ foreach ($d as $e){
+ $update=unserialize($e['string']);
+ print $update['day']."\n";
+ if ($update['day'] != ""){
+ create_db($update['day'].".db");
+ if ($debug=true)
+ print $update['day'] ." writing from remote system to db...";
+ $dbhandle = sqlite_open($postfix_dir.'/'.$update['day'].".db", 0666, $error);
+ #file_put_contents("/tmp/".$key.'-'.$update['day'].".sql",gzuncompress(base64_decode($update['sql'])), LOCK_EX);
+ $ok = sqlite_exec($dbhandle, gzuncompress(base64_decode($update['sql'])), $error);
+ if (!$ok){
+ $errors++;
+ die ("Cannot execute query. $error\n".$update['sql']."\n");
+ }
+ else{
+ if ($debug=true)
+ print "ok\n";
+ }
+ sqlite_close($dbhandle);
+ }
+ }
+ if ($errors ==0){
+ $method = 'pfsense.exec_php';
+ $execcmd = "require_once('/usr/local/www/postfix.php');\n";
+ $execcmd .= 'flush_sql('.$log_time.');';
+ /* assemble xmlrpc payload */
+ $params = array(XML_RPC_encode($password),
+ XML_RPC_encode($execcmd));
+ log_error("postfix flush sql buffer file from {$sync_to_ip}.");
+ $msg = new XML_RPC_Message($method, $params);
+ $cli = new XML_RPC_Client('/xmlrpc.php', $url, $port);
+ $cli->setCredentials('admin', $password);
+ #$cli->setDebug(1);
+ $resp = $cli->send($msg, "250");
+ }
+ }
+ }
+}
+function get_sql($log_time){
+ global $config,$xmlrpc_g;
+ $server=$_SERVER['REMOTE_ADDR'];
+
+ if (is_array($config['installedpackages']['postfixsync']))
+ foreach($config['installedpackages']['postfixsync']['config'][0]['row'] as $sh){
+ $sync_to_ip = $sh['ipaddress'];
+ $sync_type = $sh['sync_type'];
+ $password = $sh['password'];
+ $file= '/var/db/postfix/'.$server.'.sql';
+ if ($sync_to_ip==$server && $sync_type=='share' && file_exists($file)){
+ rename($file,$file.".$log_time");
+ return (file($file.".$log_time"));
+ }
+ }
+ return "";
+}
+
+function flush_sql($log_time){
+ if (preg_match("/\d+\.\d+\.\d+\.\d+/",$_SERVER['REMOTE_ADDR']))
+ unlink_if_exists('/var/db/postfix/'.$_SERVER['REMOTE_ADDR'].".sql.$log_time");
+}
+
+function grep_log(){
+ global $postfix_dir,$postfix_arg,$config,$g;
$total_lines=0;
+ $days=array();
$grep="postfix.\(cleanup\|smtp\|error\|qmgr\)";
$curr_time = time();
+ $log_time=strtotime($postfix_arg['time'],$curr_time);
$m=date('M',strtotime($postfix_arg['time'],$curr_time));
$j=substr(" ".date('j',strtotime($postfix_arg['time'],$curr_time)),-3);
# file grep loop
@@ -45,39 +150,68 @@ function grep_log($from="",$to="",$subject=""){ print "/usr/bin/grep '^".$m.$j." ".$hour.".*".$grep."' /var/log/maillog\n";
$lists=array();
exec("/usr/bin/grep " . escapeshellarg('^'.$m.$j." ".$hour.".*".$grep)." /var/log/maillog", $lists);
- $stm_noqueue="BEGIN;\n";
- $stm_queue="BEGIN;\n";
foreach ($lists as $line){
+ #check where is first mail record
+ if (preg_match("/ delay=(\d+)/",$line,$delay)){
+ $day=date("Y-m-d",strtotime("-".$delay[1]." second",$log_time));
+ if (! in_array($day,$days)){
+ $days[]=$day;
+ create_db($day.".db");
+ print "Found logs to $day.db\n";
+ $stm_queue[$day]="BEGIN;\n";
+ $stm_noqueue[$day]="BEGIN;\n";
+ }
+ }
+ else{
+ $day=date("Y-m-d",strtotime($postfix_arg['time'],$curr_time));
+ if (! in_array($day,$days)){
+ $days[]=$day;
+ create_db($day.".db");
+ print "Found logs to $day.db\n";
+ $stm_queue[$day]="BEGIN;\n";
+ $stm_noqueue[$day]="BEGIN;\n";
+ }
+ }
$status=array();
$total_lines++;
- #Nov 8 09:31:50 srvchunk01 postfix/smtpd[43585]: 19C281F59C8: client=pm03-974.auinmeio.com.br[177.70.232.225]
+ #Nov 8 09:31:50 srvch011 postfix/smtpd[43585]: 19C281F59C8: client=pm03-974.auinmem.br[177.70.0.3]
if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.smtpd\W\d+\W+(\w+): client=(.*)/",$line,$email)){
$values="'".$email[3]."','".$email[1]."','".$email[2]."','".$email[4]."'";
if(${$email[3]}!=$email[3])
- $stm_queue.='insert into mail_queue(sid,date,server,client) values('.$values.');'."\n";
+ $stm_queue[$day].='insert or ignore into mail_from(sid,date,server,client) values ('.$values.');'."\n";
${$email[3]}=$email[3];
}
- #Nov 13 00:09:07 srvchunk01 postfix/smtp[51436]: 9145C1F67F7: to=<lidia.santos@ma.mail.test.com>, relay=srvmail1-ma.ma.mail.test.com[172.23.3.6]:25, delay=2.4, delays=2.2/0/0.13/0.11, dsn=5.7.1, status=bounced (host srvmail1-ma.ma.mail.test.com[172.23.3.6] said: 550 5.7.1 Unable to relay for lidia.santos@ma.mail.test.com (in reply to RCPT TO command))
- #Nov 3 21:45:32 srvchunk01 postfix/smtp[18041]: 4CE321F4887: to=<vitrineabril@vitrineabril.alphainteractive.com.br>, relay=smtpe1.emv3.com[81.92.120.9]:25, delay=1.9, delays=0.06/0.01/0.68/1.2, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 2C33E2382C8)
- else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.smtp\W\d+\W+(\w+): to=\<(.*)\>, relay=(.*), delay=([0-9.]+).*dsn=([0-9.]+), status=(\w+) (.*)/",$line,$email)){
- $stm_queue.= "update mail_queue set too='".$email[4]."', relay='".$email[5]."', dsn='".$email[7]."', status='".$email[8]."', status_info='".preg_replace("/(\s+|\'|\")/"," ",$email[9])."', delay='".$email[6]."' where sid='".$email[3]."';\n";
- #print "update mail_queue set too='".$email[4]."', relay='".$email[5]."', dsn='".$email[9]."',status='".$email[8]."', status_info='".$email[9]."', delay='".$email[6]."' where sid='".$email[3]."';\n";
+ #Nov 14 09:29:32 srvch011 postfix/error[58443]: 2B8EB1F5A5A: to=<hildae.sva@pi.email.com>, relay=none, delay=0.66, delays=0.63/0/0/0.02, dsn=4.4.3, status=deferred (delivery temporarily suspended: Host or domain name not found. Name service error for name=mail.pi.trf1.gov.br type=A: Host not found, try again)
+ #Nov 3 21:45:32 srvch011 postfix/smtp[18041]: 4CE321F4887: to=<viinil@vitive.com.br>, relay=smtpe1.eom[81.00.20.9]:25, delay=1.9, delays=0.06/0.01/0.68/1.2, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 2C33E2382C8)
+ #Nov 16 00:00:14 srvch011 postfix/smtp[7363]: 7AEB91F797D: to=<alessandra.bueno@mg.trf1.gov.br>, relay=mail.mg.trf1.gov.br[172.25.3.5]:25, delay=39, delays=35/1.1/0.04/2.7, dsn=5.7.1, status=bounced (host mail.mg.trf1.gov.br[172.25.3.5] said: 550 5.7.1 Unable to relay for alessandra.bueno@mg.trf1.gov.br (in reply to RCPT TO command))
+ else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.\w+\W\d+\W+(\w+): to=\<(.*)\>, relay=(.*), delay=([0-9,.]+), .* dsn=([0-9,.]+), status=(\w+) (.*)/",$line,$email)){
+ $stm_queue[$day].= "insert or ignore into mail_status (info) values ('".$email[8]."');\n";
+ $stm_queue[$day].= "insert or ignore into mail_to (from_id,too,status,status_info,relay,delay,dsn) values ((select id from mail_from where sid='".$email[3]."' and server='".$email[2]."'),'".strtolower($email[4])."',(select id from mail_status where info='".$email[8]."'),'".preg_replace("/(\<|\>|\s+|\'|\")/"," ",$email[9])."','".$email[5]."','".$email[6]."','".$email[7]."');\n";
+ $stm_queue[$day].= "update or ignore mail_to set status=(select id from mail_status where info='".$email[8]."'), status_info='".preg_replace("/(\<|\>|\s+|\'|\")/"," ",$email[9])."', dsn='".$email[7]."', delay='".$email[6]."', relay='".$email[5]."', too='".strtolower($email[4])."' where from_id in (select id from mail_from where sid='".$email[3]."' and server='".$email[2]."');\n";
}
#Nov 13 01:48:44 srvch011 postfix/cleanup[16914]: D995B1F570B: message-id=<61.40.11745.10E3FBE4@ofertas6>
else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.cleanup\W\d+\W+(\w+): message-id=\<(.*)\>/",$line,$email)){
- $stm_queue.="update mail_queue set msgid='".$email[4]."' where sid='".$email[3]."';";
+ $stm_queue[$day].="update mail_from set msgid='".$email[4]."' where sid='".$email[3]."';\n";
}
- #Nov 14 02:40:05 srvchunk01 postfix/qmgr[46834]: BC5931F4F13: from=<ceag@mx.crmall.com.br>, size=32727, nrcpt=1 (queue active)
+ #Nov 14 02:40:05 srvch011 postfix/qmgr[46834]: BC5931F4F13: from=<ceag@mx.crmcom.br>, size=32727, nrcpt=1 (queue active)
else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.qmgr\W\d+\W+(\w+): from=\<(.*)\>\W+size=(\d+)/",$line,$email)){
- $stm_queue.= "update mail_queue set fromm='".$email[4]."', size='".$email[5]."' where sid='".$email[3]."';\n";
+ $stm_queue[$day].= "update mail_from set fromm='".strtolower($email[4])."', size='".$email[5]."' where sid='".$email[3]."';\n";
}
- #Nov 13 00:09:07 srvchunk01 postfix/bounce[56376]: 9145C1F67F7: sender non-delivery notification: D5BD31F6865
- else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.bounce\W\d+\W+(\w+): sender non-delivery notification: (\w+)/",$line,$email)){
- $stm_queue.= "update mail_queue set bounce='".$email[4]."' where sid='".$email[3]."';\n";
+ #Nov 13 00:09:07 srvch011 postfix/bounce[56376]: 9145C1F67F7: sender non-delivery notification: D5BD31F6865
+ #else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.bounce\W\d+\W+(\w+): sender non-delivery notification: (\w+)/",$line,$email)){
+ # $stm_queue[$day].= "update mail_queue set bounce='".$email[4]."' where sid='".$email[3]."';\n";
+ #}
+ #Nov 14 01:41:44 srvch011 postfix/smtpd[15259]: warning: 1EF3F1F573A: queue file size limit exceeded
+ else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.smtpd\W\d+\W+warning: (\w+): queue file size limit exceeded/",$line,$email)){
+ $stm_queue[$day].= "insert or ignore into mail_status (info) values ('".$email[8]."');\n";
+ $stm_queue[$day].= "update mail_to set status=(select id from mail_status where info='reject'), status_info='queue file size limit exceeded' where from_id in (select id from mail_from where sid='".$email[3]."' and server='".$email[2]."');\n";
}
+
#Nov 9 02:14:57 srvch011 postfix/cleanup[6856]: 617A51F5AC5: warning: header Subject: Mapeamento de Processos from lxalpha.12b.com.br[66.109.29.225]; from=<apache@lxalpha.12b.com.br> to=<ritiele.faria@mail.test.com> proto=ESMTP helo=<lxalpha.12b.com.br>
#Nov 8 09:31:50 srvch011 postfix/cleanup[11471]: 19C281F59C8: reject: header From: "Giuliana Flores - Parceiro do Grupo Virtual" <publicidade@parceiro-grupovirtual.com.br> from pm03-974.auinmeio.com.br[177.70.232.225]; from=<publicidade@parceiro-grupovirtual.com.br> to=<jorge.lustosa@mail.test.com> proto=ESMTP helo=<pm03-974.auinmeio.com.br>: 5.7.1 [SN007]
- else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.cleanup\W\d+\W+(\w+): (\w+): header (.*) from ([a-z,A-Z,0-9,.,-]+)\W([0-9,.]+)\W+from=\<(.*)\> to=\<(.*)\>.*helo=\W([a-z,A-Z,0-9,.,-]+)\W(.*|)/",$line,$email)){
+ #Nov 13 00:03:24 srvch011 postfix/cleanup[4192]: 8A5B31F52D2: reject: body http://platform.roastcrack.info/mj0ie6p-48qtiyq from move2.igloojack.info[173.239.63.16]; from=<ljmd6u8lrxke4@move2.igloojack.info> to=<edileva@aasdf..br> proto=SMTP helo=<move2.igloojack.info>: 5.7.1 [BD040]
+ #Nov 14 01:41:35 srvch011 postfix/cleanup[58446]: 1EF3F1F573A: warning: header Subject: =?windows-1252?Q?IMOVEL_Voc=EA_=E9_um_Cliente_especial_da_=93CENTURY21=22?=??=?windows-1252?Q?Veja_o_que_tenho_para_voc=EA?= from mail-yw0-f51.google.com[209.85.213.51]; from=<sergioalexandre6308@gmail.com> to=<sinza@tr.br> proto=ESMTP helo=<mail-yw0-f51.google.com>
+ else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.cleanup\W\d+\W+(\w+): (\w+): (.*) from ([a-z,A-Z,0-9,.,-]+)\W([0-9,.]+)\W+from=\<(.*)\> to=\<(.*)\>.*helo=\W([a-z,A-Z,0-9,.,-]+)(.*)/",$line,$email)){
$status['date']=$email[1];
$status['server']=$email[2];
$status['sid']=$email[3];
@@ -87,21 +221,26 @@ function grep_log($from="",$to="",$subject=""){ $status['to']=$email[9];
$status['helo']=$email[10];
$status['status']=$email[4];
-
+ $stm_queue[$day].= "insert or ignore into mail_status (info) values ('".$email[4]."');\n";
if ($email[4] =="warning"){
- $status['status_info']=preg_replace("/(\s+|\'|\")/"," ",$email[11]);
- $status['subject']=preg_replace("/Subject: /","",$email[5]);
- $status['subject']=preg_replace("/(\s+|\'|\")/"," ",$status['subject']);
- $stm_queue.="update mail_queue set subject='".$status['subject']."', status='".$status['status']."', status_info='".$status['info']."', fromm='".$status['from']."',too='".$status['size']."',helo='".$status['helo']."' where sid='".$status['sid']."';\n";
+ $stm_queue[$day].= "insert or ignore into mail_status (info) values ('incoming');\n";
+ #print "$line\n";
+ $status['status_info']=preg_replace("/(\<|\>|\s+|\'|\")/"," ",$email[11]);
+ $status['subject']=preg_replace("/header Subject: /","",$email[5]);
+ $status['subject']=preg_replace("/(\<|\>|\s+|\'|\")/"," ",$status['subject']);
+ $stm_queue[$day].="update mail_from set subject='".$status['subject']."', fromm='".strtolower($status['from'])."',helo='".$status['helo']."' where sid='".$status['sid']."';\n";
+ $stm_queue[$day].="insert or ignore into mail_to (from_id,too,status,status_info) VALUES ((select id from mail_from where sid='".$email[3]."' and server='".$email[2]."'),'".strtolower($status['to'])."',(select id from mail_status where info='incoming'),'".$status['status_info']."');\n";
+ $stm_queue[$day].="update or ignore mail_to set status=(select id from mail_status where info='incoming'), status_info='".$status['status_info']."', too='".strtolower($status['to'])."' where from_id in (select id from mail_from where sid='".$status['sid']."' and server='".$email[2]."');\n";
}
else{
- $status['status_info']=$email[5].$email[11];
- $stm_queue.="update mail_queue set status='".$status['status']."', status_info='".$status['status_info']."', fromm='".$status['from']."',too='".$status['to']."',helo='".$status['helo']."' where sid='".$status['sid']."';\n";
- }
+ $stm_queue[$day].="update mail_from set fromm='".strtolower($status['from'])."',helo='".$status['helo']."' where sid='".$status['sid']."';\n";
+ $status['status_info']=preg_replace("/(\<|\>|\s+|\'|\")/"," ",$email[5].$email[11]);
+ $stm_queue[$day].="insert or ignore into mail_to (from_id,too,status,status_info) VALUES ((select id from mail_from where sid='".$email[3]."' and server='".$email[2]."'),'".strtolower($status['to'])."',(select id from mail_status where info='".$email[4]."'),'".$status['status_info']."');\n";
+ $stm_queue[$day].="update or ignore mail_to set status=(select id from mail_status where info='".$email[4]."'), status_info='".$status['status_info']."', too='".strtolower($status['to'])."' where from_id in (select id from mail_from where sid='".$status['sid']."' and server='".$email[2]."');\n";
+ }
}
- #Nov 9 02:14:34 srvchunk01 postfix/smtpd[38129]: NOQUEUE: reject: RCPT from unknown[201.36.98.7]: 450 4.7.1 Client host rejected: cannot find your hostname, [201.36.98.7]; from=<maladireta@esadcursos.com.br> to=<sexec.09vara@go.domain.test.com> proto=ESMTP helo=<capri0.wb.com.br>
+ #Nov 9 02:14:34 srvch011 postfix/smtpd[38129]: NOQUEUE: reject: RCPT from unknown[201.36.0.7]: 450 4.7.1 Client host rejected: cannot find your hostname, [201.36.98.7]; from=<maladireta@esadcos.com.br> to=<sexec.09vara@go.domain.test.com> proto=ESMTP helo=<capri0.wb.com.br>
else if(preg_match("/(\w+\s+\d+\s+[0-9,:]+) (\w+) postfix.smtpd\W\d+\W+NOQUEUE:\s+(\w+): (.*); from=\<(.*)\> to=\<(.*)\>.*helo=\<(.*)\>/",$line,$email)){
- $status['sid']='NOQUEUE';
$status['date']=$email[1];
$status['server']=$email[2];
$status['status']=$email[3];
@@ -109,124 +248,219 @@ function grep_log($from="",$to="",$subject=""){ $status['from']=$email[5];
$status['to']=$email[6];
$status['helo']=$email[7];
- $values="'".$status['date']."','".$status['status']."','".$status['status_info']."','".$status['from']."','".$status['to']."','".$status['helo']."'";
- $stm_noqueue.='insert into mail_noqueue(date,status,status_info,fromm,too,helo) values('.$values.');'."\n";
+ $values="'".$status['date']."','".$status['status']."','".$status['status_info']."','".strtolower($status['from'])."','".strtolower($status['to'])."','".$status['helo']."','".$status['server']."'";
+ $stm_noqueue[$day].='insert or ignore into mail_noqueue(date,status,status_info,fromm,too,helo,server) values ('.$values.');'."\n";
}
- if ($total_lines%1000 == 0){
+ if ($total_lines%1500 == 0){
#save log in database
- write_db($stm_noqueue."COMMIT;","noqueue");
- write_db($stm_queue."COMMIT;","queue");
- $stm_noqueue="BEGIN;\n";
- $stm_queue="BEGIN;\n";
- }
- if ($total_lines%1000 == 0)
+ write_db($stm_noqueue,"noqueue",$days);
+ write_db($stm_queue,"from",$days);
+ foreach ($days as $d){
+ $stm_noqueue[$d]="BEGIN;\n";
+ $stm_queue[$d]="BEGIN;\n";
+ }
+ }
+ if ($total_lines%1500 == 0)
print "$line\n";
}
#save log in database
- write_db($stm_noqueue."COMMIT;","noqueue");
- write_db($stm_queue."COMMIT;","queue");
- $stm_noqueue="BEGIN;\n";
- $stm_queue="BEGIN;\n";
+ write_db($stm_noqueue,"noqueue",$days);
+ write_db($stm_queue,"from",$days);
+ foreach ($days as $d){
+ $stm_noqueue[$d]="BEGIN;\n";
+ $stm_queue[$d]="BEGIN;\n";
+ }
}
+
+ $config=parse_xml_config("{$g['conf_path']}/config.xml", $g['xml_rootobj']);
+ print count($config['installedpackages']);
+ #start db replication if configured
+ if ($config['installedpackages']['postfixsync']['config'][0]['rsync'])
+ foreach ($config['installedpackages']['postfixsync']['config'] as $rs )
+ foreach($rs['row'] as $sh){
+ $sync_to_ip = $sh['ipaddress'];
+ $sync_type = $sh['sync_type'];
+ $password = $sh['password'];
+ print "checking replication to $sync_to_ip...";
+ if ($password && $sync_to_ip && preg_match("/(both|database)/",$sync_type))
+ postfix_do_xmlrpc_sync($sync_to_ip, $password,$sync_type);
+ print "ok\n";
+ }
+
}
-function write_db($stm,$table){
- global $postfix_dir,$postfix_db;
- print date("H:i:s") . " writing db...";
- $dbhandle = sqlite_open($postfix_dir.'/'.$postfix_db, 0666, $error);
- $ok = sqlite_exec($dbhandle, $stm, $error);
- if (!$ok)
- die ("Cannot execute query. $error\n$stm\n");
+function write_db($stm,$table,$days){
+ global $postfix_dir,$config,$g;
+ conf_mount_rw();
+ $do_sync=array();
+ print "writing to database...";
+ foreach ($days as $day)
+ if (strlen($stm[$day]) > 10){
+ if ($config['installedpackages']['postfixsync']['config'][0])
+ foreach ($config['installedpackages']['postfixsync']['config'] as $rs )
+ foreach($rs['row'] as $sh){
+ $sync_to_ip = $sh['ipaddress'];
+ $sync_type = $sh['sync_type'];
+ $password = $sh['password'];
+ $sql_file='/var/db/postfix/'.$sync_to_ip.'.sql';
+ ${$sync_to_ip}="";
+ if (file_exists($sql_file))
+ ${$sync_to_ip}=file_get_contents($sql_file);
+ if ($sync_to_ip && $sync_type=="share"){
+ ${$sync_to_ip}.=serialize(array('day'=> $day,'sql'=> base64_encode(gzcompress($stm[$day]."COMMIT;",9))))."\n";
+ if (! in_array($sync_to_ip,$do_sync))
+ $do_sync[]=$sync_to_ip;
+ }
+ }
+ #write local db file
+ create_db($day.".db");
+ if ($debug=true)
+ print " writing to local db $day...";
+ $dbhandle = sqlite_open($postfix_dir.$day.".db", 0666, $error);
+ if (!$dbhandle) die ($error);
+ #file_put_contents("/tmp/".$key.'-'.$update['day'].".sql",gzuncompress(base64_decode($update['sql'])), LOCK_EX);
+ $ok = sqlite_exec($dbhandle, $stm[$day]."COMMIT;", $error);
+ if (!$ok){
+ if ($debug=true)
+ print ("Cannot execute query. $error\n".$stm[$day]."COMMIT;\n");
+ }
+ else{
+ if ($debug=true)
+ print "ok\n";
+ }
+ sqlite_close($dbhandle);
+ }
+ #write update sql files
+ if (count ($do_sync) > 0 ){
+
+ foreach($do_sync as $ip)
+ file_put_contents('/var/db/postfix/'.$ip.'.sql',${$ip},LOCK_EX);
+ conf_mount_ro();
+ }
+ #write local file
- print "ok ";
- $result = sqlite_query($dbhandle, "select count(*) ".$table." from mail_".$table);
- $row = sqlite_fetch_array($result, SQLITE_ASSOC);
- print $table .":". $row[$table]."\n";
- sqlite_close($dbhandle);
-echo "<br>";
}
-function create_db(){
- global $postfix_dir,$postfix_db,$postfix_arg;
- if ($postfix_arg['time']== "-01 day"){
- unlink_if_exists($postfix_dir.'/'.$postfix_db);
- unlink_if_exists($postfix_dir.'/'.$postfix_db."-journal");
- }
+function create_db($postfix_db){
+ global $postfix_dir,$postfix_arg;
if (! is_dir($postfix_dir))
mkdir($postfix_dir,0775);
- $new_db=(file_exists($postfix_dir.'/'.$postfix_db)?1:0);
- $dbhandle = sqlite_open($postfix_dir.'/'.$postfix_db, 0666, $error);
- if (!$dbhandle) die ($error);
+ $new_db=(file_exists($postfix_dir.$postfix_db)?1:0);
$stm = <<<EOF
- CREATE TABLE mail_queue(
+ CREATE TABLE "mail_from"(
"id" INTEGER PRIMARY KEY,
- "sid" TEXT NOT NULL,
+ "sid" VARCHAR(11) NOT NULL,
"client" TEXT NOT NULL,
"msgid" TEXT,
"fromm" TEXT,
- "too" TEXT,
- "status" TEXT,
"size" INTEGER,
- "status_info" TEXT,
"subject" TEXT,
+ "date" TEXT NOT NULL,
+ "server" TEXT,
+ "helo" TEXT
+);
+ CREATE TABLE "mail_to"(
+ "id" INTEGER PRIMARY KEY,
+ "from_id" INTEGER NOT NULL,
+ "too" TEXT,
+ "status" INTEGER,
+ "status_info" TEXT,
"smtp" TEXT,
"delay" TEXT,
"relay" TEXT,
"dsn" TEXT,
- "date" TEXT NOT NULL,
"server" TEXT,
- "helo" TEXT,
- "bounce" TEXT
+ "bounce" TEXT,
+ FOREIGN KEY (status) REFERENCES mail_status(id),
+ FOREIGN KEY (from_id) REFERENCES mail_from(id)
+);
+
+
+CREATE TABLE "mail_status"(
+ "id" INTEGER PRIMARY KEY,
+ "info" varchar(35) NOT NULL
);
+
CREATE TABLE "mail_noqueue"(
"id" INTEGER PRIMARY KEY,
- "date" TEXT NOT NULL,
- "status" INTEGER NOT NULL,
- "status_info" INTEGER NOT NULL,
- "fromm" TEXT NOT NULL,
- "too" TEXT NOT NULL,
- "helo" TEXT NOT NULL
+ "date" TEXT NOT NULL,
+ "server" TEXT NOT NULL,
+ "status" TEXT NOT NULL,
+ "status_info" INTEGER NOT NULL,
+ "fromm" TEXT NOT NULL,
+ "too" TEXT NOT NULL,
+ "helo" TEXT NOT NULL
+);
+
+CREATE TABLE "db_version"(
+ "value" varchar(10),
+ "info" TEXT
);
-CREATE UNIQUE INDEX "queue_sid" on mail_queue (sid ASC);
-CREATE INDEX "queue_bounce" on mail_queue (bounce ASC);
-CREATE INDEX "queue_relay" on mail_queue (relay ASC);
-CREATE INDEX "queue_client" on mail_queue (client ASC);
-CREATE INDEX "queue_helo" on mail_queue (helo ASC);
-CREATE INDEX "queue_server" on mail_queue (server ASC);
-CREATE INDEX "queue_date" on mail_queue (date ASC);
-CREATE INDEX "queue_smtp" on mail_queue (smtp ASC);
-CREATE INDEX "queue_subject" on mail_queue (subject ASC);
-CREATE INDEX "queue_info" on mail_queue (status_info ASC);
-CREATE INDEX "queue_status" on mail_queue (status ASC);
-CREATE INDEX "queue_msgid" on mail_queue (msgid ASC);
-CREATE INDEX "queue_too" on mail_queue (too ASC);
-CREATE INDEX "queue_fromm" on mail_queue (fromm ASC);
+insert or ignore into db_version ('value') VALUES ('2.3.1');
+
CREATE INDEX "noqueue_unique" on mail_noqueue (date ASC, fromm ASC, too ASC);
CREATE INDEX "noqueue_helo" on mail_noqueue (helo ASC);
CREATE INDEX "noqueue_too" on mail_noqueue (too ASC);
CREATE INDEX "noqueue_fromm" on mail_noqueue (fromm ASC);
CREATE INDEX "noqueue_info" on mail_noqueue (status_info ASC);
CREATE INDEX "noqueue_status" on mail_noqueue (status ASC);
+CREATE INDEX "noqueue_server" on mail_noqueue (server ASC);
CREATE INDEX "noqueue_date" on mail_noqueue (date ASC);
+
+CREATE UNIQUE INDEX "status_info" on mail_status (info ASC);
+
+CREATE UNIQUE INDEX "from_sid_server" on mail_from (sid ASC,server ASC);
+CREATE INDEX "from_client" on mail_from (client ASC);
+CREATE INDEX "from_helo" on mail_from (helo ASC);
+CREATE INDEX "from_server" on mail_from (server ASC);
+CREATE INDEX "from_subject" on mail_from (subject ASC);
+CREATE INDEX "from_msgid" on mail_from (msgid ASC);
+CREATE INDEX "from_fromm" on mail_from (fromm ASC);
+CREATE INDEX "from_date" on mail_from (date ASC);
+
+CREATE UNIQUE INDEX "mail_to_unique" on mail_to (from_id ASC, too ASC);
+CREATE INDEX "to_bounce" on mail_to (bounce ASC);
+CREATE INDEX "to_relay" on mail_to (relay ASC);
+CREATE INDEX "to_smtp" on mail_to (smtp ASC);
+CREATE INDEX "to_info" on mail_to (status_info ASC);
+CREATE INDEX "to_status" on mail_to (status ASC);
+CREATE INDEX "to_too" on mail_to (too ASC);
+
EOF;
+#test file version
+print "checking". $postfix_dir.$postfix_db."\n";
+$dbhandle = sqlite_open($postfix_dir.$postfix_db, 0666, $error);
+if (!$dbhandle) die ($error);
+$ok = sqlite_exec($dbhandle,"select value from db_version", $error);
+sqlite_close($dbhandle);
+if (!$ok){
+ print "delete previous table version\n";
+ if (file_exists($postfix_dir.$postfix_db))
+ unlink($postfix_dir.$postfix_db);
+ $new_db=0;
+}
if ($new_db==0){
+ $dbhandle = sqlite_open($postfix_dir.$postfix_db, 0666, $error);
$ok = sqlite_exec($dbhandle, $stm, $error);
if (!$ok)
print ("Cannot execute query. $error\n");
+ $ok = sqlite_exec($dbhandle, $stm2, $error);
+ if (!$ok)
+ print ("Cannot execute query. $error\n");
sqlite_close($dbhandle);
}
}
-function print_html($status="CANNOT_BE_NULL"){
- if (is_array($status)){
-
- }
-}
+
$postfix_dir="/var/db/postfix/";
$curr_time = time();
#console script call
if ($argv[1]!=""){
switch ($argv[1]){
+ case "01min":
+ $postfix_arg=array( 'grep' => array(date("H:i",strtotime('-1 min',$curr_time))),
+ 'time' => '-1 min');
+ break;
case "10min":
$postfix_arg=array( 'grep' => array(substr(date("H:i",strtotime('-10 min',$curr_time)),0,-1)),
'time' => '-10 min');
@@ -235,17 +469,22 @@ switch ($argv[1]){ $postfix_arg=array( 'grep' => array(date("H:",strtotime('-01 hour',$curr_time))),
'time' => '-01 hour');
break;
+ case "04hour":
+ $postfix_arg=array( 'grep' => array(date("H:",strtotime('-04 hour',$curr_time)),date("H:",strtotime('-03 hour',$curr_time)),
+ date("H:",strtotime('-02 hour',$curr_time)),date("H:",strtotime('-01 hour',$curr_time))),
+ 'time' => '-04 hour');
+ break;
case "24hours":
$postfix_arg=array( 'grep' => array('00:','01:','02:','03:','04:','05:','06:','07:','08:','09:','10:','11:',
'12:','13:','14:','15:','16:','17:','18:','19:','20:','21:','22:','23:'),
'time' => '-01 day');
break;
- case "24hours2":
+ case "02days":
$postfix_arg=array( 'grep' => array('00:','01:','02:','03:','04:','05:','06:','07:','08:','09:','10:','11:',
'12:','13:','14:','15:','16:','17:','18:','19:','20:','21:','22:','23:'),
'time' => '-02 day');
break;
- case "24hours3":
+ case "03days":
$postfix_arg=array( 'grep' => array('00:','01:','02:','03:','04:','05:','06:','07:','08:','09:','10:','11:',
'12:','13:','14:','15:','16:','17:','18:','19:','20:','21:','22:','23:'),
'time' => '-03 day');
@@ -254,14 +493,23 @@ switch ($argv[1]){ default:
die ("invalid parameters\n");
}
-$postfix_db=date("Y-m-d",strtotime($postfix_arg['time'],$curr_time)).".db";
+# get remote log from remote server
+get_remote_log();
+# get local log from logfile
grep_log();
}
#http client call
if ($_REQUEST['files']!= ""){
#do search
- $queue=($_REQUEST['queue']=="QUEUE"?"mail_queue":"mail_noqueue");
+ if($_REQUEST['queue']=="QUEUE"){
+ $stm="select * from mail_from, mail_to ,mail_status where mail_from.id=mail_to.from_id and mail_to.status=mail_status.id ";
+ $last_next=" and ";
+ }
+ else{
+ $stm="select * from mail_noqueue";
+ $last_next=" where ";
+ }
$limit_prefix=(preg_match("/\d+/",$_REQUEST['limit'])?"limit ":"");
$limit=(preg_match("/\d+/",$_REQUEST['limit'])?$_REQUEST['limit']:"");
$files= explode(",", $_REQUEST['files']);
@@ -269,40 +517,70 @@ if ($_REQUEST['files']!= ""){ $total_result=0;
foreach ($files as $postfix_db)
if (file_exists($postfix_dir.'/'.$postfix_db)){
- $last_next="";
$dbhandle = sqlite_open($postfix_dir.'/'.$postfix_db, 0666, $error);
- $stm='select * from '.$queue;
if ($_REQUEST['from']!= ""){
$next=($last_next==" and "?" and ":" where ");
$last_next=" and ";
- $stm .=$next."fromm in('".$_REQUEST['from']."')";
+ if (preg_match('/\*/',$_REQUEST['from']))
+ $stm .=$next."fromm like '".preg_replace('/\*/','%',$_REQUEST['from'])."'";
+ else
+ $stm .=$next."fromm in('".$_REQUEST['from']."')";
}
if ($_REQUEST['to']!= ""){
$next=($last_next==" and "?" and ":" where ");
$last_next=" and ";
- $stm .=$next."too in('".$_REQUEST['to']."')";
+ if (preg_match('/\*/',$_REQUEST['to']))
+ $stm .=$next."too like '".preg_replace('/\*/','%',$_REQUEST['to'])."'";
+ else
+ $stm .=$next."too in('".$_REQUEST['to']."')";
}
- if ($_REQUEST['sid']!= ""){
+ if ($_REQUEST['sid']!= "" && $_REQUEST['queue']=="QUEUE"){
$next=($last_next==" and "?" and ":" where ");
$last_next=" and ";
$stm .=$next."sid in('".$_REQUEST['sid']."')";
}
- if ($_REQUEST['subject']!= ""){
+ if ($_REQUEST['relay']!= "" && $_REQUEST['queue']=="QUEUE"){
$next=($last_next==" and "?" and ":" where ");
$last_next=" and ";
- $stm .=$next."subject like '%".$_REQUEST['subject']."%'";
+ if (preg_match('/\*/',$_REQUEST['subject']))
+ $stm .=$next."relay like '".preg_replace('/\*/','%',$_REQUEST['relay'])."'";
+ else
+ $stm .=$next."relay = '".$_REQUEST['relay']."'";
}
- if ($_REQUEST['msgid']!= ""){
+ if ($_REQUEST['subject']!= "" && $_REQUEST['queue']=="QUEUE"){
$next=($last_next==" and "?" and ":" where ");
$last_next=" and ";
- $stm .=$next."msgid = '".$_REQUEST['msgid']."'";
+ if (preg_match('/\*/',$_REQUEST['subject']))
+ $stm .=$next."subject like '".preg_replace('/\*/','%',$_REQUEST['subject'])."'";
+ else
+ $stm .=$next."subject = '".$_REQUEST['subject']."'";
}
+ if ($_REQUEST['msgid']!= "" && $_REQUEST['queue']=="QUEUE"){
+ $next=($last_next==" and "?" and ":" where ");
+ $last_next=" and ";
+ if (preg_match('/\*/',$_REQUEST['msgid']))
+ $stm .=$next."msgid like '".preg_replace('/\*/','%',$_REQUEST['msgid'])."'";
+ else
+ $stm .=$next."msgid = '".$_REQUEST['msgid']."'";
+ }
+ if ($_REQUEST['server']!= "" ){
+ $next=($last_next==" and "?" and ":" where ");
+ $last_next=" and ";
+ if( $_REQUEST['queue']=="QUEUE")
+ $stm .=$next."mail_from.server = '".$_REQUEST['server']."'";
+ else
+ $stm .=$next."server = '".$_REQUEST['server']."'";
+ }
+
if ($_REQUEST['status']!= ""){
$next=($last_next==" and "?" and ":" where ");
$last_next=" and ";
- $stm .=$next."status = '".$_REQUEST['status']."'";
+ $stm .=$next."mail_status.info = '".$_REQUEST['status']."'";
}
- $result = sqlite_query($dbhandle, $stm." order by date desc $limit_prefix $limit ");
+ #print "<pre>".$stm;
+ #$stm = "select * from mail_to,mail_status where mail_to.status=mail_status.id";
+ $result = sqlite_query($dbhandle, $stm." order by date desc $limit_prefix $limit ");
+ #$result = sqlite_query($dbhandle, $stm." $limit_prefix $limit ");
if (preg_match("/\d+/",$_REQUEST['limit'])){
for ($i = 1; $i <= $limit; $i++) {
$row = sqlite_fetch_array($result, SQLITE_ASSOC);
@@ -316,12 +594,32 @@ if ($_REQUEST['files']!= ""){ sqlite_close($dbhandle);
}
$fields= explode(",", $_REQUEST['fields']);
- if ($queue=="mail_noqueue"){
+ if ($_REQUEST['sbutton']=='export'){
+ print '<table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0">';
+ print '<tr><td colspan="'.count($fields).'" valign="top" class="listtopic">'.gettext("Search Results").'</td></tr>';
+ print '<tr>';
+ $header="";
+ foreach ($stm_fetch as $mail){
+ foreach ($mail as $key => $data){
+ if (!preg_match("/$key/",$header))
+ $header .= $key.",";
+ $export.=preg_replace('/,/',"",$mail[$key]).",";
+ }
+ $export.= "\n";
+ }
+ print '<td class="tabcont"><textarea id="varnishlogs" rows="50" cols="100%">';
+ print "This export is in csv format, paste it without this line on any software that handles csv files.\n\n".$header."\n".$export;
+ print "</textarea></td></tr></table>";
+ }
+ else{
+ if ($_REQUEST['queue']=="NOQUEUE"){
print '<table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0">';
print '<tr><td colspan="'.count($fields).'" valign="top" class="listtopic">'.gettext("Search Results").'</td></tr>';
print '<tr>';
if(in_array("date",$fields))
print '<td class="listlr"><strong>date</strong></td>';
+ if(in_array("server",$fields))
+ print '<td class="listlr"><strong>server</strong></td>';
if(in_array("from",$fields))
print '<td class="listlr"><strong>From</strong></td>';
if(in_array("to",$fields))
@@ -337,6 +635,8 @@ if ($_REQUEST['files']!= ""){ print '<tr>';
if(in_array("date",$fields))
print '<td class="listlr">'.$mail['date'].'</td>';
+ if(in_array("server",$fields))
+ print '<td class="listlr">'.$mail['server'].'</td>';
if(in_array("from",$fields))
print '<td class="listlr">'.$mail['fromm'].'</td>';
if(in_array("to",$fields))
@@ -357,6 +657,8 @@ if ($_REQUEST['files']!= ""){ print '<tr>';
if(in_array("date",$fields))
print '<td class="listlr" ><strong>Date</strong></td>';
+ if(in_array("server",$fields))
+ print '<td class="listlr" ><strong>Server</strong></td>';
if(in_array("from",$fields))
print '<td class="listlr" ><strong>From</strong></td>';
if(in_array("to",$fields))
@@ -383,33 +685,34 @@ if ($_REQUEST['files']!= ""){ print '<td class="listlr" ><strong>Relay</strong></td>';
print '</tr>';
foreach ($stm_fetch as $mail){
- print '<tr>';
if(in_array("date",$fields))
- print '<td class="listlr">'.$mail['date'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.date'].'</td>';
+ if(in_array("server",$fields))
+ print '<td class="listlr">'.$mail['mail_from.server'].'</td>';
if(in_array("from",$fields))
- print '<td class="listlr">'.$mail['fromm'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.fromm'].'</td>';
if(in_array("to",$fields))
- print '<td class="listlr">'.$mail['too'].'</td>';
+ print '<td class="listlr">'.$mail['mail_to.too'].'</td>';
if(in_array("subject",$fields))
- print '<td class="listlr">'.$mail['subject'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.subject'].'</td>';
if(in_array("delay",$fields))
- print '<td class="listlr">'.$mail['delay'].'</td>';
+ print '<td class="listlr">'.$mail['mail_to.delay'].'</td>';
if(in_array("status",$fields))
- print '<td class="listlr">'.$mail['status'].'</td>';
+ print '<td class="listlr">'.$mail['mail_status.info'].'</td>';
if(in_array("status_info",$fields))
- print '<td class="listlr">'.$mail['status_info'].'</td>';
+ print '<td class="listlr">'.$mail['mail_to.status_info'].'</td>';
if(in_array("size",$fields))
- print '<td class="listlr">'.$mail['size'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.size'].'</td>';
if(in_array("helo",$fields))
- print '<td class="listlr">'.$mail['helo'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.helo'].'</td>';
if(in_array("sid",$fields))
- print '<td class="listlr">'.$mail['sid'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.sid'].'</td>';
if(in_array("msgid",$fields))
- print '<td class="listlr">'.$mail['msgid'].'</td>';
+ print '<td class="listlr">'.$mail['mail_from.msgid'].'</td>';
if(in_array("bounce",$fields))
- print '<td class="listlr">'.$mail['bounce'].'</td>';
+ print '<td class="listlr">'.$mail['mail_to.bounce'].'</td>';
if(in_array("relay",$fields))
- print '<td class="listlr">'.$mail['relay'].'</td>';
+ print '<td class="listlr">'.$mail['mail_to.relay'].'</td>';
print '</tr>';
$total_result++;
}
@@ -418,6 +721,7 @@ if ($_REQUEST['files']!= ""){ print '<td ><strong>Total:</strong></td>';
print '<td ><strong>'.$total_result.'</strong></td>';
print '</tr>';
- print '</table>';
+ print '</table>';
+ }
}
?>
\ No newline at end of file diff --git a/config/postfix/postfix.priv.inc b/config/postfix/postfix.priv.inc new file mode 100644 index 00000000..6e8b5554 --- /dev/null +++ b/config/postfix/postfix.priv.inc @@ -0,0 +1,24 @@ +<?php + +global $priv_list; + +$priv_list['page-diagnostics-search-email'] = array(); +$priv_list['page-diagnostics-search-email']['name'] = "WebCfg - Diagnostics: Postfix search email"; +$priv_list['page-diagnostics-search-email']['descr'] = "Allow access to postfix search page."; +$priv_list['page-diagnostics-search-email']['match'] = array(); +$priv_list['page-diagnostics-search-email']['match'][] = "postfix_search.php*"; + +$priv_list['page-status-postfix-queue'] = array(); +$priv_list['page-status-postfix-queue']['name'] = "WebCfg - Status: Postfix queue"; +$priv_list['page-status-postfix-queue']['descr'] = "Allow access to postfix queue page."; +$priv_list['page-status-postfix-queue']['match'] = array(); +$priv_list['page-status-postfix-queue']['match'][] = "postfix_queue.php*"; + +$priv_list['page-services-postfix-forwarder'] = array(); +$priv_list['page-services-postfix-forwarder']['name'] = "WebCfg - Services: All xml pages (config)."; +$priv_list['page-services-postfix-forwarder']['descr'] = "Allow access to any xml package page."; +$priv_list['page-services-postfix-forwarder']['match'] = array(); +$priv_list['page-services-postfix-forwarder']['match'][] = "pkg_edit.php*"; +$priv_list['page-services-postfix-forwarder']['match'][] = "postfix*.php*"; + +?>
\ No newline at end of file diff --git a/config/postfix/postfix.sh b/config/postfix/postfix.sh new file mode 100755 index 00000000..97fa5122 --- /dev/null +++ b/config/postfix/postfix.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# This file was automatically generated +# by the pfSense service handler. + +rc_start() { + /usr/local/sbin/postfix start + +} + +rc_stop() { + /usr/local/sbin/postfix stop + +} + +case $1 in + start) + rc_start + ;; + stop) + rc_stop + ;; + restart) + rc_stop + rc_start + ;; +esac + diff --git a/config/postfix/postfix.widget.php b/config/postfix/postfix.widget.php index dd43afa4..4c0c2b45 100755 --- a/config/postfix/postfix.widget.php +++ b/config/postfix/postfix.widget.php @@ -45,10 +45,22 @@ $img['Healthy']="<img src ='/themes/{$g['theme']}/images/icons/icon_interface_up #var_dump($pfb_table); #exit; ?><div id='postfix'><?php +global $config; + +$size=$config['installedpackages']['postfix']['config'][0]['widget_size']; +if (preg_match('/\d+/',$config['installedpackages']['postfix']['config'][0]['widget_days'])) + $days=$config['installedpackages']['postfix']['config'][0]['widget_days'] * -1; +else + $days=-3; +if (preg_match('/\d+/',$config['installedpackages']['postfix']['config'][0]['widget_size'])) + $size=$config['installedpackages']['postfix']['config'][0]['widget_size']; +else + $size='100000000';#100mb + $postfix_dir="/var/db/postfix/"; $curr_time = time(); -for ($z = 0; $z > -3; $z--){ +for ($z = 0; $z > $days; $z--){ if ($z==0) $postfix_db=date("Y-m-d"); @@ -56,39 +68,45 @@ else $postfix_db=date("Y-m-d",strtotime("$z day",$curr_time)); if (file_exists($postfix_dir.'/'.$postfix_db.".db")){ - $dbhandle = sqlite_open($postfix_dir.'/'.$postfix_db.".db", 0666, $error); #noqueue open_table(); print "<td class=\"vncellt\"><strong><center>$postfix_db</center></strong></td>"; close_table(); open_table(); - $stm="select count(*) as total from mail_noqueue"; - $result = sqlite_query($dbhandle, $stm); - $row_noqueue = sqlite_fetch_array($result, SQLITE_ASSOC); - - #queue - $result = sqlite_query($dbhandle, $stm); - $stm="select status,count(*) as total from mail_queue group by status order by status"; - $result = sqlite_query($dbhandle, $stm); - $reader=""; - $count=""; - for ($i = 1; $i <= 15; $i++) { - $row = sqlite_fetch_array($result, SQLITE_ASSOC); - if (is_array($row)){ - if (preg_match("/\w+/",$row['status'])){ - $reader.="<td class=\"listlr\"width=50%><strong>".ucfirst($row['status'])."</strong></td>\n"; - if ($row['status']=="reject") - $row['total']=+$row_noqueue['total']; - $count.="<td class=\"listlr\">".$row['total']."</td>\n"; - } - } - } - print "<tr>".$reader."</tr>"; - print "<tr>".$count."</tr>"; + if (@filesize($postfix_dir.'/'.$postfix_db.".db")< $size){ + $dbhandle = sqlite_open($postfix_dir.'/'.$postfix_db.".db", 0666, $error); + $stm="select count(*) as total from mail_noqueue"; + $result = sqlite_query($dbhandle, $stm); + $row_noqueue = sqlite_fetch_array($result, SQLITE_ASSOC); + + #queue + $result = sqlite_query($dbhandle, $stm); + $stm="select mail_status.info as status,count(*) as total from mail_to,mail_status where mail_to.status=mail_status.id group by status order by mail_status.info"; + $result = sqlite_query($dbhandle, $stm); + $reader=""; + $count=""; + for ($i = 1; $i <= 15; $i++) { + $row = sqlite_fetch_array($result, SQLITE_ASSOC); + if (is_array($row)){ + if (preg_match("/\w+/",$row['status'])){ + $reader.="<td class=\"listlr\"width=50%><strong>".ucfirst($row['status'])."</strong></td>\n"; + if ($row['status']=="reject") + $row['total']=+$row_noqueue['total']; + $count.="<td class=\"listlr\">".$row['total']."</td>\n"; + } + } + } + print "<tr>".$reader."</tr>"; + print "<tr>".$count."</tr>"; + $result = sqlite_query($dbhandle, $stm); + sqlite_close($dbhandle); + } + else{ + print "<td class=\"listlr\"width=100%><center>File size is too large.</center></td>"; + } close_table(); echo "<br>"; - $result = sqlite_query($dbhandle, $stm); - sqlite_close($dbhandle); + } } echo" </tr>"; @@ -107,11 +125,10 @@ echo"</table></div>"; parameters: pars, onComplete: activitycallback_postfix }); - //I know it's ugly but works. - setTimeout('getstatus_postfix()', 60000); } function activitycallback_postfix(transport) { $('postfix').innerHTML = transport.responseText; + setTimeout('getstatus_postfix()', 60000); } getstatus_postfix(); </script> diff --git a/config/postfix/postfix.xml b/config/postfix/postfix.xml index e7150267..29dbe170 100644 --- a/config/postfix/postfix.xml +++ b/config/postfix/postfix.xml @@ -54,11 +54,17 @@ <url>pkg_edit.php?xml=postfix.xml&id=0</url> </menu> <menu> - <name>Search Email</name> + <name>Search Mail</name> <tooltiptext>Search postfix logs</tooltiptext> <section>Diagnostics</section> <url>/postfix_search.php</url> </menu> + <menu> + <name>Postfix Queue</name> + <tooltiptext>check postfix queue</tooltiptext> + <section>Status</section> + <url>/postfix_queue.php</url> + </menu> <service> <name>postfix</name> <rcfile>postfix.sh</rcfile> @@ -75,6 +81,11 @@ <chmod>0755</chmod> </additional_files_needed> <additional_files_needed> + <item>http://www.pfsense.org/packages/config/postfix/postfix_domains.xml</item> + <prefix>/usr/local/pkg/</prefix> + <chmod>0755</chmod> + </additional_files_needed> + <additional_files_needed> <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.xml</item> <prefix>/usr/local/pkg/</prefix> <chmod>0755</chmod> @@ -115,6 +126,21 @@ <chmod>0755</chmod> </additional_files_needed> <additional_files_needed> + <item>http://www.pfsense.org/packages/config/postfix/postfix_about.php</item> + <prefix>/usr/local/www/</prefix> + <chmod>0755</chmod> + </additional_files_needed> + <additional_files_needed> + <item>http://www.pfsense.org/packages/config/postfix/postfix_queue.php</item> + <prefix>/usr/local/www/</prefix> + <chmod>0755</chmod> + </additional_files_needed> + <additional_files_needed> + <item>http://www.pfsense.org/packages/config/postfix/postfix.priv.inc</item> + <prefix>/etc/inc/priv/</prefix> + <chmod>0755</chmod> + </additional_files_needed> + <additional_files_needed> <item>http://www.pfsense.org/packages/config/postfix/adexport.pl</item> <prefix>/usr/local/etc/postfix/</prefix> <chmod>0755</chmod> @@ -126,29 +152,43 @@ <active/> </tab> <tab> - <text>ACLs / Filter Maps</text> - <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + <text>Domains</text> + <url>/pkg_edit.php?xml=postfix_domains.xml&id=0</url> </tab> <tab> - <text>Valid recipients</text> + <text>Recipients</text> <url>/pkg_edit.php?xml=postfix_recipients.xml&id=0</url> </tab> <tab> + <text>Access Lists</text> + <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + </tab> + <tab> <text>Antispam</text> <url>/pkg_edit.php?xml=postfix_antispam.xml&id=0</url> </tab> <tab> - <text>XMLRPC Sync</text> + <text>Sync</text> <url>/pkg_edit.php?xml=postfix_sync.xml&id=0</url> </tab> <tab> - <text>View config files</text> + <text>View config</text> <url>/postfix_view_config.php</url> </tab> <tab> - <text>Search Email</text> + <text>Search mail</text> <url>/postfix_search.php</url> </tab> + <tab> + <text>Queue</text> + <url>/postfix_queue.php</url> + </tab> + + <tab> + <text>About</text> + <url>/postfix_about.php</url> + </tab> + </tabs> <fields> <field> @@ -225,6 +265,7 @@ Inlcude <strong>/^Subject:/ WARN</strong> line in Acl Headers after all your Subject rules.]]></description> <type>select</type> <options> + <option><name>Every minute</name><value>01min</value></option> <option><name>Every 10 minutes</name><value>10min</value></option> <option><name>Every Hour</name><value>01hour</value></option> <option><name>Once a day</name><value>24hours</value></option> @@ -256,29 +297,31 @@ </field> <field> - <name>Domains to Forward</name> + <name>Widget options</name> <type>listtopic</type> </field> - <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>30</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>40</size> - </rowhelperfield> - </rowhelper> + <field> + <fielddescr>list days</fielddescr> + <fieldname>widget_days</fieldname> + <type>select</type> + <options> + <option><name>1</name><value>1</value></option> + <option><name>3</name><value>3</value></option> + <option><name>5</name><value>5</value></option> + <option><name>7</name><value>7</value></option> + <option><name>9</name><value>9</value></option> + <option><name>12</name><value>12</value></option> + </options> + <description>How many days to display in widget. Default is 3.</description> + </field> + <field> + <fielddescr>Max file size</fielddescr> + <fieldname>widget_size</fieldname> + <type>input</type> + <size>10</size> + <description> + The maximun size in bytes sqlite file we get stats. Default is 100000000 (100mb). + </description> </field> </fields> <custom_php_install_command> diff --git a/config/postfix/postfix_about.php b/config/postfix/postfix_about.php new file mode 100755 index 00000000..3f3e272a --- /dev/null +++ b/config/postfix/postfix_about.php @@ -0,0 +1,102 @@ +<?php +/* + postfix_about.php + part of pfSense (http://www.pfsense.com/) + Copyright (C) 2011 Marcello Coutinho <marcellocoutinho@gmail.com> + based on varnish_view_config. + 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("guiconfig.inc"); + +$pfSversion = str_replace("\n", "", file_get_contents("/etc/version")); +if(strstr($pfSversion, "1.2")) + $one_two = true; + +$pgtitle = "Diagnostics: Search Mail"; +include("head.inc"); + +?> +<body link="#0000CC" vlink="#0000CC" alink="#0000CC"> +<?php include("fbegin.inc"); ?> + +<?php if($one_two): ?> +<p class="pgtitle"><?=$pgtitle?></font></p> +<?php endif; ?> +<?php if ($input_errors) print_input_errors($input_errors); ?> +<?php if ($savemsg) print_info_box($savemsg); ?> + +<!-- <form action="postfix_view_config.php" method="post"> --> + +<div id="mainlevel"> + <table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr><td> + <?php + $tab_array = array(); + $tab_array[] = array(gettext("General"), false, "/pkg_edit.php?xml=postfix.xml&id=0"); + $tab_array[] = array(gettext("Domains"), false, "/pkg_edit.php?xml=postfix_domains.xml&id=0"); + $tab_array[] = array(gettext("Recipients"), false, "/pkg_edit.php?xml=postfix_recipients.xml&id=0"); + $tab_array[] = array(gettext("Access Lists"), false, "/pkg_edit.php?xml=postfix_acl.xml&id=0"); + $tab_array[] = array(gettext("Antispam"), false, "/pkg_edit.php?xml=postfix_antispam.xml&id=0"); + $tab_array[] = array(gettext("Sync"), false, "/pkg_edit.php?xml=postfix_sync.xml&id=0"); + $tab_array[] = array(gettext("View config"), false, "/postfix_view_config.php"); + $tab_array[] = array(gettext("Search mail"), false, "/postfix_search.php"); + $tab_array[] = array(gettext("Queue"), false, "/postfix_queue.php"); + $tab_array[] = array(gettext("About"), true, "/postfix_about.php"); + display_top_tabs($tab_array); +?> + </td></tr> + <tr> + + <td> + <div id="mainarea"> + <table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0"> + <tr><td></td></tr> + <tr> + <td colspan="2" valign="top" class="listtopic"><?=gettext("About Postfix Forwarder"); ?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("Credits ");?></td> + <td width="78%" class="vtable"><?=gettext("Package v2 Created by <a target=_new href='http://forum.pfsense.org/index.php?action=profile;u=4710'>Marcello Coutinho</a><br><br>");?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("Donatios ");?></td> + <td width="78%" class="vtable"><?=gettext("If you like this package, please <a target=_new href='http://www.pfsense.org/index.php?option=com_content&task=view&id=47&Itemid=77'>donate to pfSense project</a>.<br><br> + If you want that your donation goes to this package developer, make a note on donation forwarding it to me.<br><br>");?></td> + </tr> + </table> + + </div> + </td> + </tr> + + + </table> + <br> + <div id="search_results"></div> +</div> +<!-- </form> --> +<?php include("fend.inc"); ?> +</body> +</html> diff --git a/config/postfix/postfix_acl.xml b/config/postfix/postfix_acl.xml index 5227228d..9837bf0a 100644 --- a/config/postfix/postfix_acl.xml +++ b/config/postfix/postfix_acl.xml @@ -51,77 +51,49 @@ <section>Services</section> <url>pkg_edit.php?xml=postfix.xml&id=0</url> </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> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_acl.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_antispam.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_sync.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_view_config.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <tabs> +<tabs> <tab> <text>General</text> <url>/pkg_edit.php?xml=postfix.xml&id=0</url> </tab> <tab> - <text>ACLs / Filter Maps</text> - <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> - <active/> + <text>Domains</text> + <url>/pkg_edit.php?xml=postfix_domains.xml&id=0</url> </tab> <tab> - <text>Valid recipients</text> + <text>Recipients</text> <url>/pkg_edit.php?xml=postfix_recipients.xml&id=0</url> </tab> <tab> + <text>Access Lists</text> + <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + <active/> + </tab> + <tab> <text>Antispam</text> <url>/pkg_edit.php?xml=postfix_antispam.xml&id=0</url> </tab> <tab> - <text>XMLRPC Sync</text> + <text>Sync</text> <url>/pkg_edit.php?xml=postfix_sync.xml&id=0</url> </tab> <tab> - <text>View config files</text> + <text>View config</text> <url>/postfix_view_config.php</url> </tab> <tab> - <text>Search Email</text> + <text>Search mail</text> <url>/postfix_search.php</url> </tab> + <tab> + <text>Queue</text> + <url>/postfix_queue.php</url> + </tab> + <tab> + <text>About</text> + <url>/postfix_about.php</url> + </tab> + </tabs> <fields> <field> @@ -172,6 +144,19 @@ <type>listtopic</type> </field> <field> + <fielddescr>MyNetworks</fielddescr> + <fieldname>mynetworks</fieldname> + <description><![CDATA[<a href='http://www.postfix.org/postconf.5.html#mynetworks'>Paste the list of "trusted" SMTP clients that have more privileges than "strangers" one per line.</a><br> + In particular, "trusted" SMTP clients are allowed to relay mail through Postfix. See the smtpd_recipient_restrictions parameter description in the postconf(5) manual.Hint:<br>192.168.0.3<br> + 192.168.1.0/24]]> + </description> + <type>textarea</type> + <cols>60</cols> + <rows>10</rows> + <encoding>base64</encoding> + </field> + + <field> <fielddescr>CIDR</fielddescr> <fieldname>cal_cidr</fieldname> <description><![CDATA[Paste your client access list in CIDR format(standard ip/domain and action) one per line.<br> @@ -179,8 +164,8 @@ 192.168.3.2 OK<br>spammer.junkdomain.com REJECT]]> </description> <type>textarea</type> - <cols>83</cols> - <rows>15</rows> + <cols>60</cols> + <rows>10</rows> <encoding>base64</encoding> </field> <field> @@ -192,8 +177,8 @@ /.*\.adsl\..*/ REJECT DSLs not allowed]]> </description> <type>textarea</type> - <cols>83</cols> - <rows>15</rows> + <cols>70</cols> + <rows>10</rows> <encoding>base64</encoding> </field> </fields> diff --git a/config/postfix/postfix_antispam.xml b/config/postfix/postfix_antispam.xml index 8d293522..c4772085 100644 --- a/config/postfix/postfix_antispam.xml +++ b/config/postfix/postfix_antispam.xml @@ -52,77 +52,49 @@ <section>Services</section> <url>pkg_edit.php?xml=postfix_antispam.xml&id=0</url> </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> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_acl.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_antispam.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_sync.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_view_config.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> <tabs> <tab> <text>General</text> <url>/pkg_edit.php?xml=postfix.xml&id=0</url> </tab> <tab> - <text>ACLs / Filter Maps</text> - <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + <text>Domains</text> + <url>/pkg_edit.php?xml=postfix_domains.xml&id=0</url> </tab> <tab> - <text>Valid recipients</text> + <text>Recipients</text> <url>/pkg_edit.php?xml=postfix_recipients.xml&id=0</url> </tab> <tab> + <text>Access Lists</text> + <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + </tab> + <tab> <text>Antispam</text> <url>/pkg_edit.php?xml=postfix_antispam.xml&id=0</url> <active/> </tab> <tab> - <text>XMLRPC Sync</text> + <text>Sync</text> <url>/pkg_edit.php?xml=postfix_sync.xml&id=0</url> </tab> <tab> - <text>View config files</text> + <text>View config</text> <url>/postfix_view_config.php</url> </tab> <tab> - <text>Search Email</text> + <text>Search mail</text> <url>/postfix_search.php</url> </tab> + <tab> + <text>Queue</text> + <url>/postfix_queue.php</url> + </tab> + <tab> + <text>About</text> + <url>/postfix_about.php</url> + </tab> + </tabs> <fields> <field> @@ -204,6 +176,18 @@ </description> </field> <field> + <fielddescr>Anvil Daemon</fielddescr> + <fieldname>anvil</fieldname> + <type>select</type> + <options> + <option><name>Enabled only when using postscreen</name><value>postscreen</value></option> + <option><name>Enabled</name><value>enabled</value></option> + <option><name>Disabled</name><value>disabled</value></option> + </options> + <description><![CDATA[anvil - <a href='http://www.postfix.org/anvil.8.html'>Postfix session count and request rate control.</a><br>You can disable it if your server relays mail from internal clients to internet.]]> + </description> + </field> + <field> <fielddescr>RBL server List</fielddescr> <fieldname>rbl_servers</fieldname> <description><![CDATA[ diff --git a/config/postfix/postfix_domains.xml b/config/postfix/postfix_domains.xml new file mode 100644 index 00000000..23d80e12 --- /dev/null +++ b/config/postfix/postfix_domains.xml @@ -0,0 +1,145 @@ +<?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 + Copyright (C) 2011 Marcello Coutinho + + 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>postfixdomains</name> + <version>1.0</version> + <title>Services: Postfix relay and antispam</title> + <include_file>/usr/local/pkg/postfix.inc</include_file> + <menu> + <name>Postfix Forwarder</name> + <tooltiptext>Configure Postfix Forwarder</tooltiptext> + <section>Services</section> + <url>pkg_edit.php?xml=postfix.xml&id=0</url> + </menu> + <menu> + <name>Search Email</name> + <tooltiptext>Search postfix logs</tooltiptext> + <section>Diagnostics</section> + <url>/postfix_search.php</url> + </menu> +<tabs> + <tab> + <text>General</text> + <url>/pkg_edit.php?xml=postfix.xml&id=0</url> + </tab> + <tab> + <text>Domains</text> + <url>/pkg_edit.php?xml=postfix_domains.xml&id=0</url> + <active/> + </tab> + <tab> + <text>Recipients</text> + <url>/pkg_edit.php?xml=postfix_recipients.xml&id=0</url> + </tab> + <tab> + <text>Access Lists</text> + <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + </tab> + <tab> + <text>Antispam</text> + <url>/pkg_edit.php?xml=postfix_antispam.xml&id=0</url> + </tab> + <tab> + <text>Sync</text> + <url>/pkg_edit.php?xml=postfix_sync.xml&id=0</url> + </tab> + <tab> + <text>View config</text> + <url>/postfix_view_config.php</url> + </tab> + <tab> + <text>Search mail</text> + <url>/postfix_search.php</url> + </tab> + <tab> + <text>Queue</text> + <url>/postfix_queue.php</url> + </tab> + <tab> + <text>About</text> + <url>/postfix_about.php</url> + </tab> + +</tabs> + <fields> + <field> + <name>Domains to Forward</name> + <type>listtopic</type> + </field> + <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>30</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>40</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> diff --git a/config/postfix/postfix_queue.php b/config/postfix/postfix_queue.php new file mode 100755 index 00000000..eaf6b7f5 --- /dev/null +++ b/config/postfix/postfix_queue.php @@ -0,0 +1,242 @@ +<?php +/* + postfix_view_config.php + part of pfSense (http://www.pfsense.com/) + Copyright (C) 2011 Marcello Coutinho <marcellocoutinho@gmail.com> + based on varnish_view_config. + 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("guiconfig.inc"); +function get_cmd(){ + if ($_REQUEST['cmd'] =='mailq'){ + #exec("/usr/local/bin/mailq" . escapeshellarg('^'.$m.$j." ".$hour.".*".$grep)." /var/log/maillog", $lists); + exec("/usr/local/bin/mailq", $mailq); + print '<table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0">'; + print '<tr><td colspan="6" valign="top" class="listtopic">'.gettext($_REQUEST['cmd']." Results").'</td></tr>'; + print '<tr><td class="listlr"><strong>SID</strong></td>'; + print '<td class="listlr"><strong>size</strong></td>'; + print '<td class="listlr"><strong>date</strong></td>'; + print '<td class="listlr"><strong>sender</strong></td>'; + print '<td class="listlr"><strong>info</strong></td>'; + print '<td class="listlr"><strong>Recipient </strong></td></tr>'; + #print '<table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0">'; + $td='<td valign="top" class="listlr">'; + $sid=""; + foreach ($mailq as $line){ + if(preg_match("/-Queue ID- --Size--/",$line,$matches)) + print""; + elseif (preg_match("/(\w+)\s+(\d+)\s+(\w+\s+\w+\s+\d+\s+\d+:\d+:\d+)\s+(.*)/",$line,$matches)){ + print '<tr>'.$td.$matches[1].'</td>'.$td.$matches[2].'</td>'.$td.$matches[3].'</td>'.$td.$matches[4]; + $sid=$matches[1]; + } + elseif (preg_match("/(\s+|)(\W\w+.*)/",$line,$matches) && $sid !="") + print $td.$matches[2].'</td>'; + elseif (preg_match("/\s+(\w+.*)/",$line,$matches) && $sid !=""){ + print $td.$matches[1].'</td></tr>'; + $sid=""; + } + } + print '</table>'; + } + if ($_REQUEST['cmd'] =='qshape'){ + if ($_REQUEST['qshape']!="") + exec("/usr/local/bin/qshape ". preg_replace("/\W/"," ",$_REQUEST['qshape']), $qshape); + else + exec("/usr/local/bin/qshape", $qshape); + print '<table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0">'; + print '<tr><td colspan="12" valign="top" class="listtopic">'.gettext($_REQUEST['cmd']." Results").'</td></tr>'; + $td='<td valign="top" class="listlr">'; + $sid=""; + foreach ($qshape as $line){ + if (preg_match("/\s+(T\s.*)/",$line,$matches)){ + print '<tr><td class="listlr"></td>'; + foreach (explode (" ",preg_replace("/\s+/"," ",$matches[1])) as $count) + print '<td class="listlr"><strong>'.$count.'</strong></td>'; + print "</tr>"; + } + else{ + print "<tr>"; + $line=preg_replace("/^\s+/","",$line); + $line=preg_replace("/\s+/"," ",$line); + foreach (explode (" ",$line) as $count) + print '<td class="listlr"><strong>'.$count.'</strong></td>'; + print "</tr>"; + } + + } + } +} + +if ($_REQUEST['cmd']!=""){ + get_cmd(); + } +else{ + $pfSversion = str_replace("\n", "", file_get_contents("/etc/version")); + if(strstr($pfSversion, "1.2")) + $one_two = true; + + $pgtitle = "Status: Postfix Mail Queue"; + include("head.inc"); + + ?> + <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> + <?php include("fbegin.inc"); ?> + + <?php if($one_two): ?> + <p class="pgtitle"><?=$pgtitle?></font></p> + <?php endif; ?> + + <?php if ($savemsg) print_info_box($savemsg); ?> + + <form action="postfix_view_config.php" method="post"> + + <div id="mainlevel"> + <table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr><td> + <?php + $tab_array = array(); + $tab_array[] = array(gettext("General"), false, "/pkg_edit.php?xml=postfix.xml&id=0"); + $tab_array[] = array(gettext("Domains"), false, "/pkg_edit.php?xml=postfix_domains.xml&id=0"); + $tab_array[] = array(gettext("Recipients"), false, "/pkg_edit.php?xml=postfix_recipients.xml&id=0"); + $tab_array[] = array(gettext("Access Lists"), false, "/pkg_edit.php?xml=postfix_acl.xml&id=0"); + $tab_array[] = array(gettext("Antispam"), false, "/pkg_edit.php?xml=postfix_antispam.xml&id=0"); + $tab_array[] = array(gettext("Sync"), false, "/pkg_edit.php?xml=postfix_sync.xml&id=0"); + $tab_array[] = array(gettext("View config"), false, "/postfix_view_config.php"); + $tab_array[] = array(gettext("Search mail"), false, "/postfix_search.php"); + $tab_array[] = array(gettext("Queue"), true, "/postfix_queue.php"); + $tab_array[] = array(gettext("About"), false, "/postfix_about.php"); + display_top_tabs($tab_array); + ?> + </td></tr> + <tr> + <td> + <div id="mainarea"> + <table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0"> + <tr><td></td></tr> + <tr> + <td colspan="2" valign="top" class="listtopic"><?=gettext("Postfix Queue"); ?></td></tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("queue command: ");?></td> + <td width="78%" class="vtable"> + <select name="drop3" id="cmd"> + <option value="mailq" selected="selected">mailq</option> + <option value="qshape" selected>qshape</option> + </select><br><?=gettext("Select queue command to run.");?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("update frequency: ");?></td> + <td width="78%" class="vtable"> + <select name="drop3" id="updatef"> + <option value="5" selected="selected">05 seconds</option> + <option value="15">15 Seconds</option> + <option value="30">30 Seconds</option> + <option value="60">One minute</option> + <option value="1" selected>Never</option> + </select><br><?=gettext("Select how often queue cmd will run.");?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("qshape Report flags: ");?></td> + <td width="78%" class="vtable"> + <select name="drop3" id="qshape" multiple="multiple" size="5"> + <option value="hold">hold</option> + <option value="incoming">incoming</option> + <option value="active">active</option> + <option value="deferred">deferred</option> + <option value="maildrop">maildrop</option> + </select><br><?=gettext("Select how often queue will be queried.");?></td> + </tr> + <tr> + <td width="22%" valign="top"></td> + <td width="78%"><input name="Submit" type="button" class="formbtn" id="run" value="<?=gettext("show queue");?>" onclick="get_queue('mailq')"><div id="search_help"></div></td> + </table> + </div> + </td> + </tr> + </table> + <br> + <div> + <table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0"> + <tr> + <td class="tabcont" > + <div id="file_div"></div> + + </td> + </tr> + </table> + </div> + </div> + </form> + <script type="text/javascript"> + function loopSelected(id) + { + var selectedArray = new Array(); + var selObj = document.getElementById(id); + var i; + var count = 0; + for (i=0; i<selObj.options.length; i++) { + if (selObj.options[i].selected) { + selectedArray[count] = selObj.options[i].value; + count++; + } + } + return(selectedArray); + } + + function get_queue(loop) { + //prevent multiple instances + if ($('run').value=="show queue" || loop== 'running'){ + $('run').value="running..."; + $('search_help').innerHTML ="<br><strong>You can change options while running.<br>To Stop seach, change update frequency to Never.</strong>"; + var q_args=loopSelected('qshape'); + var pars = 'cmd='+$('cmd').options[$('cmd').selectedIndex].value; + var pars = pars + '&qshape='+q_args; + var url = "/postfix_queue.php"; + var myAjax = new Ajax.Request( + url, + { + method: 'post', + parameters: pars, + onComplete: activitycallback_queue_file + }); + } + } + function activitycallback_queue_file(transport) { + $('file_div').innerHTML = transport.responseText; + var update=$('updatef').options[$('updatef').selectedIndex].value * 1000; + if (update > 1000){ + setTimeout('get_queue("running")', update); + } + else{ + $('run').value="show queue"; + $('search_help').innerHTML =""; + } + } + </script> + <?php + include("fend.inc"); + } + ?> + </body> + </html> diff --git a/config/postfix/postfix_recipients.xml b/config/postfix/postfix_recipients.xml index 88f4916b..5b46e32c 100644 --- a/config/postfix/postfix_recipients.xml +++ b/config/postfix/postfix_recipients.xml @@ -51,77 +51,49 @@ <section>Services</section> <url>pkg_edit.php?xml=postfix.xml&id=0</url> </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> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_acl.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_antispam.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_sync.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_view_config.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> <tabs> <tab> <text>General</text> <url>/pkg_edit.php?xml=postfix.xml&id=0</url> </tab> <tab> - <text>ACLs / Filter Maps</text> - <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + <text>Domains</text> + <url>/pkg_edit.php?xml=postfix_domains.xml&id=0</url> </tab> <tab> - <text>Valid recipients</text> + <text>Recipients</text> <url>/pkg_edit.php?xml=postfix_recipients.xml&id=0</url> <active/> </tab> <tab> + <text>Access Lists</text> + <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + </tab> + <tab> <text>Antispam</text> <url>/pkg_edit.php?xml=postfix_antispam.xml&id=0</url> </tab> <tab> - <text>XMLRPC Sync</text> + <text>Sync</text> <url>/pkg_edit.php?xml=postfix_sync.xml&id=0</url> </tab> <tab> - <text>View config files</text> + <text>View config</text> <url>/postfix_view_config.php</url> </tab> - <tab> - <text>Search Email</text> + <tab> + <text>Search mail</text> <url>/postfix_search.php</url> </tab> + <tab> + <text>Queue</text> + <url>/postfix_queue.php</url> + </tab> + <tab> + <text>About</text> + <url>/postfix_about.php</url> + </tab> + </tabs> <fields> <field> diff --git a/config/postfix/postfix_search.php b/config/postfix/postfix_search.php index d11505d4..b76f0554 100755 --- a/config/postfix/postfix_search.php +++ b/config/postfix/postfix_search.php @@ -55,12 +55,15 @@ include("head.inc"); <?php $tab_array = array(); $tab_array[] = array(gettext("General"), false, "/pkg_edit.php?xml=postfix.xml&id=0"); - $tab_array[] = array(gettext("ACLs / Filter Maps"), false, "/pkg_edit.php?xml=postfix_acl.xml&id=0"); - $tab_array[] = array(gettext("Valid Recipients"), false, "/pkg_edit.php?xml=postfix_recipients.xml&id=0"); + $tab_array[] = array(gettext("Domains"), false, "/pkg_edit.php?xml=postfix_domains.xml&id=0"); + $tab_array[] = array(gettext("Recipients"), false, "/pkg_edit.php?xml=postfix_recipients.xml&id=0"); + $tab_array[] = array(gettext("Access Lists"), false, "/pkg_edit.php?xml=postfix_acl.xml&id=0"); $tab_array[] = array(gettext("Antispam"), false, "/pkg_edit.php?xml=postfix_antispam.xml&id=0"); - $tab_array[] = array(gettext("XMLRPC Sync"), false, "/pkg_edit.php?xml=postfix_sync.xml&id=0"); - $tab_array[] = array(gettext("View config files"), false, "/postfix_view_config.php"); - $tab_array[] = array(gettext("Search Email"), true, "/postfix_search.php"); + $tab_array[] = array(gettext("Sync"), false, "/pkg_edit.php?xml=postfix_sync.xml&id=0"); + $tab_array[] = array(gettext("View config"), false, "/postfix_view_config.php"); + $tab_array[] = array(gettext("Search mail"), true, "/postfix_search.php"); + $tab_array[] = array(gettext("Queue"), false, "/postfix_queue.php"); + $tab_array[] = array(gettext("About"), false, "/postfix_about.php"); display_top_tabs($tab_array); ?> </td></tr> @@ -76,12 +79,12 @@ include("head.inc"); <tr> <td width="22%" valign="top" class="vncell"><?=gettext("From: ");?></td> <td width="78%" class="vtable"><textarea id="from" rows="2" cols="50%"></textarea> - <br><?=gettext("One email per line.");?></td> + <br><?=gettext("with wildcard'*' only one line else one email per line.<br>");?></td> </tr> <tr> <td width="22%" valign="top" class="vncell"><?=gettext("To: ");?></td> <td width="78%" class="vtable"><textarea id="to" rows="2" cols="50%"></textarea> - <br><?=gettext("One email per line.");?></td> + <br><?=gettext("with wildcard'*' only one line else one email per line.");?></td> </tr> <tr> <td width="22%" valign="top" class="vncell"><?=gettext("SID: ");?></td> @@ -91,13 +94,23 @@ include("head.inc"); <tr> <td width="22%" valign="top" class="vncell"><?=gettext("Subject: ");?></td> <td width="78%" class="vtable"><input type="text" class="formfld unknown" id="subject" size="65%"> - <br><?=gettext("Subject to search, wildcard is '%'");?></td> + <br><?=gettext("Subject to search, wildcard is '*'");?></td> </tr> <tr> <td width="22%" valign="top" class="vncell"><?=gettext("Message_id: ");?></td> <td width="78%" class="vtable"><input type="text" class="formfld unknown" id="msgid" size="65%"> <br><?=gettext("Message unique id.");?></td> </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("server: ");?></td> + <td width="78%" class="vtable"><input type="text" class="formfld unknown" id="server" size="30%"> + <br><?=gettext("postfix server.");?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("Relay: ");?></td> + <td width="78%" class="vtable"><input type="text" class="formfld unknown" id="relay" size="30%"> + <br><?=gettext("Message destination server");?></td> + </tr> <tr> <td width="22%" valign="top" class="vncell"><?=gettext("Message Status: ");?></td> <td width="78%" class="vtable"> @@ -106,7 +119,7 @@ include("head.inc"); <option value="sent">sent</option> <option value="bounced">bounced</option> <option value="reject">reject</option> - <option value="warning">warning</option> + <option value="incoming">incoming</option> </select><br><?=gettext("Max log messages to fetch per Sqlite file.");?></td> </tr> <tr> @@ -135,13 +148,16 @@ include("head.inc"); <?php if ($handle = opendir('/var/db/postfix')) { $total_files=0; - while (false !== ($file = readdir($handle))) - if (preg_match("/(\d+-\d+-\d+).db$/",$file,$matches)){ - $total_files++; - $select_output= '<option value="'.$file.'">'.$matches[1]."</option>\n" . $select_output; - } - closedir($handle); - echo '<select name="drop1" id="Select1" size="'.($total_files>8?8:$total_files+2).'" multiple="multiple">'; + $array_files=array(); + while (false !== ($file = readdir($handle))) + if (preg_match("/(\d+-\d+-\d+).db$/",$file,$matches)) + $array_files[]=array($file,$matches[1]); + closedir($handle); + asort($array_files); + foreach ($array_files as $file) + $select_output= '<option value="'.$file[0].'">'.$file[1]."</option>\n" . $select_output; + + echo '<select name="drop1" id="Select1" size="'.(count($array_files)>10?10:count($array_files)+2).'" multiple="multiple">'; echo $select_output; echo '</select><br>'.gettext("Select what database files you want to use in your search.").'</td></td>'; }?> @@ -156,6 +172,7 @@ include("head.inc"); <option value="delay" selected="selected">Delay</option> <option value="status" selected="selected">Status</option> <option value="status_info">Status Info</option> + <option value="server">Server</option> <option value="subject">Subject</option> <option value="size">Size</option> <option value="sid">SID</option> @@ -168,7 +185,8 @@ include("head.inc"); <tr> <td width="22%" valign="top"></td> - <td width="78%"><input name="Submit" type="submit" class="formbtn" id="search" value="<?=gettext("Search");?>" onclick="getsearch_results(true)"> + <td width="78%"><input name="Submit" type="submit" class="formbtn" id="search" value="<?=gettext("Search");?>" onclick="getsearch_results('search')"> + <input name="Submit" type="submit" class="formbtn" id="export" value="<?=gettext("Export");?>" onclick="getsearch_results('export')"></td> </table> </div> @@ -196,7 +214,7 @@ function loopSelected(id) return(selectedArray); } -function getsearch_results() { +function getsearch_results(sbutton) { var $new_from=$('from').value.replace("\n", "','"); var $new_to=$('to').value.replace("\n", "','"); var $new_sid=$('sid').value.replace("\n", "','"); @@ -209,12 +227,15 @@ function getsearch_results() { alert ("Please select at least one message field to display results."); } else{ - $('search').value="Searching..."; + if (sbutton == "search"){ + $('search').value="Searching...";} + else{ + $('export').value="exporting...";} $('search_results').innerHTML=""; var $queuetype=$('queuetype').options[$('queuetype').selectedIndex].text; var $queuemax=$('queuemax').options[$('queuemax').selectedIndex].text; - var $pars="from="+$new_from+"&to="+$new_to+"&sid="+$new_sid+"&limit="+$queuemax+"&fields="+$fields+"&status="+$('status').value; - var $pars= $pars+"&subject="+$('subject').value+"&msgid="+$('msgid').value+"&files="+$files+"&queue="+$queuetype; + var $pars="from="+$new_from+"&to="+$new_to+"&sid="+$new_sid+"&limit="+$queuemax+"&fields="+$fields+"&status="+$('status').value+"&server="+$('server').value; + var $pars= $pars+"&subject="+$('subject').value+"&msgid="+$('msgid').value+"&files="+$files+"&queue="+$queuetype+"&relay="+$('relay').value+"&sbutton="+sbutton; //alert($pars); var url = "/postfix.php"; var myAjax = new Ajax.Request( @@ -228,8 +249,9 @@ function getsearch_results() { } function activitycallback_postfix_search(transport) { $('search_results').innerHTML = transport.responseText; - scroll(0,900); + scroll(0,1100); $('search').value="Search"; + $('export').value="Export"; } </script> <!-- </form> --> diff --git a/config/postfix/postfix_sync.xml b/config/postfix/postfix_sync.xml index afceaf9a..08a62d87 100644 --- a/config/postfix/postfix_sync.xml +++ b/config/postfix/postfix_sync.xml @@ -51,107 +51,104 @@ <section>Services</section> <url>pkg_edit.php?xml=postfix.xml&id=0</url> </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> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_acl.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_antispam.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_sync.xml</item> - <prefix>/usr/local/pkg/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_view_config.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> - <additional_files_needed> - <item>http://www.pfsense.org/packages/config/postfix/postfix_recipients.php</item> - <prefix>/usr/local/www/</prefix> - <chmod>0755</chmod> - </additional_files_needed> <tabs> <tab> <text>General</text> <url>/pkg_edit.php?xml=postfix.xml&id=0</url> </tab> <tab> - <text>ACLs / Filter Maps</text> - <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + <text>Domains</text> + <url>/pkg_edit.php?xml=postfix_domains.xml&id=0</url> </tab> <tab> - <text>Valid recipients</text> + <text>Recipients</text> <url>/pkg_edit.php?xml=postfix_recipients.xml&id=0</url> </tab> <tab> + <text>Access Lists</text> + <url>/pkg_edit.php?xml=postfix_acl.xml&id=0</url> + </tab> + <tab> <text>Antispam</text> <url>/pkg_edit.php?xml=postfix_antispam.xml&id=0</url> </tab> <tab> - <text>XMLRPC Sync</text> + <text>Sync</text> <url>/pkg_edit.php?xml=postfix_sync.xml&id=0</url> <active/> </tab> <tab> - <text>View config files</text> + <text>View config</text> <url>/postfix_view_config.php</url> </tab> <tab> - <text>Search Email</text> + <text>Search mail</text> + <url>/postfix_search.php</url> + </tab> + <tab> + <text>Queue</text> + <url>/postfix_queue.php</url> + </tab> + <tab> + <text>About</text> <url>/postfix_search.php</url> </tab> </tabs> <fields> <field> - <name>Postfix XMLRPC Sync</name> + <name>Postfix Sync</name> <type>listtopic</type> </field> <field> <fielddescr>Automatically sync Postfix configuration changes</fielddescr> <fieldname>synconchanges</fieldname> - <description>pfSense will automatically sync changes to the hosts defined below.</description> + <description><![CDATA[pfSense will automatically sync changes to the hosts defined below.<br><br> + Remote server options are:<br> + <strong>XMLRPC Sync</strong> - Forward postfix settings to other pfsense boxes. Remote password required<br> + <strong>Share Database To</strong> - Allow other pfsense boxes to fetch maillog data via xml. Remote password NOT required.<br> + <strong>Fetch Database From</strong> - Merge logs from other pfsense boxes to this local database. Remote password required.<br> + <strong>Disabled</strong> - Ignore this host while sync.<br><br> + While sharing databases, you must setup 'Share Database To' in one box and 'Fetch Database From' on other box.]]></description> <type>checkbox</type> </field> <field> - <fielddescr>Remote Server</fielddescr> + <fielddescr><![CDATA[Remote Server]]></fielddescr> <fieldname>none</fieldname> <type>rowhelper</type> <rowhelper> <rowhelperfield> + <fielddescr>Sync Type </fielddescr> + <fieldname>sync_type</fieldname> + <type>select</type> + <options> + <option><name>XMLRPC Sync</name><value>xmlrpc</value></option> + <option><name>Share Database To</name><value>share</value></option> + <option><name>Fetch Database From</name><value>fetch</value></option> + <option><name>Disabled</name><value>disabled</value></option> + </options> + <description><![CDATA[<strong>Default: Strong</strong><br> + Enable sender, client, recipients and rfc verification.<br>]]></description> + </rowhelperfield> + + <rowhelperfield> <fielddescr>IP Address</fielddescr> <fieldname>ipaddress</fieldname> <description>IP Address of remote server</description> <type>input</type> - <size>20</size> + <size>10</size> </rowhelperfield> <rowhelperfield> <fielddescr>Password</fielddescr> <fieldname>password</fieldname> <description>Password for remote server.</description> <type>password</type> - <size>20</size> + <size>10</size> + </rowhelperfield> + <rowhelperfield> + <fielddescr>Description</fielddescr> + <fieldname>description</fieldname> + <type>input</type> + <size>25</size> </rowhelperfield> </rowhelper> </field> diff --git a/config/postfix/postfix_view_config.php b/config/postfix/postfix_view_config.php index ab136a2a..2c0b973e 100644 --- a/config/postfix/postfix_view_config.php +++ b/config/postfix/postfix_view_config.php @@ -2,7 +2,7 @@ /* postfix_view_config.php part of pfSense (http://www.pfsense.com/) - Copyright (C) 2010 Marcello Coutinho <marcellocoutinho@gmail.com> + Copyright (C) 2011 Marcello Coutinho <marcellocoutinho@gmail.com> based on varnish_view_config. All rights reserved. @@ -29,83 +29,127 @@ */ require("guiconfig.inc"); +function get_file($file){ + $files['main']="/usr/local/etc/postfix/main.cf"; + $files['master']="/usr/local/etc/postfix/master.cf"; + $files['recipients']="/usr/local/etc/postfix/relay_recipients"; + $files['header']="/usr/local/etc/postfix/header_check"; + $files['mime']="/usr/local/etc/postfix/mime_check"; + $files['body']="/usr/local/etc/postfix/body_check"; + $files['cidr']="/usr/local/etc/postfix/cal_cidr"; + $files['pcre']="/usr/local/etc/postfix/cal_pcre"; -$pfSversion = str_replace("\n", "", file_get_contents("/etc/version")); -if(strstr($pfSversion, "1.2")) - $one_two = true; + if ($files[$file]!="" && file_exists($files[$file])){ + print '<textarea rows="50" cols="100%">'; + print $files[$file]."\n".file_get_contents($files[$file]); + print '</textarea>'; + } +} -$pgtitle = "Services: Postfix View Configuration"; -include("head.inc"); - -?> -<body link="#0000CC" vlink="#0000CC" alink="#0000CC"> -<?php include("fbegin.inc"); ?> - -<?php if($one_two): ?> -<p class="pgtitle"><?=$pgtitle?></font></p> -<?php endif; ?> - -<?php if ($savemsg) print_info_box($savemsg); ?> - -<form action="postfix_view_config.php" method="post"> +if ($_REQUEST['file']!=""){ + get_file($_REQUEST['file']); + } +else{ + $pfSversion = str_replace("\n", "", file_get_contents("/etc/version")); + if(strstr($pfSversion, "1.2")) + $one_two = true; -<div id="mainlevel"> - <table width="100%" border="0" cellpadding="0" cellspacing="0"> - <tr><td> -<?php - $tab_array = array(); - $tab_array[] = array(gettext("General"), false, "/pkg_edit.php?xml=postfix.xml&id=0"); - $tab_array[] = array(gettext("ACLs / Filter Maps"), false, "/pkg_edit.php?xml=postfix_acl.xml&id=0"); - $tab_array[] = array(gettext("Valid Recipients"), false, "/pkg_edit.php?xml=postfix_recipients.xml&id=0"); - $tab_array[] = array(gettext("Antispam"), false, "/pkg_edit.php?xml=postfix_antispam.xml&id=0"); - $tab_array[] = array(gettext("XMLRPC Sync"), false, "/pkg_edit.php?xml=postfix_sync.xml&id=0"); - $tab_array[] = array(gettext("View config files"), true, "/postfix_view_config.php"); - $tab_array[] = array(gettext("Search Email"), false, "/postfix_search.php"); - display_top_tabs($tab_array); -?> - </td></tr> - <tr> - <td> - <div id="mainarea"> - <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0"> + $pgtitle = "Services: Postfix View Configuration"; + include("head.inc"); + + ?> + <body link="#0000CC" vlink="#0000CC" alink="#0000CC"> + <?php include("fbegin.inc"); ?> + + <?php if($one_two): ?> + <p class="pgtitle"><?=$pgtitle?></font></p> + <?php endif; ?> + + <?php if ($savemsg) print_info_box($savemsg); ?> + + <form action="postfix_view_config.php" method="post"> + + <div id="mainlevel"> + <table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr><td> + <?php + $tab_array = array(); + $tab_array[] = array(gettext("General"), false, "/pkg_edit.php?xml=postfix.xml&id=0"); + $tab_array[] = array(gettext("Domains"), false, "/pkg_edit.php?xml=postfix_domains.xml&id=0"); + $tab_array[] = array(gettext("Recipients"), false, "/pkg_edit.php?xml=postfix_recipients.xml&id=0"); + $tab_array[] = array(gettext("Access Lists"), false, "/pkg_edit.php?xml=postfix_acl.xml&id=0"); + $tab_array[] = array(gettext("Antispam"), false, "/pkg_edit.php?xml=postfix_antispam.xml&id=0"); + $tab_array[] = array(gettext("Sync"), false, "/pkg_edit.php?xml=postfix_sync.xml&id=0"); + $tab_array[] = array(gettext("View config"), true, "/postfix_view_config.php"); + $tab_array[] = array(gettext("Search mail"), false, "/postfix_search.php"); + $tab_array[] = array(gettext("Queue"), false, "/postfix_queue.php"); + $tab_array[] = array(gettext("About"), false, "/postfix_about.php"); + display_top_tabs($tab_array); + ?> + </td></tr> + <tr> + <td> + <div id="mainarea"> + <table class="tabcont" width="100%" border="0" cellpadding="8" cellspacing="0"> + <tr><td></td></tr> <tr> - <td class="tabcont" > - <input type="button" onClick="location.href='./postfix_view_config.php?file=0'" value="main.cf"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=1'" value="master.cf"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=2'" value="relay_recipients"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=3'" value="header_check"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=4'" value="mime_check"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=5'" value="body_check"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=6'" value="client CIDR"> - <input type="button" onClick="location.href='./postfix_view_config.php?file=7'" value="client PCRE"> - </td> - </tr> - <tr> - <td class="tabcont" > - <textarea id="varnishlogs" rows="50" cols="100%"> -<?php - $files_array[]="/usr/local/etc/postfix/main.cf"; - $files_array[]="/usr/local/etc/postfix/master.cf"; - $files_array[]="/usr/local/etc/postfix/relay_recipients"; - $files_array[]="/usr/local/etc/postfix/header_check"; - $files_array[]="/usr/local/etc/postfix/mime_check"; - $files_array[]="/usr/local/etc/postfix/body_check"; - $files_array[]="/usr/local/etc/postfix/cal_cidr"; - $files_array[]="/usr/local/etc/postfix/cal_pcre"; - $id=($_REQUEST['file']?$_REQUEST['file']:"0"); - $config_file = file_get_contents("$files_array[$id]"); - echo $files_array[$id]."\n".$config_file; -?> - </textarea> - </td> + <td colspan="2" valign="top" class="listtopic"><?=gettext("View Postfix configuration files"); ?></td></tr> + <tr><td></td></tr> </tr> - </table> - </div> - </td> - </tr> - </table> -</div> -</form> -<?php include("fend.inc"); ?> -</body> -</html> + <tr> + <td class="tabcont" > + <input type="button" onClick="get_postfix_file('main');" id='btn_main' value="main.cf"> + <input type="button" onClick="get_postfix_file('master');" id='btn_master' value="master.cf"> + <input type="button" onClick="get_postfix_file('recipients');" id='btn_recipients' value="relay_recipients"> + <input type="button" onClick="get_postfix_file('header');" id='btn_header' value="header_check"> + <input type="button" onClick="get_postfix_file('mime');" id='btn_mime' value="mime_check"> + <input type="button" onClick="get_postfix_file('body');" id='btn_body' value="body_check"> + <input type="button" onClick="get_postfix_file('cidr');" id='btn_cidr' value="client CIDR"> + <input type="button" onClick="get_postfix_file('pcre');" id='btn_pcre' value="client PCRE"> + </td> + </tr> + <tr> + <td class="tabcont" > + <div id="file_div"></div> + + </td> + </tr> + </table> + </div> + </td> + </tr> + </table> + </div> + </form> + <script type="text/javascript"> + function get_postfix_file(file) { + $('btn_'+file).value="reading..."; + var pars = 'file='+file; + var url = "/postfix_view_config.php"; + var myAjax = new Ajax.Request( + url, + { + method: 'post', + parameters: pars, + onComplete: activitycallback_postfix_file + }); + } + function activitycallback_postfix_file(transport) { + $('file_div').innerHTML = transport.responseText; + $('btn_main').value="main.cf"; + $('btn_master').value="master.cf"; + $('btn_recipients').value="relay_recipients"; + $('btn_header').value="header_check"; + $('btn_mime').value="mime_check"; + $('btn_body').value="body_check"; + $('btn_cidr').value="client CIDR"; + $('btn_pcre').value="client PCRE"; + scroll(0,0); + } + </script> + <?php + include("fend.inc"); + } + ?> + </body> + </html> |