Source for file filters.php
Documentation is available at filters.php
* Message and Spam Filter Plugin - Filtering Functions
* @copyright © 1999-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: filters.php,v 1.92 2006/08/05 14:49:48 kink Exp $
* do not allow to call this file directly
if ((isset
($_SERVER['SCRIPT_FILENAME']) &&
$_SERVER['SCRIPT_FILENAME'] == __FILE__
) ||
(isset
($HTTP_SERVER_SERVER['SCRIPT_FILENAME']) &&
$HTTP_SERVER_SERVER['SCRIPT_FILENAME'] == __FILE__
) ) {
header("Location: ../../src/login.php");
global $UseSeparateImapConnection,
$AllowSpamFilters, $SpamFilters_YourHop, $SpamFilters_ShowCommercial,
$SpamFilters_DNScache, $SpamFilters_BulkQuery, $SpamFilters_SharedCache,
* load required functions. Plugin depends on IMAP functions and they are not
* loaded in src/webmail.php
include_once (SM_PATH .
'functions/imap.php');
/** load default config */
include_once (SM_PATH .
'plugins/filters/config_default.php');
// default config was removed.
$UseSeparateImapConnection =
false;
$AllowSpamFilters =
true;
$SpamFilters_YourHop =
' ';
$SpamFilters_ShowCommercial =
false;
$SpamFilters_DNScache =
array();
$SpamFilters_BulkQuery =
'';
$SpamFilters_SharedCache =
true;
$SpamFilters_CacheTTL =
7200;
include_once (SM_PATH .
'config/filters_config.php');
include_once (SM_PATH .
'plugins/filters/config.php');
function filters_optpage_register_block() {
$optpage_blocks[] =
array(
'name' =>
_("Message Filters"),
'url' =>
SM_PATH .
'plugins/filters/options.php',
'desc' =>
_("Filtering enables messages with different criteria to be automatically filtered into different folders for easier organization."),
$optpage_blocks[] =
array(
'name' =>
_("SPAM Filters"),
'url' =>
SM_PATH .
'plugins/filters/spamoptions.php',
'desc' =>
_("SPAM filters allow you to select from various DNS based blacklists to detect junk email in your INBOX and move it to another folder (like Trash)."),
/* Receive the status of the folder and do something with it */
global $filter_inbox_count;
if (empty($filter_inbox_count)) $filter_inbox_count=
0;
if ($statusarr['MAILBOX'] ==
'INBOX')
if (!empty($statusarr['MESSAGES'])) $filter_inbox_count=
$statusarr['MESSAGES'];
* Saves the DNS Cache to disk
function filters_SaveCache () {
$fp =
fopen($data_dir .
'/dnscache', 'r');
$fp =
fopen($data_dir .
'/dnscache', 'w+');
$fp =
fopen($data_dir .
'/dnscache', 'r');
$fp1 =
fopen($data_dir .
'/dnscache', 'w+');
foreach ($SpamFilters_DNScache as $Key=>
$Value) {
$tstr =
$Key .
',' .
$Value['L'] .
',' .
$Value['T'] .
"\n";
* Loads the DNS Cache from disk
function filters_LoadCache () {
$SpamFilters_DNScache =
array();
if ($fp =
fopen ($data_dir .
'/dnscache', 'r')) {
while ($data =
fgetcsv($fp,1024)) {
$SpamFilters_DNScache[$data[0]]['L'] =
$data[1];
$SpamFilters_DNScache[$data[0]]['T'] =
$data[2];
* Uses the BulkQuery executable to query all the RBLs at once
* @param array $filters Array of SPAM Fitlers
* @param array $IPs Array of IP Addresses
function filters_bulkquery($filters, $IPs) {
global $attachment_dir, $username,
foreach ($filters as $key =>
$value) {
if ($filters[$key]['enabled']) {
if ($filters[$key]['dns']) {
$rbls[$filters[$key]['dns']] =
true;
$bqfil =
$attachment_dir .
$username .
'-bq.in';
$fp =
fopen($bqfil, 'w');
fputs ($fp, $SpamFilters_CacheTTL .
"\n");
foreach ($rbls as $key =>
$value) {
fputs ($fp, '.' .
$key .
"\n");
fputs ($fp, "----------\n");
foreach ($IPs as $key =>
$value) {
fputs ($fp, $key .
"\n");
exec ($SpamFilters_BulkQuery .
' < ' .
$bqfil, $bqout);
foreach ($bqout as $value) {
$SpamFilters_DNScache[$Chunks[0]]['L'] =
$Chunks[1];
$SpamFilters_DNScache[$Chunks[0]]['T'] =
$Chunks[2] +
time();
* Starts the filtering process
* @param array $hook_args (since 1.5.2) do hook arguments. Is used to check
* hook name, array key = 0.
function start_filters($hook_args) {
global $imapServerAddress, $imapPort, $imap_stream, $imapConnection,
* check hook that calls filtering. If filters are called by right_main_after_header,
* do filtering only when we are in INBOX folder.
if ($hook_args[0]==
'right_main_after_header' &&
$filters =
load_filters();
// No point running spam filters if there aren't any to run //
$spamfilters =
load_spam_filters();
$AllowSpamFilters =
false;
foreach($spamfilters as $filterskey=>
$value) {
if ($value['enabled'] ==
'yes') {
$AllowSpamFilters =
true;
if (!$AllowSpamFilters &&
empty($filters)) {
// Detect if we have already connected to IMAP or not.
// Also check if we are forced to use a separate IMAP connection
if ((!isset
($imap_stream) &&
!isset
($imapConnection)) ||
$UseSeparateImapConnection ) {
$stream =
sqimap_login($username, false, $imapServerAddress,
$previously_connected =
false;
} else if (isset
($imapConnection)) {
$stream =
$imapConnection;
$previously_connected =
true;
$previously_connected =
true;
if (!isset
($filter_inbox_count)) {
if (!empty($aStatus['MESSAGES'])) {
$filter_inbox_count=
$aStatus['MESSAGES'];
if ($filter_inbox_count >
0) {
// Filter spam from inbox before we sort them into folders
if (!$previously_connected) {
* Does the loop through each filter
* @param stream imap_stream the stream to read from
function user_filters($imap_stream) {
global $data_dir, $username;
$filters =
load_filters();
$filters_user_scan =
getPref($data_dir, $username, 'filters_user_scan');
for ($i=
0, $num =
count($filters); $i <
$num; $i++
) {
// If it is the "combo" rule
if ($filters[$i]['where'] ==
'To or Cc') {
* If it's "TO OR CC", we have to do two searches, one for TO
$expunge =
filter_search_and_delete($imap_stream, 'TO',
$filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $expunge);
$expunge =
filter_search_and_delete($imap_stream, 'CC',
$filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $expunge);
} else if ($filters[$i]['where'] ==
'Header and Body') {
$expunge =
filter_search_and_delete($imap_stream, 'TEXT',
$filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $expunge);
} else if ($filters[$i]['where'] ==
'Message Body') {
$expunge =
filter_search_and_delete($imap_stream, 'BODY',
$filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $expunge);
* If it's a normal TO, CC, SUBJECT, or FROM, then handle it
$expunge =
filter_search_and_delete($imap_stream, $filters[$i]['where'],
$filters[$i]['what'], $filters[$i]['folder'], $filters_user_scan, $expunge);
// Clean out the mailbox whether or not auto_expunge is on
// That way it looks like it was redirected properly
* Creates and runs the IMAP command to filter messages
* @param string $where Which part of the message to search (TO, CC, SUBJECT, etc...)
* @param string $what String to search for
* @param string $where_to Folder it will move to
* @param string $user_scan Whether to search all or just unseen
* @param string $should_expunge
* @param boolean $where Which part of location to search
function filter_search_and_delete($imap_stream, $where, $what, $where_to, $user_scan,
global $languages, $squirrelmail_language, $allow_charset_search, $imap_server_type;
//TODO: make use of new mailbox cache. See mailbox_display.phpinfo
if ($user_scan ==
'new') {
$category .=
' UNDELETED';
if ($allow_charset_search &&
isset
($languages[$squirrelmail_language]['CHARSET']) &&
$languages[$squirrelmail_language]['CHARSET']) {
$search_str =
'SEARCH CHARSET '
.
strtoupper($languages[$squirrelmail_language]['CHARSET'])
$search_str =
'SEARCH CHARSET US-ASCII ' .
$category;
if ($where ==
'Header') {
$where =
trim($where .
' ' .
$what[0]);
// see comments in squirrelmail sqimap_search function
if ($imap_server_type ==
'macosx' ||
$imap_server_type ==
'hmailserver') {
$search_str .=
' ' .
$where .
' ' .
$what;
/* read data back from IMAP */
$search_str .=
' ' .
$where .
' {' .
strlen($what) .
"}";
fputs ($imap_stream, $sid .
' ' .
$search_str .
"\r\n");
# server should respond with Ready for argument, then we will send search text
fputs ($imap_stream, "$what\r\n");
list
($rtag,$response,$message)=
explode(' ',$read3,3);
## $read2 = sqimap_retrieve_imap_response($imap_stream, $sid, true,
## $response, $message, $search_str, false, true, false);
#echo "RR2 $read2 / RESPONSE $response<br>";
for ($i =
0, $iCnt =
count($read); $i <
$iCnt; ++
$i) {
if (preg_match("/^\* SEARCH (.+)$/", $read[$i], $regs)) {
if ($response ==
'OK' &&
count($ids)) {
} elseif ($response !=
'OK') {
$query =
$search_str .
"\r\n".
$what .
"\r\n";
if (strpos($message,'BADCHARSET') !==
false ||
strpos($message,'character') !==
false) {
* Loops through all the Received Headers to find IP Addresses
* @param stream imap_stream the stream to read from
function spam_filters($imap_stream) {
global $data_dir, $username;
$filters_spam_scan =
getPref($data_dir, $username, 'filters_spam_scan');
$filters_spam_folder =
getPref($data_dir, $username, 'filters_spam_folder');
$filters =
load_spam_filters();
if ($SpamFilters_SharedCache) {
foreach ($filters as $Key =>
$Value) {
// Ask for a big list of all "Received" headers in the inbox with
// flags for each message. Kinda big.
if ($filters_spam_scan ==
'new') {
$read =
sqimap_run_command($imap_stream, 'SEARCH UNSEEN', true, $response, $message, TRUE);
for ($i =
0, $iCnt =
count($read); $i <
$iCnt; ++
$i) {
if (preg_match("/^\* SEARCH (.+)$/", $read[$i], $regs)) {
if ($filters_spam_scan ==
'new' &&
count($search_array)) {
} else if ($filters_spam_scan !=
'new') {
$bulkquery =
(strlen($SpamFilters_BulkQuery) >
0 ?
true :
false);
foreach ($headers as $id =>
$aValue) {
if (isset
($aValue['UID'])) {
$MsgNum =
$aValue['UID'];
// Look through all of the Received headers for IP addresses
if (isset
($aValue['RECEIVED'])) {
foreach ($aValue['RECEIVED'] as $received) {
// Check to see if this line is the right "Received from" line
// $aValue['Received'] is an array with all the received lines.
// We should check them from bottom to top and only check the first 2.
// Currently we check only the header where $SpamFilters_YourHop in occures
if (preg_match('/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/',$received,$aMatch)) {
if (filters_spam_check_site($aMatch[1],$aMatch[2],$aMatch[3],$aMatch[4],$filters)) {
foreach ($filters as $key =>
$value) {
if ($filters[$key]['enabled'] &&
$filters[$key]['dns']) {
if (strlen($SpamFilters_DNScache[$IP.
'.'.
$filters[$key]['dns']]) ==
0) {
// If we've checked one IP and YourHop is
if ($SpamFilters_YourHop ==
' ' ||
$isspam) {
break; // don't check any more
// Lookie! It's spam! Yum!
if ($bulkquery &&
count($IPs)) {
filters_bulkquery($filters, $IPs);
if ($SpamFilters_SharedCache) {
* Does the loop through each enabled filter for the specified IP address.
* @param int $a First subset of IP
* @param int $b Second subset of IP
* @param int $c Third subset of IP
* @param int $d Forth subset of IP
* @param array $filters The Spam Filters
* @return boolean Whether the IP is Spam
function filters_spam_check_site($a, $b, $c, $d, &$filters) {
foreach ($filters as $key =>
$value) {
if ($filters[$key]['enabled']) {
if ($filters[$key]['dns']) {
$filter_revip =
$d .
'.' .
$c .
'.' .
$b .
'.' .
$a .
'.' .
if(!isset
($SpamFilters_DNScache[$filter_revip]['L']))
$SpamFilters_DNScache[$filter_revip]['L'] =
'';
if(!isset
($SpamFilters_DNScache[$filter_revip]['T']))
$SpamFilters_DNScache[$filter_revip]['T'] =
'';
if (strlen($SpamFilters_DNScache[$filter_revip]['L']) ==
0) {
$SpamFilters_DNScache[$filter_revip]['L'] =
$SpamFilters_DNScache[$filter_revip]['T'] =
time() +
$SpamFilters_CacheTTL;
if ($SpamFilters_DNScache[$filter_revip]['L'] ==
$filters[$key]['result']) {
* Loads the filters from the user preferences
* @return array All the user filters
function load_filters() {
global $data_dir, $username;
for ($i =
0; $fltr =
getPref($data_dir, $username, 'filter' .
$i); $i++
) {
$filters[$i]['where'] =
$ary[0];
$filters[$i]['what'] =
$ary[1];
$filters[$i]['folder'] =
$ary[2];
* Loads the Spam Filters and checks the preferences for the enabled status
* @return array All the spam filters
function load_spam_filters() {
if ($SpamFilters_ShowCommercial) {
$filters['MAPS RBL']['prefname'] =
'filters_spam_maps_rbl';
$filters['MAPS RBL']['name'] =
'MAPS Realtime Blackhole List';
$filters['MAPS RBL']['link'] =
'http://www.mail-abuse.org/rbl/';
$filters['MAPS RBL']['dns'] =
'blackholes.mail-abuse.org';
$filters['MAPS RBL']['result'] =
'127.0.0.2';
$filters['MAPS RBL']['comment'] =
_("COMMERCIAL - This list contains servers that are verified spam senders. It is a pretty reliable list to scan spam from.");
$filters['MAPS RSS']['prefname'] =
'filters_spam_maps_rss';
$filters['MAPS RSS']['name'] =
'MAPS Relay Spam Stopper';
$filters['MAPS RSS']['link'] =
'http://www.mail-abuse.org/rss/';
$filters['MAPS RSS']['dns'] =
'relays.mail-abuse.org';
$filters['MAPS RSS']['result'] =
'127.0.0.2';
$filters['MAPS RSS']['comment'] =
_("COMMERCIAL - Servers that are configured (or misconfigured) to allow spam to be relayed through their system will be banned with this. Another good one to use.");
$filters['MAPS DUL']['prefname'] =
'filters_spam_maps_dul';
$filters['MAPS DUL']['name'] =
'MAPS Dial-Up List';
$filters['MAPS DUL']['link'] =
'http://www.mail-abuse.org/dul/';
$filters['MAPS DUL']['dns'] =
'dialups.mail-abuse.org';
$filters['MAPS DUL']['result'] =
'127.0.0.3';
$filters['MAPS DUL']['comment'] =
_("COMMERCIAL - Dial-up users are often filtered out since they should use their ISP's mail servers to send mail. Spammers typically get a dial-up account and send spam directly from there.");
$filters['MAPS RBLplus-RBL']['prefname'] =
'filters_spam_maps_rblplus_rbl';
$filters['MAPS RBLplus-RBL']['name'] =
'MAPS RBL+ RBL List';
$filters['MAPS RBLplus-RBL']['link'] =
'http://www.mail-abuse.org/';
$filters['MAPS RBLplus-RBL']['dns'] =
'rbl-plus.mail-abuse.org';
$filters['MAPS RBLplus-RBL']['result'] =
'127.0.0.2';
$filters['MAPS RBLplus-RBL']['comment'] =
_("COMMERCIAL - RBL+ Blackhole entries.");
$filters['MAPS RBLplus-RSS']['prefname'] =
'filters_spam_maps_rblplus_rss';
$filters['MAPS RBLplus-RSS']['name'] =
'MAPS RBL+ List RSS entries';
$filters['MAPS RBLplus-RSS']['link'] =
'http://www.mail-abuse.org/';
$filters['MAPS RBLplus-RSS']['dns'] =
'rbl-plus.mail-abuse.org';
$filters['MAPS RBLplus-RSS']['result'] =
'127.0.0.2';
$filters['MAPS RBLplus-RSS']['comment'] =
_("COMMERCIAL - RBL+ OpenRelay entries.");
$filters['MAPS RBLplus-DUL']['prefname'] =
'filters_spam_maps_rblplus_dul';
$filters['MAPS RBLplus-DUL']['name'] =
'MAPS RBL+ List DUL entries';
$filters['MAPS RBLplus-DUL']['link'] =
'http://www.mail-abuse.org/';
$filters['MAPS RBLplus-DUL']['dns'] =
'rbl-plus.mail-abuse.org';
$filters['MAPS RBLplus-DUL']['result'] =
'127.0.0.3';
$filters['MAPS RBLplus-DUL']['comment'] =
_("COMMERCIAL - RBL+ Dial-up entries.");
$filters['ORDB']['prefname'] =
'filters_spam_ordb';
$filters['ORDB']['name'] =
'Open Relay Database List';
$filters['ORDB']['link'] =
'http://www.ordb.org/';
$filters['ORDB']['dns'] =
'relays.ordb.org';
$filters['ORDB']['result'] =
'127.0.0.2';
$filters['ORDB']['comment'] =
_("FREE - ORDB was born when ORBS went off the air. It seems to have fewer false positives than ORBS did though.");
$filters['FiveTen Direct']['prefname'] =
'filters_spam_fiveten_src';
$filters['FiveTen Direct']['name'] =
'Five-Ten-sg.com Direct SPAM Sources';
$filters['FiveTen Direct']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen Direct']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen Direct']['result'] =
'127.0.0.2';
$filters['FiveTen Direct']['comment'] =
_("FREE - Five-Ten-sg.com - Direct SPAM sources.");
$filters['FiveTen DUL']['prefname'] =
'filters_spam_fiveten_dul';
$filters['FiveTen DUL']['name'] =
'Five-Ten-sg.com DUL Lists';
$filters['FiveTen DUL']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen DUL']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen DUL']['result'] =
'127.0.0.3';
$filters['FiveTen DUL']['comment'] =
_("FREE - Five-Ten-sg.com - Dial-up lists - includes some DSL IPs.");
$filters['FiveTen Unc. OptIn']['prefname'] =
'filters_spam_fiveten_oi';
$filters['FiveTen Unc. OptIn']['name'] =
'Five-Ten-sg.com Unconfirmed OptIn Lists';
$filters['FiveTen Unc. OptIn']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen Unc. OptIn']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen Unc. OptIn']['result'] =
'127.0.0.4';
$filters['FiveTen Unc. OptIn']['comment'] =
_("FREE - Five-Ten-sg.com - Bulk mailers that do not use confirmed opt-in.");
$filters['FiveTen Others']['prefname'] =
'filters_spam_fiveten_oth';
$filters['FiveTen Others']['name'] =
'Five-Ten-sg.com Other Misc. Servers';
$filters['FiveTen Others']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen Others']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen Others']['result'] =
'127.0.0.5';
$filters['FiveTen Others']['comment'] =
_("FREE - Five-Ten-sg.com - Other misc. servers.");
$filters['FiveTen Single Stage']['prefname'] =
'filters_spam_fiveten_ss';
$filters['FiveTen Single Stage']['name'] =
'Five-Ten-sg.com Single Stage Servers';
$filters['FiveTen Single Stage']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen Single Stage']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen Single Stage']['result'] =
'127.0.0.6';
$filters['FiveTen Single Stage']['comment'] =
_("FREE - Five-Ten-sg.com - Single Stage servers.");
$filters['FiveTen SPAM Support']['prefname'] =
'filters_spam_fiveten_supp';
$filters['FiveTen SPAM Support']['name'] =
'Five-Ten-sg.com SPAM Support Servers';
$filters['FiveTen SPAM Support']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen SPAM Support']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen SPAM Support']['result'] =
'127.0.0.7';
$filters['FiveTen SPAM Support']['comment'] =
_("FREE - Five-Ten-sg.com - SPAM Support servers.");
$filters['FiveTen Web forms']['prefname'] =
'filters_spam_fiveten_wf';
$filters['FiveTen Web forms']['name'] =
'Five-Ten-sg.com Web Form IPs';
$filters['FiveTen Web forms']['link'] =
'http://www.five-ten-sg.com/blackhole.php';
$filters['FiveTen Web forms']['dns'] =
'blackholes.five-ten-sg.com';
$filters['FiveTen Web forms']['result'] =
'127.0.0.8';
$filters['FiveTen Web forms']['comment'] =
_("FREE - Five-Ten-sg.com - Web Form IPs.");
$filters['Dorkslayers']['prefname'] =
'filters_spam_dorks';
$filters['Dorkslayers']['name'] =
'Dorkslayers Lists';
$filters['Dorkslayers']['link'] =
'http://www.dorkslayers.com';
$filters['Dorkslayers']['dns'] =
'orbs.dorkslayers.com';
$filters['Dorkslayers']['result'] =
'127.0.0.2';
$filters['Dorkslayers']['comment'] =
_("FREE - Dorkslayers appears to include only really bad open relays outside the US to avoid being sued. Interestingly enough, their website recommends you NOT use their service.");
$filters['SPAMhaus']['prefname'] =
'filters_spam_spamhaus';
$filters['SPAMhaus']['name'] =
'SPAMhaus Lists';
$filters['SPAMhaus']['link'] =
'http://www.spamhaus.org';
$filters['SPAMhaus']['dns'] =
'sbl.spamhaus.org';
$filters['SPAMhaus']['result'] =
'127.0.0.6';
$filters['SPAMhaus']['comment'] =
_("FREE - SPAMhaus - A list of well-known SPAM sources.");
$filters['SPAMcop']['prefname'] =
'filters_spam_spamcop';
$filters['SPAMcop']['name'] =
'SPAM Cop Lists';
$filters['SPAMcop']['link'] =
'http://spamcop.net/bl.shtml';
$filters['SPAMcop']['dns'] =
'bl.spamcop.net';
$filters['SPAMcop']['result'] =
'127.0.0.2';
$filters['SPAMcop']['comment'] =
_("FREE, for now - SpamCop - An interesting solution that lists servers that have a very high spam to legit email ratio (85 percent or more).");
$filters['dev.null.dk']['prefname'] =
'filters_spam_devnull';
$filters['dev.null.dk']['name'] =
'dev.null.dk Lists';
$filters['dev.null.dk']['link'] =
'http://dev.null.dk/';
$filters['dev.null.dk']['dns'] =
'dev.null.dk';
$filters['dev.null.dk']['result'] =
'127.0.0.2';
$filters['dev.null.dk']['comment'] =
_("FREE - dev.null.dk - I don't have any detailed info on this list.");
$filters['visi.com']['prefname'] =
'filters_spam_visi';
$filters['visi.com']['name'] =
'visi.com Relay Stop List';
$filters['visi.com']['link'] =
'http://relays.visi.com';
$filters['visi.com']['dns'] =
'relays.visi.com';
$filters['visi.com']['result'] =
'127.0.0.2';
$filters['visi.com']['comment'] =
_("FREE - visi.com - Relay Stop List. Very conservative OpenRelay List.");
$filters['ahbl.org Open Relays']['prefname'] =
'filters_spam_2mb_or';
$filters['ahbl.org Open Relays']['name'] =
'ahbl.org Open Relays List';
$filters['ahbl.org Open Relays']['link'] =
'http://www.ahbl.org/';
$filters['ahbl.org Open Relays']['dns'] =
'dnsbl.ahbl.org';
$filters['ahbl.org Open Relays']['result'] =
'127.0.0.2';
$filters['ahbl.org Open Relays']['comment'] =
_("FREE - ahbl.org Open Relays - Another list of Open Relays.");
$filters['ahbl.org SPAM Source']['prefname'] =
'filters_spam_2mb_ss';
$filters['ahbl.org SPAM Source']['name'] =
'ahbl.org SPAM Source List';
$filters['ahbl.org SPAM Source']['link'] =
'http://www.ahbl.org/';
$filters['ahbl.org SPAM Source']['dns'] =
'dnsbl.ahbl.org';
$filters['ahbl.org SPAM Source']['result'] =
'127.0.0.4';
$filters['ahbl.org SPAM Source']['comment'] =
_("FREE - ahbl.org SPAM Source - List of Direct SPAM Sources.");
$filters['ahbl.org SPAM ISPs']['prefname'] =
'filters_spam_2mb_isp';
$filters['ahbl.org SPAM ISPs']['name'] =
'ahbl.org SPAM-friendly ISP List';
$filters['ahbl.org SPAM ISPs']['link'] =
'http://www.ahbl.org/';
$filters['ahbl.org SPAM ISPs']['dns'] =
'dnsbl.ahbl.org';
$filters['ahbl.org SPAM ISPs']['result'] =
'127.0.0.7';
$filters['ahbl.org SPAM ISPs']['comment'] =
_("FREE - ahbl.org SPAM ISPs - List of SPAM-friendly ISPs.");
$filters['Leadmon DUL']['prefname'] =
'filters_spam_lm_dul';
$filters['Leadmon DUL']['name'] =
'Leadmon.net DUL List';
$filters['Leadmon DUL']['link'] =
'http://www.leadmon.net/spamguard/';
$filters['Leadmon DUL']['dns'] =
'spamguard.leadmon.net';
$filters['Leadmon DUL']['result'] =
'127.0.0.2';
$filters['Leadmon DUL']['comment'] =
_("FREE - Leadmon DUL - Another list of Dial-up or otherwise dynamically assigned IPs.");
$filters['Leadmon SPAM Source']['prefname'] =
'filters_spam_lm_ss';
$filters['Leadmon SPAM Source']['name'] =
'Leadmon.net SPAM Source List';
$filters['Leadmon SPAM Source']['link'] =
'http://www.leadmon.net/spamguard/';
$filters['Leadmon SPAM Source']['dns'] =
'spamguard.leadmon.net';
$filters['Leadmon SPAM Source']['result'] =
'127.0.0.3';
$filters['Leadmon SPAM Source']['comment'] =
_("FREE - Leadmon SPAM Source - List of IPs Leadmon.net has received SPAM directly from.");
$filters['Leadmon Bulk Mailers']['prefname'] =
'filters_spam_lm_bm';
$filters['Leadmon Bulk Mailers']['name'] =
'Leadmon.net Bulk Mailers List';
$filters['Leadmon Bulk Mailers']['link'] =
'http://www.leadmon.net/spamguard/';
$filters['Leadmon Bulk Mailers']['dns'] =
'spamguard.leadmon.net';
$filters['Leadmon Bulk Mailers']['result'] =
'127.0.0.4';
$filters['Leadmon Bulk Mailers']['comment'] =
_("FREE - Leadmon Bulk Mailers - Bulk mailers that do not require confirmed opt-in or that have allowed known spammers to become clients and abuse their services.");
$filters['Leadmon Open Relays']['prefname'] =
'filters_spam_lm_or';
$filters['Leadmon Open Relays']['name'] =
'Leadmon.net Open Relays List';
$filters['Leadmon Open Relays']['link'] =
'http://www.leadmon.net/spamguard/';
$filters['Leadmon Open Relays']['dns'] =
'spamguard.leadmon.net';
$filters['Leadmon Open Relays']['result'] =
'127.0.0.5';
$filters['Leadmon Open Relays']['comment'] =
_("FREE - Leadmon Open Relays - Single Stage Open Relays that are not listed on other active RBLs.");
$filters['Leadmon Multi-stage']['prefname'] =
'filters_spam_lm_ms';
$filters['Leadmon Multi-stage']['name'] =
'Leadmon.net Multi-Stage Relay List';
$filters['Leadmon Multi-stage']['link'] =
'http://www.leadmon.net/spamguard/';
$filters['Leadmon Multi-stage']['dns'] =
'spamguard.leadmon.net';
$filters['Leadmon Multi-stage']['result'] =
'127.0.0.6';
$filters['Leadmon Multi-stage']['comment'] =
_("FREE - Leadmon Multi-stage - Multi-Stage Open Relays that are not listed on other active RBLs and that have sent SPAM to Leadmon.net.");
$filters['Leadmon SpamBlock']['prefname'] =
'filters_spam_lm_sb';
$filters['Leadmon SpamBlock']['name'] =
'Leadmon.net SpamBlock Sites List';
$filters['Leadmon SpamBlock']['link'] =
'http://www.leadmon.net/spamguard/';
$filters['Leadmon SpamBlock']['dns'] =
'spamguard.leadmon.net';
$filters['Leadmon SpamBlock']['result'] =
'127.0.0.7';
$filters['Leadmon SpamBlock']['comment'] =
_("FREE - Leadmon SpamBlock - Sites on this listing have sent Leadmon.net direct SPAM from IPs in netblocks where the entire block has no DNS mappings. It's a list of BLOCKS of IPs being used by people who have SPAMmed Leadmon.net.");
$filters['NJABL Open Relays']['prefname'] =
'filters_spam_njabl_or';
$filters['NJABL Open Relays']['name'] =
'NJABL Open Relay/Direct Spam Source List';
$filters['NJABL Open Relays']['link'] =
'http://www.njabl.org/';
$filters['NJABL Open Relays']['dns'] =
'dnsbl.njabl.org';
$filters['NJABL Open Relays']['result'] =
'127.0.0.2';
$filters['NJABL Open Relays']['comment'] =
_("FREE, for now - Not Just Another Blacklist - Both Open Relays and Direct SPAM Sources.");
$filters['NJABL DUL']['prefname'] =
'filters_spam_njabl_dul';
$filters['NJABL DUL']['name'] =
'NJABL Dial-ups List';
$filters['NJABL DUL']['link'] =
'http://www.njabl.org/';
$filters['NJABL DUL']['dns'] =
'dnsbl.njabl.org';
$filters['NJABL DUL']['result'] =
'127.0.0.3';
$filters['NJABL DUL']['comment'] =
_("FREE, for now - Not Just Another Blacklist - Dial-up IPs.");
$filters['Conf DSBL.ORG Relay']['prefname'] =
'filters_spam_dsbl_conf_ss';
$filters['Conf DSBL.ORG Relay']['name'] =
'DSBL.org Confirmed Relay List';
$filters['Conf DSBL.ORG Relay']['link'] =
'http://www.dsbl.org/';
$filters['Conf DSBL.ORG Relay']['dns'] =
'list.dsbl.org';
$filters['Conf DSBL.ORG Relay']['result'] =
'127.0.0.2';
$filters['Conf DSBL.ORG Relay']['comment'] =
_("FREE - Distributed Sender Boycott List - Confirmed Relays");
$filters['Conf DSBL.ORG Multi-Stage']['prefname'] =
'filters_spam_dsbl_conf_ms';
$filters['Conf DSBL.ORG Multi-Stage']['name'] =
'DSBL.org Confirmed Multi-Stage Relay List';
$filters['Conf DSBL.ORG Multi-Stage']['link'] =
'http://www.dsbl.org/';
$filters['Conf DSBL.ORG Multi-Stage']['dns'] =
'multihop.dsbl.org';
$filters['Conf DSBL.ORG Multi-Stage']['result'] =
'127.0.0.2';
$filters['Conf DSBL.ORG Multi-Stage']['comment'] =
_("FREE - Distributed Sender Boycott List - Confirmed Multi-stage Relays");
$filters['UN-Conf DSBL.ORG']['prefname'] =
'filters_spam_dsbl_unc';
$filters['UN-Conf DSBL.ORG']['name'] =
'DSBL.org UN-Confirmed Relay List';
$filters['UN-Conf DSBL.ORG']['link'] =
'http://www.dsbl.org/';
$filters['UN-Conf DSBL.ORG']['dns'] =
'unconfirmed.dsbl.org';
$filters['UN-Conf DSBL.ORG']['result'] =
'127.0.0.2';
$filters['UN-Conf DSBL.ORG']['comment'] =
_("FREE - Distributed Sender Boycott List - UN-Confirmed Relays");
foreach ($filters as $Key =>
$Value) {
$filters[$Key]['enabled'] =
getPref($data_dir, $username, $filters[$Key]['prefname']);
* @param int $id ID of the filter to remove
function remove_filter ($id) {
global $data_dir, $username;
while ($nextFilter =
getPref($data_dir, $username, 'filter' .
($id +
1))) {
setPref($data_dir, $username, 'filter' .
$id, $nextFilter);
* @param int $id1 ID of first filter to swap
* @param int $id2 ID of second filter to swap
function filter_swap($id1, $id2) {
global $data_dir, $username;
$FirstFilter =
getPref($data_dir, $username, 'filter' .
$id1);
$SecondFilter =
getPref($data_dir, $username, 'filter' .
$id2);
if ($FirstFilter &&
$SecondFilter) {
setPref($data_dir, $username, 'filter' .
$id2, $FirstFilter);
setPref($data_dir, $username, 'filter' .
$id1, $SecondFilter);
* This updates the filter rules when renaming or deleting folders
function update_for_folder ($args) {
global $data_dir, $username;
$filters =
load_filters();
$filter_count =
count($filters);
for ($i =
0; $i <
$filter_count; $i++
) {
if ($old_folder ==
$filters[$i]['folder']) {
if ($action ==
'rename') {
$filters[$i]['folder'] =
$new_folder;
setPref($data_dir, $username, 'filter'.
$i,
$filters[$i]['where'].
','.
$filters[$i]['what'].
','.
$new_folder);
elseif ($action ==
'delete') {
* Display formated error message
* @param string $string text message
* @return string html formated text message
function do_error($string) {
echo
"<p align=\"center\"><font color=\"$color[2]\">";
Documentation generated on Sat, 07 Oct 2006 16:11:01 +0300 by phpDocumentor 1.3.0RC6