diff options
author | Daniel Stefan Haischt <dsh@pfsense.org> | 2006-07-17 16:11:35 +0000 |
---|---|---|
committer | Daniel Stefan Haischt <dsh@pfsense.org> | 2006-07-17 16:11:35 +0000 |
commit | 1c15ea40270651d8b274682e6967fe77d35f032b (patch) | |
tree | c1b86fbfcdc959f7d8511ac5f36c563370263402 /packages/dspam/pkg/dspam-pkgfunc.inc | |
parent | 074dd2fdb1b5a2cdd43230e4b6a9d5ecb407255d (diff) | |
download | pfsense-packages-1c15ea40270651d8b274682e6967fe77d35f032b.tar.gz pfsense-packages-1c15ea40270651d8b274682e6967fe77d35f032b.tar.bz2 pfsense-packages-1c15ea40270651d8b274682e6967fe77d35f032b.zip |
- split the 4000 lines dspam.inc into several chunks for better maintainability
Diffstat (limited to 'packages/dspam/pkg/dspam-pkgfunc.inc')
-rw-r--r-- | packages/dspam/pkg/dspam-pkgfunc.inc | 493 |
1 files changed, 493 insertions, 0 deletions
diff --git a/packages/dspam/pkg/dspam-pkgfunc.inc b/packages/dspam/pkg/dspam-pkgfunc.inc new file mode 100644 index 00000000..9f02669e --- /dev/null +++ b/packages/dspam/pkg/dspam-pkgfunc.inc @@ -0,0 +1,493 @@ +<?php +/* $Id$ */ +/* Copyright (C) 2006 Daniel S. Haischt */ +require_once("functions.inc"); +require_once("dspam.inc"); + +function sync_package_dspam() { + global $config, $g; + conf_mount_rw(); + config_lock(); + $fd = fopen("/etc/dspam.conf","w"); + + $dspamcfg = <<<EOD +## dspam.conf -- DSPAM configuration file +## Generated by pfSense +Home /var/db/dspam +## Database Settings +StorageDriver /usr/local/lib/libmysql_drv.so +MySQLServer /tmp/mysql.sock +MySQLPort +MySQLUser dspam +MySQLPass dspam +MySQLDb dspam +MySQLCompress true +MySQLSupressQuote off +MySQLConnectionCache 10 +MySQLUIDInSignature on +## Delivery Settings +TrustedDeliveryAgent "/usr/bin/mail" +DeliveryHost 192.168.1.6 +DeliveryPort 24 +DeliveryIdent localhost +DeliveryProto smtp +OnFail error +## DSPAM Privileges +Trust root +Trust mail +Trust mailnull +Trust smmsp +Trust daemon +## DSPAM Engine Settings +TrainingMode teft +TestConditionalTraining on +Feature chained +Feature whitelist +Algorithm graham burton +PValue graham +ImprobabilityDrive on +Preference "spamAction=quarantine" +Preference "signatureLocation=message" +Preference "showFactors=on" +AllowOverride trainingMode +AllowOverride spamAction spamSubject +AllowOverride statisticalSedation +AllowOverride enableBNR +AllowOverride enableWhitelist +AllowOverride signatureLocation +AllowOverride showFactors +AllowOverride optIn optOut +AllowOverride whitelistThreshold +## Miscellaneous Settings +FailoverAttempts 1 +IgnoreHeader X-Spam-Scanned +IgnoreHeader X-Spam-Status +IgnoreHeader X-Virus-Scanner-Result +RBLInoculate on +Notifications on +## Maintainance Settings +PurgeSignatures 14 +PurgeNeutral 90 +PurgeUnused 90 +PurgeHapaxes 30 +PurgeHits1S 15 +PurgeHits1I 15 +## System Settings +LocalMX 127.0.0.1 +SystemLog on +UserLog on +Opt out +ParseToHeaders on +ChangeModeOnParse on +ChangeUserOnParse on +Broken returnCodes +Broken case +Broken lineStripping +MaxMessageSize 307200 +ProcessorBias on +## ClamAV Engine Settings +ClamAVPort 3310 +ClamAVHost 127.0.0.1 +ClamAVResponse accept +## DSPAM Daemon Settings (Server) +ServerPort 24 +ServerQueueSize 32 +ServerPID /var/run/dspam/dspam.pid +ServerMode standard +ServerParameters "--deliver=innocent -d %u" +ServerIdent "abysseleven.abyssworld.de" +ServerDomainSocketPath "/var/run/dspam/dspam.sock" +## EOF + +EOD; + + /* flush the default config to the file */ + fwrite($fd, $dspamcfg); + fclose($fd); + + $fd = fopen("/usr/local/bin/dspam_spamfeed","w"); + + $spamfeed = <<<EOD +#!/bin/sh +# +# automatically generated by pfSense + +cat \${2} | dspam --mode=teft --source=corpus --class=spam --feature=chained,noise --user \${1} + +EOD; + + fwrite($fd, $spamfeed); + fclose($fd); + mwexec("chmod a+x /usr/local/bin/dspam_spamfeed"); + + $fd = fopen("/usr/local/bin/dspam_innocentfeed","w"); + + $innocentfeed = <<<EOD +#!/bin/sh +# +# automatically generated by pfSense + +cat \${2} | dspam --mode=teft --source=corpus --class=innocent --feature=chained,noise --user \${1} + +EOD; + + fwrite($fd, $innocentfeed); + fclose($fd); + mwexec("chmod a+x /usr/local/bin/dspam_innocentfeed"); + + $start = <<<EOD +test_dspam_user=`cat /etc/passwd | grep dspam` +test_dspam_db=`mysql information_schema -e "select schema_name from schemata" | grep dspam` +test_dspam_db_user=`mysql mysql -e "select User from user" | grep dspam` + +if [ -z "\${test_dspam_user}" ]; then + pw useradd dspam -u 107 -g mail -d /var/db/dspam -s /bin/csh -c 'DSPAM Daemon User' +fi + +if [ ! -d "/var/run/dspam" ]; then + mkdir /var/run/dspam && chown dspam:mail /var/run/dspam +fi + +if [ -z "\${test_dspam_db}" ]; then + mysql -D mysql -e "create database dspam" + if [ -z "\${test_dspam_db_user}" ]; then + mysql -D mysql -e "GRANT ALL PRIVILEGES ON dspam.* TO dspam@localhost IDENTIFIED BY 'dspam'" + fi + mysql -udspam -pdspam dspam < /usr/local/share/examples/dspam/mysql/mysql_objects-space.sql && \ + mysql -udspam -pdspam dspam < /usr/local/share/examples/dspam/mysql/virtual_users.sql +fi + +/sbin/mount_fdescfs fdescfs /dev/fd +/usr/local/bin/dspam --daemon & + +EOD; + + $stop = "/usr/bin/killall dspam\n" . + "sleep 2"; + write_rcfile(array( + "file" => "dspam.sh", + "start" => $start, + "stop" => $stop + ) + ); + conf_mount_ro(); + config_unlock(); + + if (! file_exists("/usr/local/etc/dspam.conf")) { + mwexec("ln -s /etc/dspam.conf /usr/local/etc/dspam.conf"); + } + + mwexec("/usr/local/etc/rc.d/dspam.sh stop"); + mwexec("/usr/local/etc/rc.d/dspam.sh start"); + + return 0; +} + +function dspam_configure() { + global $config, $g; + + $dspamcfg = $config['installedpackages']['dspam']['config'][0]; + + if ($g['booting']) + echo "Starting DSPAM service... "; + else + sleep(1); + + /* write dhcpd.conf */ + $fd = fopen("/usr/local/etc/dspam.conf", "w"); + if (!$fd) { + printf("Error: cannot open dhcpd.conf in services_dhcpd_configure().\n"); + return 1; + } + + $dspamconf = <<<EOD +## dspam.conf -- DSPAM configuration file +## Generated by pfSense +Home /var/db/dspam +## Database Settings + +EOD; + + if ($dspamcfg['storage-driver'] == "mysql") { + $dspamconf .= "StorageDriver\t\t/usr/local/lib/libmysql_drv.so\n"; + $dspamconf .= <<<EOD +MySQLServer {$dspamcfg['dbsettings'][0]['mysql-server']} +MySQLPort {$dspamcfg['dbsettings'][0]['mysql-port']} +MySQLUser {$dspamcfg['dbsettings'][0]['mysql-user']} +MySQLPass {$dspamcfg['dbsettings'][0]['mysql-password']} +MySQLDb {$dspamcfg['dbsettings'][0]['mysql-database']} + +EOD; + isset($dspamcfg['dbsettings'][0]['mysql-compress']) ? $dspamconf .= "MySQLCompress\t\ttrue\n" : $dspamconf .= "MySQLCompress\tfalse\n"; + isset($dspamcfg['dbsettings'][0]['mysql-squote']) ? $dspamconf .= "MySQLSupressQuote\ton\n" : $dspamconf .= "MySQLSupressQuote\toff\n"; + isset($dspamcfg['dbsettings'][0]['mysql-ccache']) ? $dspamconf .= "MySQLConnectionCache\t{$dspamcfg['dbsettings'][0]['mysql-ccache']}\n" : $dspamconf .= "MySQLConnectionCache\t10\n"; + isset($dspamcfg['dbsettings'][0]['mysql-uid']) ? $dspamconf .= "MySQLUIDInSignature\ton\n" : $dspamconf .= "MySQLUIDInSignature\toff\n"; + } else if ($dspamcfg['storage-driver'] == "sqlite") { + $dspamconf .= "StorageDriver\t\t/usr/local/lib/libsqlite3_drv.so\n"; + if (isset($dspamcfg['dbsettings'][0]['sqlite-pragma'])) $dspamconf .= "SQLitePragma\t\t{$dspamcfg['dbsettings'][0]['sqlite-pragma']}\n"; + } else if ($dspamcfg['storage-driver'] == "pgsql") { + $dspamconf .= "StorageDriver\t\t/usr/local/lib/libpgsql_drv.so\n"; + $dspamconf .= <<<EOD +PgSQLServer {$dspamcfg['dbsettings'][0]['pgsql-server']} +PgSQLPort {$dspamcfg['dbsettings'][0]['pgsql-port']} +PgSQLUser {$dspamcfg['dbsettings'][0]['pgsql-user']} +PgSQLPass {$dspamcfg['dbsettings'][0]['pgsql-password']} +PgSQLDb {$dspamcfg['dbsettings'][0]['pgsql-database']} + +EOD; + isset($dspamcfg['dbsettings'][0]['pgsql-ccache']) ? $dspamconf .= "PgSQLConnectionCache\t{$dspamcfg['dbsettings'][0]['pgsql-ccache']}\n" : $dspamconf .= "PgSQLConnectionCache\t3\n"; + isset($dspamcfg['dbsettings'][0]['pgsql-uid']) ? $dspamconf .= "PgSQLUIDInSignature\ton\n" : $dspamconf .= "PgSQLUIDInSignature\toff\n"; + } else if ($dspamcfg['storage-driver'] == "oracle") { + $dspamconf .= "StorageDriver\t/usr/local/lib/libora_drv.so\n"; + $dspamconf .= <<<EOD +OraServer {$dspamcfg['dbsettings'][0]['ora-server']} +OraUser {$dspamcfg['dbsettings'][0]['ora-user']} +OraPass {$dspamcfg['dbsettings'][0]['ora-password']} +OraSchema {$dspamcfg['dbsettings'][0]['ora-schema']} + +EOD; + } else if ($dspamcfg['storage-driver'] == "hash") { + $dspamconf .= "StorageDriver\t\t/usr/local/lib/libhash_drv.so\n"; + $dspamconf .= <<<EOD +HashRecMax {$dspamcfg['dbsettings'][0]['hash-rec-max']} +HashMaxExtents {$dspamcfg['dbsettings'][0]['hash-max-ext']} +HashExtentSize {$dspamcfg['dbsettings'][0]['hash-ext-size']} +HashMaxSeek {$dspamcfg['dbsettings'][0]['hash-max-seek']} +HashConnectionCache {$dspamcfg['dbsettings'][0]['hash-co-cache']} + +EOD; + isset($dspamcfg['dbsettings'][0]['hash-auto-ex']) ? $dspamconf .= "HashAutoExtend\t\ton\n" : $dspamconf .= "HashAutoExtend\toff\n"; + if (isset($dspamcfg['dbsettings'][0]['hash-co-user'])) $dspamconf .= "HashConcurrentUser\t{$dspamcfg['dbsettings'][0]['hash-co-user']}\n"; + } + + $dspamconf .= "## Delivery Settings\n"; + + if ($dspamcfg['tdelivery-agent'] == "procmail") { + $dspamconf .= "TrustedDeliveryAgent\t\"/usr/local/bin/procmail\"\n"; + } else if ($dspamcfg['tdelivery-agent'] == "mail") { + $dspamconf .= "TrustedDeliveryAgent\t\"/usr/bin/mail\"\n"; + } else if ($dspamcfg['tdelivery-agent'] == "mail.local") { + $dspamconf .= "TrustedDeliveryAgent\t\"/usr/libexec/mail.local\"\n"; + } else if ($dspamcfg['tdelivery-agent'] == "deliver") { + $dspamconf .= "TrustedDeliveryAgent\t\"/usr/local/cyrus/bin/deliver\"\n"; + } else if ($dspamcfg['tdelivery-agent'] == "maildrop") { + $dspamconf .= "TrustedDeliveryAgent\t\"/usr/local/bin/maildrop\"\n"; + } else if ($dspamcfg['tdelivery-agent'] == "exim") { + $dspamconf .= "TrustedDeliveryAgent\t\"/usr/local/sbin/exim -oMr spam-scanned\"\n"; + } + + if (isset($dspamcfg['tcpip-delivery'])) { + $dspamconf .= <<<EOD +DeliveryHost {$dspamcfg['tcpip-delivery-host']} +DeliveryPort {$dspamcfg['tcpip-delivery-port']} +DeliveryIdent {$dspamcfg['tcpip-delivery-ident']} +DeliveryProto {$dspamcfg['tcpip-delivery-proto']} + +EOD; + } + + /* TODO: If required add the following, currently + missing options: + + - QuarantineAgent + - EnablePlusedDetail + - QuarantineMailbox + */ + + $dspamconf .= "OnFail\t\t\t{$dspamcfg['delivery-onfail']}\n"; + $dspamconf .= "## DSPAM Privileges\n"; + + $t_users = &$dspamcfg['tuser']; + + foreach ($t_users as $user) { + $dspamconf .= "Trust\t\t\t{$user['name']}\n"; + } + + if (isset($dspamcfg['debug-enable'])) { + $dspamconf .= "## DSPAM Debugging Options\n"; + $dspamconf .= "Debug\t\t\t{$dspamcfg['debug-whom']}\n"; + $dspamconf .= "DebugOpt\t\t{$dspamcfg['debug-options']}\n"; + } + + $dspamconf .= "## DSPAM Engine Settings\n"; + $dspamconf .= "TrainingMode\t\t{$dspamcfg['training-mode']}\n"; + isset($dspamcfg['test-cond-training']) ? $dspamconf .= "TestConditionalTraining\ton\n" : $dspamconf .= "TestConditionalTraining\toff\n"; + + $t_features = &$dspamcfg['feature']; + + foreach ($t_features as $feature) { + $dspamconf .= "Feature\t\t\t{$feature['name']}\n"; + } + + $t_algos = &$dspamcfg['algorithm']; + + if (count($t_algos) > 0) { + $dspamconf .= "Algorithm\t\t"; + + foreach ($t_algos as $algo) { + $dspamconf .= "{$algo['name']} "; + } + + $dspamconf .= "\n"; + } + + $dspamconf .= "PValue\t\t\t{$dspamcfg['pvalue']}\n"; + isset($dspamcfg['improbability-drive']) ? $dspamconf .= "ImprobabilityDrive\ton\n" : $dspamconf .= "ImprobabilityDrive\toff\n"; + + $t_prefs = &$dspamcfg['preference']; + + foreach ($t_prefs as $pref) { + $dspamconf .= "Preference\t\t{$pref['value']}\n"; + } + + $t_overr = &$dspamcfg['override']; + + foreach ($t_overr as $over) { + $dspamconf .= "AllowOverride\t\t{$over['value']}\n"; + } + + if (isset($dspamcfg['ldap-enable'])) { + $dspamconf .= <<<EOD +## LDAP Settings +LDAPMode {$dspamcfg['ldap-mode']} +LDAPHost {$dspamcfg['ldap-host']} +LDAPFilter {$dspamcfg['ldap-filter']} +LDAPBase {$dspamcfg['ldap-base']} + +EOD; + } + + $dspamconf .= "## Miscellaneous Settings\n"; + if (isset($dspamcfg['failover-attempts'])) $dspamconf .= "FailoverAttempts\t{$dspamcfg['failover-attempts']}\n"; + + $t_headers = &$dspamcfg['header']; + + if (is_array($t_headers)) { + foreach ($t_headers as $header) { + $dspamconf .= "IgnoreHeader\t\t{$header['name']}\n"; + } + } + + if (isset($dspamcfg['sbl-enable'])) { + $dspamconf .= "Lookup\t\t\t\"{$dspamcfg['sbl-host']}\"\n"; + } + + isset($dspamcfg['rbl-inoculate']) ? $dspamconf .= "RBLInoculate\t\ton\n" : $dspamconf .= "RBLInoculate\toff\n"; + isset($dspamcfg['notification-email']) ? $dspamconf .= "Notifications\t\ton\n" : $dspamconf .= "Notifications\toff\n"; + + $dspamconf .= <<<EOD +## Maintainance Settings +PurgeSignatures {$dspamcfg['purge-signatures']} +PurgeNeutral {$dspamcfg['purge-neutral']} +PurgeUnused {$dspamcfg['purge-unused']} +PurgeHapaxes {$dspamcfg['purge-hapaxes']} +PurgeHits1S {$dspamcfg['purge-hits-1s']} +PurgeHits1I {$dspamcfg['purge-hits-1s']} + +EOD; + + $dspamconf .= "## System Settings\n"; + $dspamconf .= "LocalMX\t\t\t{$dspamcfg['local-mx']}\n"; + isset($dspamcfg['system-log']) ? $dspamconf .= "SystemLog\t\ton\n" : $dspamconf .= "SystemLog\toff\n"; + isset($dspamcfg['user-log']) ? $dspamconf .= "UserLog\t\t\ton\n" : $dspamconf .= "UserLog\toff\n"; + $dspamconf .= "Opt\t\t\t{$dspamcfg['filter-opt']}\n"; + isset($dspamcfg['parse-to-headers']) ? $dspamconf .= "ParseToHeaders\t\ton\n" : $dspamconf .= "ParseToHeaders\toff\n"; + isset($dspamcfg['change-mode-on-parse']) ? $dspamconf .= "ChangeModeOnParse\ton\n" : $dspamconf .= "ChangeModeOnParse\toff\n"; + isset($dspamcfg['change-user-on-parse']) ? $dspamconf .= "ChangeUserOnParse\ton\n" : $dspamconf .= "ChangeUserOnParse\toff\n"; + + if (isset($dspamcfg['broken-mta-settings'])) { + $t_bmtas = &$dspamcfg['bmta']; + + foreach ($t_bmtas as $bmta) { + $dspamconf .= "Broken\t\t\t{$bmta['name']}\n"; + } + } + + $dspamconf .= "MaxMessageSize\t\t{$dspamcfg['max-message-size']}\n"; + isset($dspamcfg['processor-bias']) ? $dspamconf .= "ProcessorBias\t\ton\n" : $dspamconf .= "ProcessorBias\toff\n"; + + if (isset($dspamcfg['clamav-enable'])) { + $dspamconf .= <<<EOD +## ClamAV Engine Settings +ClamAVPort {$dspamcfg['clamav-port']} +ClamAVHost {$dspamcfg['clamav-host']} +ClamAVResponse {$dspamcfg['clamav-response']} + +EOD; + } + + $dspamconf .= <<<EOD +## DSPAM Daemon Settings (Server) +ServerPort {$dspamcfg['dspam-server-port']} +ServerQueueSize {$dspamcfg['dspam-server-queue-size']} +ServerPID {$dspamcfg['dspam-server-pid']} +ServerMode {$dspamcfg['dspam-server-mode']} + +EOD; + + if ($dspamcfg['dspam-server-mode'] == "dspam") { + $t_spwds = &$dspamcfg['server-pwd']; + $i = 1; + + foreach ($t_spwds as $spwd) { + $dspamconf .= "ServerPass.Relay{$i}\t\"{$spwd['value']}\"\n"; + $i++; + } + } else if ($dspamcfg['dspam-server-mode'] == "standard") { + $dspamconf .= <<<EOD +ServerParameters "{$dspamcfg['dspam-server-params']}" +ServerIdent "{$dspamcfg['dspam-server-id']}" + +EOD; + } + + if (isset($dspamcfg['dspam-server-socket'])) { + $dspamconf .= "ServerDomainSocketPath\t\"{$dspamcfg['dspam-server-socket']}\"\n"; + } + + if (isset($dspamcfg['dspam-client-enable']) && $dspamcfg['dspam-client-enable'] <> "") { + $dspamconf .= <<<EOD +## DSPAM Daemon Settings (Client) +ClientHost {$dspamcfg['dspam-client-host']} +ClientIdent {$dspamcfg['dspam-client-id']} + +EOD; + + if (isset($dspamcfg['dspam-client-port']) && $dspamcfg['dspam-client-port'] <> "") { + $dspamconf .= "ClientPort\t\t{$dspamcfg['dspam-client-port']}\n"; + } + } + + $dspamconf .= "## EOF\n"; + + fwrite($fd, $dspamconf); + fclose($fd); + + /* fire up dspam --daemon */ + mwexec("/usr/local/etc/rc.d/dspam.sh stop"); + mwexec("/usr/local/etc/rc.d/dspam.sh start"); + + if ($g['booting']) { + print "done.\n"; + } + + return 0; +} + +function custom_php_install_command() { + global $config, $g; + /* create a default config */ + sync_package_dspam(); +} + +function custom_php_deinstall_command() { + global $config, $g; + conf_mount_rw(); + unlink_if_exists("/usr/local/etc/rc.d/dspam.sh"); + unlink_if_exists("/usr/local/etc/dspam.conf"); + unlink_if_exists("/usr/local/bin/dspam_spamfeed"); + unlink_if_exists("/usr/local/bin/dspam_innocentfeed"); + conf_mount_ro(); +} + +?> |