You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by km...@apache.org on 2014/02/11 18:26:52 UTC
svn commit: r1567225 [12/15] - in /spamassassin/site/full/3.4.x: ./ doc/
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto Whitelist</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#new">new</a></li>
+ <li><a href="#new_checker">new_checker</a></li>
+ <li><a href="#get_addr_entry">get_addr_entry</a></li>
+ <li><a href="#add_score">add_score</a></li>
+ <li><a href="#remove_entry">remove_entry</a></li>
+ <li><a href="#finish">finish</a></li>
+ <li><a href="#_unpack_addr">_unpack_addr</a></li>
+ </ul>
+
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto Whitelist</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+ my $factory = Mail::SpamAssassin::SQLBasedAddrList->new()
+ $spamtest->set_persistent_addr_list_factory ($factory);
+ ... call into SpamAssassin classes...</pre>
+<p>SpamAssassin will call:</p>
+<pre>
+ my $addrlist = $factory->new_checker($spamtest);
+ $entry = $addrlist->get_addr_entry ($addr, $origip);
+ ...</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>A SQL based persistent address list implementation.</p>
+<p>See <code>Mail::SpamAssassin::PersistentAddrList</code> for more information.</p>
+<p>Uses DBI::DBD module access to your favorite database (tested with
+MySQL, SQLite and PostgreSQL) to store user auto-whitelists.</p>
+<p>The default table structure looks like this:
+CREATE TABLE awl (
+ username <code>varchar(100)</code> NOT NULL default '',
+ email <code>varchar(255)</code> NOT NULL default '',
+ ip <code>varchar(40)</code> NOT NULL default '',
+ count <code>int(11)</code> NOT NULL default '0',
+ totscore float NOT NULL default '0',
+ signedby <code>varchar(255)</code> NOT NULL default '',
+ PRIMARY KEY (username,email,signedby,ip)
+) TYPE=MyISAM;</p>
+<p>Your table definition may change depending on which database driver
+you choose. There is a config option to override the table name.</p>
+<p>This module introduces several new config variables:</p>
+<p>user_awl_dsn</p>
+<p>user_awl_sql_username</p>
+<p>user_awl_sql_password</p>
+<p>user_awl_sql_table</p>
+<p>user_awl_sql_override_username</p>
+<p>see <code>Mail::SpamAssassin::Conf</code> for more information.</p>
+<p>
+</p>
+<h2><a name="new">new</a></h2>
+<p>public class (Mail::SpamAssassin::SQLBasedAddrList) new ()</p>
+<p>Description:
+This method creates a new instance of the SQLBasedAddrList factory and calls
+the parent's (PersistentAddrList) new method.</p>
+<p>
+</p>
+<h2><a name="new_checker">new_checker</a></h2>
+<p>public instance (Mail::SpamAssassin::SQLBasedAddrList) new_checker (\% $main)</p>
+<p>Description:
+This method is called to setup a new checker interface and return a blessed
+copy of itself. Here is where we setup the SQL database connection based
+on the config values.</p>
+<p>
+</p>
+<h2><a name="get_addr_entry">get_addr_entry</a></h2>
+<p>public instance (\%) get_addr_entry (String $addr, String $signedby)</p>
+<p>Description:
+This method takes a given <code>$addr</code> and splits it between the email address
+component and the ip component and performs a lookup in the database. If
+nothing is found in the database then a blank entry hash is created and
+returned, otherwise an entry containing the found information is returned.
+If a with_awl_signer configuration option is enabled only addresses signed
+by the given signing identity are taken into account, or, if $signedby is
+undefined (or empty) only unsigned entries are considered.</p>
+<p>A key, <code>exists_p</code>, is set to 1 if an entry already exists in the database,
+otherwise it is set to 0.</p>
+<p>
+</p>
+<h2><a name="add_score">add_score</a></h2>
+<p>public instance (\%) add_score (\% $entry, Integer $score)</p>
+<p>Description:
+This method adds a given <code>$score</code> to a given <code>$entry</code>. If the entry was
+marked as not existing in the database then an entry will be inserted,
+otherwise a simple update will be performed.</p>
+<p>NOTE: This code uses a self referential SQL call (ie set foo = foo + 1) which
+is supported by most modern database backends, but not everything calling
+itself a SQL database.</p>
+<p>
+</p>
+<h2><a name="remove_entry">remove_entry</a></h2>
+<p>public instance () remove_entry (\% $entry)</p>
+<p>Description:
+This method removes a given <code>$entry</code> from the database. If the
+ip portion of the entry address is equal to ``none'' then remove any
+perl-IP entries for this address as well.</p>
+<p>
+</p>
+<h2><a name="finish">finish</a></h2>
+<p>public instance () finish ()</p>
+<p>Description:
+This method provides the necessary cleanup for the address list.</p>
+<p>
+</p>
+<h2><a name="_unpack_addr">_unpack_addr</a></h2>
+<p>private instance (String, String) _unpack_addr(string $addr)</p>
+<p>Description:
+This method splits an autowhitelist address into it's two components,
+email and ip address.</p>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,105 @@
+NAME
+ Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto
+ Whitelist
+
+SYNOPSIS
+ my $factory = Mail::SpamAssassin::SQLBasedAddrList->new()
+ $spamtest->set_persistent_addr_list_factory ($factory);
+ ... call into SpamAssassin classes...
+
+ SpamAssassin will call:
+
+ my $addrlist = $factory->new_checker($spamtest);
+ $entry = $addrlist->get_addr_entry ($addr, $origip);
+ ...
+
+DESCRIPTION
+ A SQL based persistent address list implementation.
+
+ See "Mail::SpamAssassin::PersistentAddrList" for more information.
+
+ Uses DBI::DBD module access to your favorite database (tested with
+ MySQL, SQLite and PostgreSQL) to store user auto-whitelists.
+
+ The default table structure looks like this: CREATE TABLE awl ( username
+ varchar(100) NOT NULL default '', email varchar(255) NOT NULL default
+ '', ip varchar(40) NOT NULL default '', count int(11) NOT NULL default
+ '0', totscore float NOT NULL default '0', signedby varchar(255) NOT NULL
+ default '', PRIMARY KEY (username,email,signedby,ip) ) TYPE=MyISAM;
+
+ Your table definition may change depending on which database driver you
+ choose. There is a config option to override the table name.
+
+ This module introduces several new config variables:
+
+ user_awl_dsn
+
+ user_awl_sql_username
+
+ user_awl_sql_password
+
+ user_awl_sql_table
+
+ user_awl_sql_override_username
+
+ see "Mail::SpamAssassin::Conf" for more information.
+
+ new
+ public class (Mail::SpamAssassin::SQLBasedAddrList) new ()
+
+ Description: This method creates a new instance of the SQLBasedAddrList
+ factory and calls the parent's (PersistentAddrList) new method.
+
+ new_checker
+ public instance (Mail::SpamAssassin::SQLBasedAddrList) new_checker (\%
+ $main)
+
+ Description: This method is called to setup a new checker interface and
+ return a blessed copy of itself. Here is where we setup the SQL database
+ connection based on the config values.
+
+ get_addr_entry
+ public instance (\%) get_addr_entry (String $addr, String $signedby)
+
+ Description: This method takes a given $addr and splits it between the
+ email address component and the ip component and performs a lookup in
+ the database. If nothing is found in the database then a blank entry
+ hash is created and returned, otherwise an entry containing the found
+ information is returned. If a with_awl_signer configuration option is
+ enabled only addresses signed by the given signing identity are taken
+ into account, or, if $signedby is undefined (or empty) only unsigned
+ entries are considered.
+
+ A key, "exists_p", is set to 1 if an entry already exists in the
+ database, otherwise it is set to 0.
+
+ add_score
+ public instance (\%) add_score (\% $entry, Integer $score)
+
+ Description: This method adds a given $score to a given $entry. If the
+ entry was marked as not existing in the database then an entry will be
+ inserted, otherwise a simple update will be performed.
+
+ NOTE: This code uses a self referential SQL call (ie set foo = foo + 1)
+ which is supported by most modern database backends, but not everything
+ calling itself a SQL database.
+
+ remove_entry
+ public instance () remove_entry (\% $entry)
+
+ Description: This method removes a given $entry from the database. If
+ the ip portion of the entry address is equal to "none" then remove any
+ perl-IP entries for this address as well.
+
+ finish
+ public instance () finish ()
+
+ Description: This method provides the necessary cleanup for the address
+ list.
+
+ _unpack_addr
+ private instance (String, String) _unpack_addr(string $addr)
+
+ Description: This method splits an autowhitelist address into it's two
+ components, email and ip address.
+
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::SubProcBackChannel - back-channel for communication between a master and multiple slave processes</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#methods">METHODS</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::SubProcBackChannel - back-channel for communication between a master and multiple slave processes</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>Mail::SpamAssassin</code>
+<code>Mail::SpamAssassin::ArchiveIterator</code>
+<code>Mail::SpamAssassin::SpamdPreforkScaling</code>
+<code>spamassassin</code>
+<code>spamd</code>
+<code>mass-check</code></p>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,10 @@
+NAME
+ Mail::SpamAssassin::SubProcBackChannel - back-channel for communication
+ between a master and multiple slave processes
+
+METHODS
+SEE ALSO
+ "Mail::SpamAssassin" "Mail::SpamAssassin::ArchiveIterator"
+ "Mail::SpamAssassin::SpamdPreforkScaling" "spamassassin" "spamd"
+ "mass-check"
+
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#public_methods">PUBLIC METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+ # non-timeout code...</pre>
+<pre>
+ my $t = Mail::SpamAssassin::Timeout->new({ secs => 5, deadline => $when });
+
+ $t->run(sub {
+ # code to run with a 5-second timeout...
+ });</pre>
+<pre>
+ if ($t->timed_out()) {
+ # do something...
+ }</pre>
+<pre>
+ # more non-timeout code...</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This module provides a safe, reliable and clean API to provide
+<code>alarm(2)</code>-based timeouts for perl code.</p>
+<p>Note that <code>$SIG{ALRM}</code> is used to provide the timeout, so this will not
+interrupt out-of-control regular expression matches.</p>
+<p>Nested timeouts are supported.</p>
+<p>
+</p>
+<hr />
+<h1><a name="public_methods">PUBLIC METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_new">my $t = Mail::SpamAssassin::Timeout->new({ ... options ... });</a></strong><br />
+</dt>
+<dd>
+Constructor. Options include:
+</dd>
+<dl>
+<dt><strong><a name="item_secs__3d_3e__24seconds">secs => $seconds</a></strong><br />
+</dt>
+<dd>
+time interval, in seconds. Optional; if neither <code>secs</code> nor <code>deadline</code> is
+specified, no timeouts will be applied.
+</dd>
+<p></p>
+<dt><strong><a name="item_deadline__3d_3e__24unix_timestamp">deadline => $unix_timestamp</a></strong><br />
+</dt>
+<dd>
+Unix timestamp (seconds since epoch) when a timeout is reached in the latest.
+Optional; if neither <strong>secs</strong> nor <strong>deadline</strong> is specified, no timeouts will
+be applied. If both are specified, the shorter interval of the two prevails.
+</dd>
+<p></p></dl>
+<dt><strong><a name="item_run">$t-><code>run($coderef)</code></a></strong><br />
+</dt>
+<dd>
+Run a code reference within the currently-defined timeout.
+</dd>
+<dd>
+<p>The timeout is as defined by the <strong>secs</strong> and <strong>deadline</strong> parameters
+to the constructor.</p>
+</dd>
+<dd>
+<p>Returns whatever the subroutine returns, or <code>undef</code> on timeout.
+If the timer times out, <code>$t-<gt</code>timed_out()> will return <code>1</code>.</p>
+</dd>
+<dd>
+<p>Time elapsed is not cumulative; multiple runs of <a href="#item_run"><code>run</code></a> will restart the
+timeout from scratch. On the other hand, nested timers do observe outer
+timeouts if they are shorter, resignalling a timeout to the level which
+established them, i.e. code running under an inner timer can not exceed
+the time limit established by an outer timer. When restarting an outer
+timer on return, elapsed time of a running code is taken into account.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_run_and_catch">$t-><code>run_and_catch($coderef)</code></a></strong><br />
+</dt>
+<dd>
+Run a code reference, as per <code>$t-<gt</code>run()>, but also catching any
+<code>die()</code> calls within the code reference.
+</dd>
+<dd>
+<p>Returns <code>undef</code> if no <code>die()</code> call was executed and <code>$@</code> was unset, or the
+value of <code>$@</code> if it was set. (The timeout event doesn't count as a <code>die()</code>.)</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_timed_out">$t-><code>timed_out()</code></a></strong><br />
+</dt>
+<dd>
+Returns <code>1</code> if the most recent code executed in <a href="#item_run"><code>run()</code></a> timed out, or
+<code>undef</code> if it did not.
+</dd>
+<p></p>
+<dt><strong><a name="item_reset">$t-><code>reset()</code></a></strong><br />
+</dt>
+<dd>
+If called within a <a href="#item_run"><code>run()</code></a> code reference, causes the current alarm timer
+to be restored to its original setting (useful after our alarm setting was
+clobbered by some underlying module).
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Timeout.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,75 @@
+NAME
+ Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl
+
+SYNOPSIS
+ # non-timeout code...
+
+ my $t = Mail::SpamAssassin::Timeout->new({ secs => 5, deadline => $when });
+
+ $t->run(sub {
+ # code to run with a 5-second timeout...
+ });
+
+ if ($t->timed_out()) {
+ # do something...
+ }
+
+ # more non-timeout code...
+
+DESCRIPTION
+ This module provides a safe, reliable and clean API to provide
+ alarm(2)-based timeouts for perl code.
+
+ Note that $SIG{ALRM} is used to provide the timeout, so this will not
+ interrupt out-of-control regular expression matches.
+
+ Nested timeouts are supported.
+
+PUBLIC METHODS
+ my $t = Mail::SpamAssassin::Timeout->new({ ... options ... });
+ Constructor. Options include:
+
+ secs => $seconds
+ time interval, in seconds. Optional; if neither "secs" nor
+ "deadline" is specified, no timeouts will be applied.
+
+ deadline => $unix_timestamp
+ Unix timestamp (seconds since epoch) when a timeout is reached
+ in the latest. Optional; if neither secs nor deadline is
+ specified, no timeouts will be applied. If both are specified,
+ the shorter interval of the two prevails.
+
+ $t->run($coderef)
+ Run a code reference within the currently-defined timeout.
+
+ The timeout is as defined by the secs and deadline parameters to the
+ constructor.
+
+ Returns whatever the subroutine returns, or "undef" on timeout. If
+ the timer times out, "$t-<gt"timed_out()> will return 1.
+
+ Time elapsed is not cumulative; multiple runs of "run" will restart
+ the timeout from scratch. On the other hand, nested timers do
+ observe outer timeouts if they are shorter, resignalling a timeout
+ to the level which established them, i.e. code running under an
+ inner timer can not exceed the time limit established by an outer
+ timer. When restarting an outer timer on return, elapsed time of a
+ running code is taken into account.
+
+ $t->run_and_catch($coderef)
+ Run a code reference, as per "$t-<gt"run()>, but also catching any
+ "die()" calls within the code reference.
+
+ Returns "undef" if no "die()" call was executed and $@ was unset, or
+ the value of $@ if it was set. (The timeout event doesn't count as a
+ "die()".)
+
+ $t->timed_out()
+ Returns 1 if the most recent code executed in "run()" timed out, or
+ "undef" if it did not.
+
+ $t->reset()
+ If called within a "run()" code reference, causes the current alarm
+ timer to be restored to its original setting (useful after our alarm
+ setting was clobbered by some underlying module).
+
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Util - utility functions</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Util - utility functions</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>A general class for utility functions. Please use this for functions that
+stand alone, without requiring a $self object, Portability functions
+especially.</p>
+<p>NOTE: The functions in this module are to be considered private. Their API may
+change at any point, and it's expected that they'll only be used by other
+Mail::SpamAssassin modules. (TODO: we should probably revisit this if
+it's useful for plugin development.)</p>
+<p>NOTE: Utility functions should not be changing global variables such
+as $_, $1, $2, ... $/, etc. unless explicitly documented. If these
+variables are in use by these functions, they should be localized.</p>
+<dl>
+<dt><strong><a name="item_first_available_module">$module = first_available_module (@module_list)</a></strong><br />
+</dt>
+<dd>
+Return the name of the first module that can be successfully loaded with
+<code>require</code> from the list. Returns <code>undef</code> if none are available.
+</dd>
+<dd>
+<p>This is used instead of <code>AnyDBM_File</code> as follows:</p>
+</dd>
+<dd>
+<pre>
+ my $module = Mail::SpamAssassin::Util::first_available_module
+ (qw(DB_File GDBM_File NDBM_File SDBM_File));
+ tie %hash, $module, $path, [... args];</pre>
+</dd>
+<dd>
+<p>Note that <code>SDBM_File</code> is guaranteed to be present, since it comes
+with Perl.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item_my">my ($filepath, $filehandle) = secure_tmpfile();</a></strong><br />
+</dt>
+<dd>
+Generates a filename for a temporary file, opens it exclusively and
+securely, and returns a filehandle to the open file (opened O_RDWR).
+</dd>
+<dd>
+<p>If it cannot open a file after 20 tries, it returns <code>undef</code>.</p>
+</dd>
+<p></p>
+<dt><strong>my ($dirpath) = secure_tmpdir();</strong><br />
+</dt>
+<dd>
+Generates a directory for temporary files. Creates it securely and
+returns the path to the directory.
+</dd>
+<dd>
+<p>If it cannot create a directory after 20 tries, it returns <code>undef</code>.</p>
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,42 @@
+NAME
+ Mail::SpamAssassin::Util - utility functions
+
+DESCRIPTION
+ A general class for utility functions. Please use this for functions
+ that stand alone, without requiring a $self object, Portability
+ functions especially.
+
+ NOTE: The functions in this module are to be considered private. Their
+ API may change at any point, and it's expected that they'll only be used
+ by other Mail::SpamAssassin modules. (TODO: we should probably revisit
+ this if it's useful for plugin development.)
+
+ NOTE: Utility functions should not be changing global variables such as
+ $_, $1, $2, ... $/, etc. unless explicitly documented. If these
+ variables are in use by these functions, they should be localized.
+
+ $module = first_available_module (@module_list)
+ Return the name of the first module that can be successfully loaded
+ with "require" from the list. Returns "undef" if none are available.
+
+ This is used instead of "AnyDBM_File" as follows:
+
+ my $module = Mail::SpamAssassin::Util::first_available_module
+ (qw(DB_File GDBM_File NDBM_File SDBM_File));
+ tie %hash, $module, $path, [... args];
+
+ Note that "SDBM_File" is guaranteed to be present, since it comes
+ with Perl.
+
+ my ($filepath, $filehandle) = secure_tmpfile();
+ Generates a filename for a temporary file, opens it exclusively and
+ securely, and returns a filehandle to the open file (opened O_RDWR).
+
+ If it cannot open a file after 20 tries, it returns "undef".
+
+ my ($dirpath) = secure_tmpdir();
+ Generates a directory for temporary files. Creates it securely and
+ returns the path to the directory.
+
+ If it cannot create a directory after 20 tries, it returns "undef".
+
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,46 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail:SpamAssassin::Util::DependencyInfo - spamassassin debugging helpers</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#methods">METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail:SpamAssassin::Util::DependencyInfo - spamassassin debugging helpers</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>loadplugin Mail:SpamAssassin::Util::DependencyInfo</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_debug_diagnostics">$f->debug_diagnostics ()</a></strong><br />
+</dt>
+<dd>
+Output some diagnostic information, useful for debugging SpamAssassin
+problems.
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,11 @@
+NAME
+ Mail:SpamAssassin::Util::DependencyInfo - spamassassin debugging helpers
+
+SYNOPSIS
+ loadplugin Mail:SpamAssassin::Util::DependencyInfo
+
+METHODS
+ $f->debug_diagnostics ()
+ Output some diagnostic information, useful for debugging
+ SpamAssassin problems.
+
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Util::Progress - Progress bar support for SpamAssassin</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <ul>
+
+ <li><a href="#new">new</a></li>
+ <li><a href="#init_bar">init_bar</a></li>
+ <li><a href="#update">update</a></li>
+ <li><a href="#final">final</a></li>
+ </ul>
+
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Util::Progress - Progress bar support for SpamAssassin</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+ my $progress = Mail::SpamAssassin::Util::Progress->new({total => 100});</pre>
+<pre>
+ $msgcount = 0;
+ foreach my $message (@messages) {
+ # do something here
+ $msgcount++;
+ $progress->update($msgcount);
+ }</pre>
+<pre>
+ $progress->final();</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This module implements a progress bar for use in SpamAssassin scripts and
+modules. It allows you to create the progress bar, update it and print
+out the final results of a particular run.</p>
+<p>
+</p>
+<h2><a name="new">new</a></h2>
+<p>public class (Mail::SpamAssassin::Util::Progress) new (\% $args)</p>
+<p>Description:
+Creates a new Mail::SpamAssassin::Util::Progress object, valid values for
+the $args hashref are:</p>
+<dl>
+<dt><strong><a name="item_total">total (required)</a></strong><br />
+</dt>
+<dd>
+The total number of messages expected to be processed. This item is
+required.
+</dd>
+<p></p>
+<dt><strong><a name="item_fh__5boptional_5d">fh [optional]</a></strong><br />
+</dt>
+<dd>
+An optional filehandle may be passed in, otherwise STDERR will be used by
+default.
+</dd>
+<p></p>
+<dt><strong><a name="item_term__5boptional_5d">term [optional]</a></strong><br />
+</dt>
+<dd>
+The module will attempt to determine if a valid terminal exists on the
+STDIN filehandle. This item allows you to override that value.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<h2><a name="init_bar">init_bar</a></h2>
+<p>public instance () <code>init_bar()</code></p>
+<p>Description:
+This method creates the initial progress bar and is called automatically from new. In addition
+you can call init_bar on an existing object to reset the bar to it's original state.</p>
+<p>
+</p>
+<h2><a name="update">update</a></h2>
+<p>public instance () update ([Integer $num_done])</p>
+<p>Description:
+This method is what gets called to update the progress bar. You may optionally pass in
+an integer value that indicates how many messages have been processed. If you do not pass
+anything in then the num_done value will be incremented by one.</p>
+<p>
+</p>
+<h2><a name="final">final</a></h2>
+<p>public instance () final ([Integer $num_done])</p>
+<p>Description:
+This method should be called once all processing has finished.
+It will print out the final msgs per sec calculation and the total time taken.
+You can optionally pass in a num_done value, otherwise it will use the value
+calculated from the last call to update.</p>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_Progress.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,62 @@
+NAME
+ Mail::SpamAssassin::Util::Progress - Progress bar support for
+ SpamAssassin
+
+SYNOPSIS
+ my $progress = Mail::SpamAssassin::Util::Progress->new({total => 100});
+
+ $msgcount = 0;
+ foreach my $message (@messages) {
+ # do something here
+ $msgcount++;
+ $progress->update($msgcount);
+ }
+
+ $progress->final();
+
+DESCRIPTION
+ This module implements a progress bar for use in SpamAssassin scripts
+ and modules. It allows you to create the progress bar, update it and
+ print out the final results of a particular run.
+
+ new
+ public class (Mail::SpamAssassin::Util::Progress) new (\% $args)
+
+ Description: Creates a new Mail::SpamAssassin::Util::Progress object,
+ valid values for the $args hashref are:
+
+ total (required)
+ The total number of messages expected to be processed. This item is
+ required.
+
+ fh [optional]
+ An optional filehandle may be passed in, otherwise STDERR will be
+ used by default.
+
+ term [optional]
+ The module will attempt to determine if a valid terminal exists on
+ the STDIN filehandle. This item allows you to override that value.
+
+ init_bar
+ public instance () init_bar()
+
+ Description: This method creates the initial progress bar and is called
+ automatically from new. In addition you can call init_bar on an existing
+ object to reset the bar to it's original state.
+
+ update
+ public instance () update ([Integer $num_done])
+
+ Description: This method is what gets called to update the progress bar.
+ You may optionally pass in an integer value that indicates how many
+ messages have been processed. If you do not pass anything in then the
+ num_done value will be incremented by one.
+
+ final
+ public instance () final ([Integer $num_done])
+
+ Description: This method should be called once all processing has
+ finished. It will print out the final msgs per sec calculation and the
+ total time taken. You can optionally pass in a num_done value, otherwise
+ it will use the value calculated from the last call to update.
+
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,71 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Mail::SpamAssassin::Util::RegistrarBoundaries - domain delegation rules</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#methods">METHODS</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Util::RegistrarBoundaries - domain delegation rules</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="item_split_domain">($hostname, $domain) = split_domain ($fqdn)</a></strong><br />
+</dt>
+<dd>
+Cut a fully-qualified hostname into the hostname part and the domain
+part, splitting at the DNS registry boundary.
+</dd>
+<dd>
+<p>Examples:</p>
+</dd>
+<dd>
+<pre>
+ "www.foo.com" => ( "www", "foo.com" )
+ "www.foo.co.uk" => ( "www", "foo.co.uk" )</pre>
+</dd>
+<p></p>
+<dt><strong><a name="item_trim_domain">$domain = <code>trim_domain($fqdn)</code></a></strong><br />
+</dt>
+<dd>
+Cut a fully-qualified hostname into the hostname part and the domain
+part, returning just the domain.
+</dd>
+<dd>
+<p>Examples:</p>
+</dd>
+<dd>
+<pre>
+ "www.foo.com" => "foo.com"
+ "www.foo.co.uk" => "foo.co.uk"</pre>
+</dd>
+<p></p>
+<dt><strong><a name="item_is_domain_valid">$ok = <code>is_domain_valid($dom)</code></a></strong><br />
+</dt>
+<dd>
+Return <code>1</code> if the domain is valid, <code>undef</code> otherwise. A valid domain
+(a) does not contain whitespace, (b) contains at least one dot, and (c)
+uses a valid TLD or ccTLD.
+</dd>
+<p></p></dl>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Util_RegistrarBoundaries.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,27 @@
+NAME
+ Mail::SpamAssassin::Util::RegistrarBoundaries - domain delegation rules
+
+METHODS
+ ($hostname, $domain) = split_domain ($fqdn)
+ Cut a fully-qualified hostname into the hostname part and the domain
+ part, splitting at the DNS registry boundary.
+
+ Examples:
+
+ "www.foo.com" => ( "www", "foo.com" )
+ "www.foo.co.uk" => ( "www", "foo.co.uk" )
+
+ $domain = trim_domain($fqdn)
+ Cut a fully-qualified hostname into the hostname part and the domain
+ part, returning just the domain.
+
+ Examples:
+
+ "www.foo.com" => "foo.com"
+ "www.foo.co.uk" => "foo.co.uk"
+
+ $ok = is_domain_valid($dom)
+ Return 1 if the domain is valid, "undef" otherwise. A valid domain
+ (a) does not contain whitespace, (b) contains at least one dot, and
+ (c) uses a valid TLD or ccTLD.
+
Added: spamassassin/site/full/3.4.x/doc/sa-awl.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/sa-awl.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.html (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>sa-awl - examine and manipulate SpamAssassin's auto-whitelist db</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#output">OUTPUT</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>sa-awl - examine and manipulate SpamAssassin's auto-whitelist db</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>sa-awl</strong> [--clean] [--min n] [dbfile]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Check or clean a SpamAssassin auto-whitelist (AWL) database file.</p>
+<p>The name of the file is specified after any options, as <code>dbfile</code>.
+The default is <code>$HOME/.spamassassin/auto-whitelist</code>.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dclean">--clean</a></strong><br />
+</dt>
+<dd>
+Clean out infrequently-used AWL entries. The <code>--min</code> switch can be
+used to select the threshold at which entries are kept or deleted.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dmin_n">--min n</a></strong><br />
+</dt>
+<dd>
+Select the threshold at which entries are kept or deleted when <a href="#item__2d_2dclean"><code>--clean</code></a> is
+used. The default is <code>2</code>, so entries that have only been seen once are
+deleted.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="output">OUTPUT</a></h1>
+<p>The output looks like this:</p>
+<pre>
+ AVG (TOTSCORE/COUNT) -- EMAIL|ip=IPBASE</pre>
+<p>For example:</p>
+<pre>
+ 0.0 (0.0/7) -- dawson@example.com|ip=208.192
+ 21.8 (43.7/2) -- mcdaniel_2s2000@example.com|ip=200.106</pre>
+<p><code>AVG</code> is the average score; <code>TOTSCORE</code> is the total score of all mails seen
+so far; <code>COUNT</code> is the number of messages seen from that sender; <code>EMAIL</code> is
+the sender's email address, and <code>IPBASE</code> is the <strong>AWL base IP address</strong>.</p>
+<p><strong>AWL base IP address</strong> is a way to identify the sender's IP address they
+frequently send from, in an approximate way, but remaining hard for spammers to
+spoof. The algorithm is as follows:</p>
+<pre>
+ - take the last Received header that contains a public IP address -- namely
+ one which is not in private, unrouted IP space.</pre>
+<pre>
+ - chop off the last two octets, assuming that the user may be in an ISP's
+ dynamic address pool.</pre>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/sa-awl.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/sa-awl.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.txt (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,47 @@
+NAME
+ sa-awl - examine and manipulate SpamAssassin's auto-whitelist db
+
+SYNOPSIS
+ sa-awl [--clean] [--min n] [dbfile]
+
+DESCRIPTION
+ Check or clean a SpamAssassin auto-whitelist (AWL) database file.
+
+ The name of the file is specified after any options, as "dbfile". The
+ default is "$HOME/.spamassassin/auto-whitelist".
+
+OPTIONS
+ --clean
+ Clean out infrequently-used AWL entries. The "--min" switch can be
+ used to select the threshold at which entries are kept or deleted.
+
+ --min n
+ Select the threshold at which entries are kept or deleted when
+ "--clean" is used. The default is 2, so entries that have only been
+ seen once are deleted.
+
+OUTPUT
+ The output looks like this:
+
+ AVG (TOTSCORE/COUNT) -- EMAIL|ip=IPBASE
+
+ For example:
+
+ 0.0 (0.0/7) -- dawson@example.com|ip=208.192
+ 21.8 (43.7/2) -- mcdaniel_2s2000@example.com|ip=200.106
+
+ "AVG" is the average score; "TOTSCORE" is the total score of all mails
+ seen so far; "COUNT" is the number of messages seen from that sender;
+ "EMAIL" is the sender's email address, and "IPBASE" is the AWL base IP
+ address.
+
+ AWL base IP address is a way to identify the sender's IP address they
+ frequently send from, in an approximate way, but remaining hard for
+ spammers to spoof. The algorithm is as follows:
+
+ - take the last Received header that contains a public IP address -- namely
+ one which is not in private, unrouted IP space.
+
+ - chop off the last two octets, assuming that the user may be in an ISP's
+ dynamic address pool.
+
Added: spamassassin/site/full/3.4.x/doc/sa-compile.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/sa-compile.html?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-compile.html (added)
+++ spamassassin/site/full/3.4.x/doc/sa-compile.html Tue Feb 11 17:26:49 2014
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>sa-compile - compile SpamAssassin ruleset into native code</title>
+<link rev="made" href="mailto:root@twm2005-dev.thoughtworthy.com" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#prerequesites">PREREQUESITES</a></li>
+ <li><a href="#bugs">BUGS</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+ <li><a href="#copyright">COPYRIGHT</a></li>
+</ul>
+<!-- INDEX END -->
+
+<hr />
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>sa-compile - compile SpamAssassin ruleset into native code</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>sa-compile</strong> [options]</p>
+<p>Options:</p>
+<pre>
+ --list Output base string list to STDOUT
+ --sudo Use 'sudo' for privilege escalation
+ --keep-tmps Keep temporary files instead of deleting
+ -C path, --configpath=path, --config-file=path
+ Path to standard configuration dir
+ -p prefs, --prefspath=file, --prefs-file=file
+ Set user preferences file
+ --siteconfigpath=path Path for site configs
+ (default: /etc/mail/spamassassin)
+ --updatedir=path Directory to place updates
+ (default: /var/lib/spamassassin/compiled/<perlversion>/3.004000)
+ --cf='config line' Additional line of configuration
+ -D, --debug [area=n,...] Print debugging messages
+ -V, --version Print version
+ -h, --help Print usage message</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>sa-compile uses <code>re2c</code> to compile the site-wide parts of the SpamAssassin
+ruleset. No part of user_prefs or any files included from user_prefs can be
+built into the compiled set.</p>
+<p>This compiled set is then used by the
+<code>Mail::SpamAssassin::Plugin::Rule2XSBody</code> plugin to speed up
+SpamAssassin's operation, where possible, and when that plugin is loaded.</p>
+<p><code>re2c</code> can match strings much faster than perl code, by constructing a DFA to
+match many simple strings in parallel, and compiling that to native object
+code. Not all SpamAssassin rules are amenable to this conversion, however.</p>
+<p>This requires <code>re2c</code> (see <code>http://re2c.org/</code>), and the C
+compiler used to build Perl XS modules, be installed.</p>
+<p>Note that running this, and creating a compiled ruleset, will have no
+effect on SpamAssassin scanning speeds unless you also edit your <code>v320.pre</code>
+file and ensure this line is uncommented:</p>
+<pre>
+ loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody</pre>
+<p>Additionally, ``sa-compile'' will not restart ``spamd'' or otherwise cause a scanner to
+reload the now-compiled ruleset automatically.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dlist"><strong>--list</strong></a></strong><br />
+</dt>
+<dd>
+Output the extracted base strings to STDOUT, instead of generating
+the C extension code.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dsudo"><strong>--sudo</strong></a></strong><br />
+</dt>
+<dd>
+Use <code>sudo(8)</code> to run code as 'root' when writing files to the compiled-rules
+storage area (which is <code>/var/lib/spamassassin/compiled/5.008/3.004000</code> by default).
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Produce less diagnostic output. Errors will still be displayed.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dkeep_2dtmps"><strong>--keep-tmps</strong></a></strong><br />
+</dt>
+<dd>
+Keep temporary files after the script completes, instead of
+deleting them.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dc_path_2c__2d_2dconfigpath_3dpath_2c__2d_2dconf"><strong>-C</strong> <em>path</em>, <strong>--configpath</strong>=<em>path</em>, <strong>--config-file</strong>=<em>path</em></a></strong><br />
+</dt>
+<dd>
+Use the specified path for locating the distributed configuration files.
+Ignore the default directories (usually <code>/usr/share/spamassassin</code> or similar).
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dsiteconfigpath_3dpath"><strong>--siteconfigpath</strong>=<em>path</em></a></strong><br />
+</dt>
+<dd>
+Use the specified path for locating site-specific configuration files. Ignore
+the default directories (usually <code>/etc/mail/spamassassin</code> or similar).
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dupdatedir"><strong>--updatedir</strong></a></strong><br />
+</dt>
+<dd>
+By default, <code>sa-compile</code> will use the system-wide rules update directory:
+</dd>
+<dd>
+<pre>
+ /var/lib/spamassassin/compiled/5.008/3.004000</pre>
+</dd>
+<dd>
+<p>If the updates should be stored in another location, specify it here.</p>
+</dd>
+<dd>
+<p>Note that use of this option is not recommended; if sa-compile is placing the
+compiled rules the wrong directory, you probably need to rebuild SpamAssassin
+with different <code>Makefile.PL</code> arguments, instead of overriding sa-compile's
+runtime behaviour.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dcf_3d_27config_line_27"><strong>--cf='config line'</strong></a></strong><br />
+</dt>
+<dd>
+Add additional lines of configuration directly from the command-line, parsed
+after the configuration files are read. Multiple <strong>--cf</strong> arguments can be
+used, and each will be considered a separate line of configuration.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dp_prefs_2c__2d_2dprefspath_3dprefs_2c__2d_2dpre"><strong>-p</strong> <em>prefs</em>, <strong>--prefspath</strong>=<em>prefs</em>, <strong>--prefs-file</strong>=<em>prefs</em></a></strong><br />
+</dt>
+<dd>
+Read user score preferences from <em>prefs</em> (usually
+<code>$HOME/.spamassassin/user_prefs</code>) .
+</dd>
+<p></p>
+<dt><strong><a name="item__2dd__5barea_2c_2e_2e_2e_5d_2c__2d_2ddebug__5barea"><strong>-D</strong> [<em>area,...</em>], <strong>--debug</strong> [<em>area,...</em>]</a></strong><br />
+</dt>
+<dd>
+Produce debugging output. If no areas are listed, all debugging information is
+printed. Diagnostic output can also be enabled for each area individually;
+<em>area</em> is the area of the code to instrument.
+</dd>
+<dd>
+<p>For more information about which areas (also known as channels) are
+available, please see the documentation at
+<a href="http://wiki.apache.org/spamassassin/DebugChannels">http://wiki.apache.org/spamassassin/DebugChannels</a>.</p>
+</dd>
+<p></p>
+<dt><strong><a name="item__2dh_2c__2d_2dhelp"><strong>-h</strong>, <strong>--help</strong></a></strong><br />
+</dt>
+<dd>
+Print help message and exit.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dv_2c__2d_2dversion"><strong>-V</strong>, <strong>--version</strong></a></strong><br />
+</dt>
+<dd>
+Print sa-compile version and exit.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>Mail::SpamAssassin(3)
+<code>spamassassin(1)</code>
+<code>spamd(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="prerequesites">PREREQUESITES</a></h1>
+<p><code>Mail::SpamAssassin</code>
+<code>re2c</code>
+<code>Mail::SpamAssassin::Plugin::Rule2XSBody</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="bugs">BUGS</a></h1>
+<p>See <http://issues.apache.org/SpamAssassin/></p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>The Apache <code>SpamAssassin(tm)</code> Project <http://spamassassin.apache.org/></p>
+<p>
+</p>
+<hr />
+<h1><a name="copyright">COPYRIGHT</a></h1>
+<p>SpamAssassin is distributed under the Apache License, Version 2.0, as
+described in the file <code>LICENSE</code> included with the distribution.</p>
+
+</body>
+
+</html>
Added: spamassassin/site/full/3.4.x/doc/sa-compile.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/sa-compile.txt?rev=1567225&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-compile.txt (added)
+++ spamassassin/site/full/3.4.x/doc/sa-compile.txt Tue Feb 11 17:26:49 2014
@@ -0,0 +1,134 @@
+NAME
+ sa-compile - compile SpamAssassin ruleset into native code
+
+SYNOPSIS
+ sa-compile [options]
+
+ Options:
+
+ --list Output base string list to STDOUT
+ --sudo Use 'sudo' for privilege escalation
+ --keep-tmps Keep temporary files instead of deleting
+ -C path, --configpath=path, --config-file=path
+ Path to standard configuration dir
+ -p prefs, --prefspath=file, --prefs-file=file
+ Set user preferences file
+ --siteconfigpath=path Path for site configs
+ (default: /etc/mail/spamassassin)
+ --updatedir=path Directory to place updates
+ (default: /var/lib/spamassassin/compiled/<perlversion>/3.004000)
+ --cf='config line' Additional line of configuration
+ -D, --debug [area=n,...] Print debugging messages
+ -V, --version Print version
+ -h, --help Print usage message
+
+DESCRIPTION
+ sa-compile uses "re2c" to compile the site-wide parts of the
+ SpamAssassin ruleset. No part of user_prefs or any files included from
+ user_prefs can be built into the compiled set.
+
+ This compiled set is then used by the
+ "Mail::SpamAssassin::Plugin::Rule2XSBody" plugin to speed up
+ SpamAssassin's operation, where possible, and when that plugin is
+ loaded.
+
+ "re2c" can match strings much faster than perl code, by constructing a
+ DFA to match many simple strings in parallel, and compiling that to
+ native object code. Not all SpamAssassin rules are amenable to this
+ conversion, however.
+
+ This requires "re2c" (see "http://re2c.org/"), and the C compiler used
+ to build Perl XS modules, be installed.
+
+ Note that running this, and creating a compiled ruleset, will have no
+ effect on SpamAssassin scanning speeds unless you also edit your
+ "v320.pre" file and ensure this line is uncommented:
+
+ loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
+
+ Additionally, "sa-compile" will not restart "spamd" or otherwise cause a
+ scanner to reload the now-compiled ruleset automatically.
+
+OPTIONS
+ --list
+ Output the extracted base strings to STDOUT, instead of generating
+ the C extension code.
+
+ --sudo
+ Use sudo(8) to run code as 'root' when writing files to the
+ compiled-rules storage area (which is
+ "/var/lib/spamassassin/compiled/5.008/3.004000" by default).
+
+ --quiet
+ Produce less diagnostic output. Errors will still be displayed.
+
+ --keep-tmps
+ Keep temporary files after the script completes, instead of deleting
+ them.
+
+ -C *path*, --configpath=*path*, --config-file=*path*
+ Use the specified path for locating the distributed configuration
+ files. Ignore the default directories (usually
+ "/usr/share/spamassassin" or similar).
+
+ --siteconfigpath=*path*
+ Use the specified path for locating site-specific configuration
+ files. Ignore the default directories (usually
+ "/etc/mail/spamassassin" or similar).
+
+ --updatedir
+ By default, "sa-compile" will use the system-wide rules update
+ directory:
+
+ /var/lib/spamassassin/compiled/5.008/3.004000
+
+ If the updates should be stored in another location, specify it
+ here.
+
+ Note that use of this option is not recommended; if sa-compile is
+ placing the compiled rules the wrong directory, you probably need to
+ rebuild SpamAssassin with different "Makefile.PL" arguments, instead
+ of overriding sa-compile's runtime behaviour.
+
+ --cf='config line'
+ Add additional lines of configuration directly from the
+ command-line, parsed after the configuration files are read.
+ Multiple --cf arguments can be used, and each will be considered a
+ separate line of configuration.
+
+ -p *prefs*, --prefspath=*prefs*, --prefs-file=*prefs*
+ Read user score preferences from *prefs* (usually
+ "$HOME/.spamassassin/user_prefs") .
+
+ -D [*area,...*], --debug [*area,...*]
+ Produce debugging output. If no areas are listed, all debugging
+ information is printed. Diagnostic output can also be enabled for
+ each area individually; *area* is the area of the code to
+ instrument.
+
+ For more information about which areas (also known as channels) are
+ available, please see the documentation at
+ <http://wiki.apache.org/spamassassin/DebugChannels>.
+
+ -h, --help
+ Print help message and exit.
+
+ -V, --version
+ Print sa-compile version and exit.
+
+SEE ALSO
+ Mail::SpamAssassin(3) spamassassin(1) spamd(1)
+
+PREREQUESITES
+ "Mail::SpamAssassin" "re2c" "Mail::SpamAssassin::Plugin::Rule2XSBody"
+
+BUGS
+ See <http://issues.apache.org/SpamAssassin/>
+
+AUTHORS
+ The Apache SpamAssassin(tm) Project <http://spamassassin.apache.org/>
+
+COPYRIGHT
+ SpamAssassin is distributed under the Apache License, Version 2.0, as
+ described in the file "LICENSE" included with the distribution.
+