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 2020/01/29 19:06:00 UTC

svn commit: r1873332 [14/17] - in /spamassassin/site/full/3.4.x: ./ doc/

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.txt?rev=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.txt Wed Jan 29 19:05:59 2020
@@ -0,0 +1,25 @@
+NAME
+    Mail::SpamAssassin::Plugin::WhiteListSubject - whitelist by Subject
+    header
+
+SYNOPSIS
+     loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
+
+     header SUBJECT_IN_WHITELIST eval:check_subject_in_whitelist()
+     header SUBJECT_IN_BLACKLIST eval:check_subject_in_blacklist()
+
+     score SUBJECT_IN_WHITELIST -100
+     score SUBJECT_IN_BLACKLIST 100
+
+     whitelist_subject [Bug *]
+     blacklist_subject Make Money Fast
+
+DESCRIPTION
+    This SpamAssassin plugin module provides eval tests for whitelisting and
+    blacklisting particular strings in the Subject header. String will match
+    anywhere in the subject. The value for whitelist_subject or
+    blacklist_subject are strings which may contain file -glob -style
+    patterns, similar to the other whitelist_* config options. Note that
+    each subject/string must be a separate *_subject command, all whitespace
+    is included in the string.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.html?rev=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.html Wed Jan 29 19:05:59 2020
@@ -0,0 +1,62 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#METHODS">METHODS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::RegistryBoundaries - domain delegation rules</p>
+
+<h1 id="METHODS">METHODS</h1>
+
+<dl>
+
+<dt id="hostname-domain-split_domain-fqdn">($hostname, $domain) = split_domain ($fqdn)</dt>
+<dd>
+
+<p>Cut a fully-qualified hostname into the hostname part and the domain part, splitting at the DNS registry boundary.</p>
+
+<p>Examples:</p>
+
+<pre><code>    &quot;www.foo.com&quot; =&gt; ( &quot;www&quot;, &quot;foo.com&quot; )
+    &quot;www.foo.co.uk&quot; =&gt; ( &quot;www&quot;, &quot;foo.co.uk&quot; )</code></pre>
+
+</dd>
+<dt id="domain-trim_domain-fqdn">$domain = trim_domain($fqdn)</dt>
+<dd>
+
+<p>Cut a fully-qualified hostname into the hostname part and the domain part, returning just the domain.</p>
+
+<p>Examples:</p>
+
+<pre><code>    &quot;www.foo.com&quot; =&gt; &quot;foo.com&quot;
+    &quot;www.foo.co.uk&quot; =&gt; &quot;foo.co.uk&quot;</code></pre>
+
+</dd>
+<dt id="ok-is_domain_valid-dom">$ok = is_domain_valid($dom)</dt>
+<dd>
+
+<p>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.</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt?rev=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt Wed Jan 29 19:05:59 2020
@@ -0,0 +1,27 @@
+NAME
+    Mail::SpamAssassin::RegistryBoundaries - 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/Mail_SpamAssassin_SQLBasedAddrList.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html?rev=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,123 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#SYNOPSIS">SYNOPSIS</a></li>
+  <li><a href="#DESCRIPTION">DESCRIPTION</a>
+    <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>
+  </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto Whitelist</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>    my $factory = Mail::SpamAssassin::SQLBasedAddrList-&gt;new()
+    $spamtest-&gt;set_persistent_addr_list_factory ($factory);
+  ... call into SpamAssassin classes...</code></pre>
+
+<p>SpamAssassin will call:</p>
+
+<pre><code>    my $addrlist = $factory-&gt;new_checker($spamtest);
+    $entry = $addrlist-&gt;get_addr_entry ($addr, $origip);
+  ...</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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 varchar(100) NOT NULL default &#39;&#39;, email varchar(255) NOT NULL default &#39;&#39;, ip varchar(40) NOT NULL default &#39;&#39;, msgcount int(11) NOT NULL default &#39;0&#39;, totscore float NOT NULL default &#39;0&#39;, signedby varchar(255) NOT NULL default &#39;&#39;, 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>
+
+<h2 id="new">new</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&#39;s (PersistentAddrList) new method.</p>
+
+<h2 id="new_checker">new_checker</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>
+
+<h2 id="get_addr_entry">get_addr_entry</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>
+
+<h2 id="add_score">add_score</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>
+
+<h2 id="remove_entry">remove_entry</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 &quot;none&quot; then remove any perl-IP entries for this address as well.</p>
+
+<h2 id="finish">finish</h2>
+
+<p>public instance () finish ()</p>
+
+<p>Description: This method provides the necessary cleanup for the address list.</p>
+
+<h2 id="unpack_addr">_unpack_addr</h2>
+
+<p>private instance (String, String) _unpack_addr(string $addr)</p>
+
+<p>Description: This method splits an autowhitelist address into it&#39;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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,106 @@
+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 '', msgcount 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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,35 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#METHODS">METHODS</a></li>
+  <li><a href="#SEE-ALSO">SEE ALSO</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::SubProcBackChannel - back-channel for communication between a master and multiple slave processes</p>
+
+<h1 id="METHODS">METHODS</h1>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>Mail::SpamAssassin(3) Mail::SpamAssassin::ArchiveIterator(3) Mail::SpamAssassin::SpamdPreforkScaling(3) spamassassin(1) spamd(1) mass-check(1)</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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,10 @@
+NAME
+    Mail::SpamAssassin::SubProcBackChannel - back-channel for communication
+    between a master and multiple slave processes
+
+METHODS
+SEE ALSO
+    Mail::SpamAssassin(3) Mail::SpamAssassin::ArchiveIterator(3)
+    Mail::SpamAssassin::SpamdPreforkScaling(3) spamassassin(1) spamd(1)
+    mass-check(1)
+

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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,114 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <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>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>    # non-timeout code...
+
+    my $t = Mail::SpamAssassin::Timeout-&gt;new({ secs =&gt; 5, deadline =&gt; $when });
+    
+    $t-&gt;run(sub {
+        # code to run with a 5-second timeout...
+    });
+
+    if ($t-&gt;timed_out()) {
+        # do something...
+    }
+
+    # more non-timeout code...</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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>
+
+<h1 id="PUBLIC-METHODS">PUBLIC METHODS</h1>
+
+<dl>
+
+<dt id="my-t-Mail::SpamAssassin::Timeout-new-...-options">my $t = Mail::SpamAssassin::Timeout-&gt;new({ ... options ... });</dt>
+<dd>
+
+<p>Constructor. Options include:</p>
+
+<dl>
+
+<dt id="secs-seconds">secs =&gt; $seconds</dt>
+<dd>
+
+<p>time interval, in seconds. Optional; if neither <code>secs</code> nor <code>deadline</code> is specified, no timeouts will be applied.</p>
+
+</dd>
+<dt id="deadline-unix_timestamp">deadline =&gt; $unix_timestamp</dt>
+<dd>
+
+<p>Unix timestamp (seconds since epoch) when a timeout is reached in the latest. Optional; if neither <b>secs</b> nor <b>deadline</b> is specified, no timeouts will be applied. If both are specified, the shorter interval of the two prevails.</p>
+
+</dd>
+</dl>
+
+</dd>
+<dt id="t-run-coderef">$t-&gt;run($coderef)</dt>
+<dd>
+
+<p>Run a code reference within the currently-defined timeout.</p>
+
+<p>The timeout is as defined by the <b>secs</b> and <b>deadline</b> parameters to the constructor.</p>
+
+<p>Returns whatever the subroutine returns, or <code>undef</code> on timeout. If the timer times out, <code>$t-&lt;gt</code>timed_out()&gt; will return <code>1</code>.</p>
+
+<p>Time elapsed is not cumulative; multiple runs of <code>run</code> 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>
+<dt id="t-run_and_catch-coderef">$t-&gt;run_and_catch($coderef)</dt>
+<dd>
+
+<p>Run a code reference, as per <code>$t-&lt;gt</code>run()&gt;, but also catching any <code>die()</code> calls within the code reference.</p>
+
+<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&#39;t count as a <code>die()</code>.)</p>
+
+</dd>
+<dt id="t-timed_out">$t-&gt;timed_out()</dt>
+<dd>
+
+<p>Returns <code>1</code> if the most recent code executed in <code>run()</code> timed out, or <code>undef</code> if it did not.</p>
+
+</dd>
+<dt id="t-reset">$t-&gt;reset()</dt>
+<dd>
+
+<p>If called within a <code>run()</code> 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).</p>
+
+</dd>
+</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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,80 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#DESCRIPTION">DESCRIPTION</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Util - utility functions</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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&#39;s expected that they&#39;ll only be used by other Mail::SpamAssassin modules. (TODO: we should probably revisit this if it&#39;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 id="module-first_available_module-module_list">$module = first_available_module (@module_list)</dt>
+<dd>
+
+<p>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.</p>
+
+<p>This is used instead of <code>AnyDBM_File</code> as follows:</p>
+
+<pre><code>  my $module = Mail::SpamAssassin::Util::first_available_module
+                        (qw(DB_File GDBM_File NDBM_File SDBM_File));
+  tie %hash, $module, $path, [... args];</code></pre>
+
+<p>Note that <code>SDBM_File</code> is guaranteed to be present, since it comes with Perl.</p>
+
+</dd>
+<dt id="touch_file-file-args">touch_file(file, { args });</dt>
+<dd>
+
+<p>Touch or create a file.</p>
+
+<p>Possible args:</p>
+
+<p>create_exclusive =&gt; 1 Create a new empty file safely, only if not existing before</p>
+
+</dd>
+<dt id="my-filepath-filehandle-secure_tmpfile">my ($filepath, $filehandle) = secure_tmpfile();</dt>
+<dd>
+
+<p>Generates a filename for a temporary file, opens it exclusively and securely, and returns a filehandle to the open file (opened O_RDWR).</p>
+
+<p>If it cannot open a file after 20 tries, it returns <code>undef</code>.</p>
+
+</dd>
+<dt id="my-dirpath-secure_tmpdir">my ($dirpath) = secure_tmpdir();</dt>
+<dd>
+
+<p>Generates a directory for temporary files. Creates it securely and returns the path to the directory.</p>
+
+<p>If it cannot create a directory after 20 tries, it returns <code>undef</code>.</p>
+
+</dd>
+</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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,50 @@
+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.
+
+    touch_file(file, { args });
+        Touch or create a file.
+
+        Possible args:
+
+        create_exclusive => 1 Create a new empty file safely, only if not
+        existing before
+
+    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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,45 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#SYNOPSIS">SYNOPSIS</a></li>
+  <li><a href="#METHODS">METHODS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail:SpamAssassin::Util::DependencyInfo - spamassassin debugging helpers</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p>loadplugin Mail:SpamAssassin::Util::DependencyInfo</p>
+
+<h1 id="METHODS">METHODS</h1>
+
+<dl>
+
+<dt id="f-debug_diagnostics">$f-&gt;debug_diagnostics ()</dt>
+<dd>
+
+<p>Output some diagnostic information, useful for debugging SpamAssassin problems.</p>
+
+</dd>
+</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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -0,0 +1,99 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#SYNOPSIS">SYNOPSIS</a></li>
+  <li><a href="#DESCRIPTION">DESCRIPTION</a>
+    <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>
+  </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Util::Progress - Progress bar support for SpamAssassin</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>  my $progress = Mail::SpamAssassin::Util::Progress-&gt;new({total =&gt; 100});
+
+  $msgcount = 0;
+  foreach my $message (@messages) {
+    # do something here
+    $msgcount++;
+    $progress-&gt;update($msgcount);
+  }
+
+  $progress-&gt;final();</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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>
+
+<h2 id="new">new</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 id="total-required">total (required)</dt>
+<dd>
+
+<p>The total number of messages expected to be processed. This item is required.</p>
+
+</dd>
+<dt id="fh-optional">fh [optional]</dt>
+<dd>
+
+<p>An optional filehandle may be passed in, otherwise STDERR will be used by default.</p>
+
+</dd>
+<dt id="term-optional">term [optional]</dt>
+<dd>
+
+<p>The module will attempt to determine if a valid terminal exists on the STDIN filehandle. This item allows you to override that value.</p>
+
+</dd>
+</dl>
+
+<h2 id="init_bar">init_bar</h2>
+
+<p>public instance () init_bar()</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&#39;s original state.</p>
+
+<h2 id="update">update</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>
+
+<h2 id="final">final</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=1873332&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 Wed Jan 29 19:05:59 2020
@@ -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/sa-awl.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/sa-awl.html?rev=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.html (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.html Wed Jan 29 19:05:59 2020
@@ -0,0 +1,80 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <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>
+
+<h1 id="NAME">NAME</h1>
+
+<p>sa-awl - examine and manipulate SpamAssassin&#39;s auto-whitelist db</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>sa-awl</b> [--clean] [--min n] [dbfile]</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
+<dl>
+
+<dt id="clean">--clean</dt>
+<dd>
+
+<p>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.</p>
+
+</dd>
+<dt id="min-n">--min n</dt>
+<dd>
+
+<p>Select the threshold at which entries are kept or deleted when <code>--clean</code> is used. The default is <code>2</code>, so entries that have only been seen once are deleted.</p>
+
+</dd>
+</dl>
+
+<h1 id="OUTPUT">OUTPUT</h1>
+
+<p>The output looks like this:</p>
+
+<pre><code>     AVG  (TOTSCORE/COUNT)  --  EMAIL|ip=IPBASE</code></pre>
+
+<p>For example:</p>
+
+<pre><code>     0.0         (0.0/7)  --  dawson@example.com|ip=208.192
+    21.8        (43.7/2)  --  mcdaniel_2s2000@example.com|ip=200.106</code></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&#39;s email address, and <code>IPBASE</code> is the <b>AWL base IP address</b>.</p>
+
+<p><b>AWL base IP address</b> is a way to identify the sender&#39;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><code>  - 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&#39;s
+    dynamic address pool.</code></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=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.txt (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.txt Wed Jan 29 19:05:59 2020
@@ -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=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-compile.html (added)
+++ spamassassin/site/full/3.4.x/doc/sa-compile.html Wed Jan 29 19:05:59 2020
@@ -0,0 +1,181 @@
+<?xml version="1.0" ?>
+<!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></title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body style="background-color: white">
+
+
+
+<ul id="index">
+  <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="#PREREQUISITES">PREREQUISITES</a></li>
+  <li><a href="#BUGS">BUGS</a></li>
+  <li><a href="#AUTHORS">AUTHORS</a></li>
+  <li><a href="#LICENSE-AND-COPYRIGHT">LICENSE AND COPYRIGHT</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>sa-compile - compile SpamAssassin ruleset into native code</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>sa-compile</b> [options]</p>
+
+<p>Options:</p>
+
+<pre><code>  --list                        Output base string list to STDOUT
+  --sudo                        Use &#39;sudo&#39; 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: /usr/local/etc/mail/spamassassin)
+  --updatedir=path              Directory to place updates
+          (default: /var/lib/spamassassin/compiled/&lt;perlversion&gt;/3.004004)
+  --cf=&#39;config line&#39;            Additional line of configuration
+  -D, --debug [area=n,...]      Print debugging messages
+  -V, --version                 Print version
+  -h, --help                    Print usage message</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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&#39;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><code>  loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody</code></pre>
+
+<p>Additionally, &quot;sa-compile&quot; will not restart &quot;spamd&quot; or otherwise cause a scanner to reload the now-compiled ruleset automatically.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
+<dl>
+
+<dt id="list"><b>--list</b></dt>
+<dd>
+
+<p>Output the extracted base strings to STDOUT, instead of generating the C extension code.</p>
+
+</dd>
+<dt id="sudo"><b>--sudo</b></dt>
+<dd>
+
+<p>Use <code>sudo(8)</code> to run code as &#39;root&#39; when writing files to the compiled-rules storage area (which is <code>/var/lib/spamassassin/compiled/5.016/3.004004</code> by default).</p>
+
+</dd>
+<dt id="quiet"><b>--quiet</b></dt>
+<dd>
+
+<p>Produce less diagnostic output. Errors will still be displayed.</p>
+
+</dd>
+<dt id="keep-tmps"><b>--keep-tmps</b></dt>
+<dd>
+
+<p>Keep temporary files after the script completes, instead of deleting them.</p>
+
+</dd>
+<dt id="C-path---configpath-path---config-file-path"><b>-C</b> <i>path</i>, <b>--configpath</b>=<i>path</i>, <b>--config-file</b>=<i>path</i></dt>
+<dd>
+
+<p>Use the specified path for locating the distributed configuration files. Ignore the default directories (usually <code>/usr/share/spamassassin</code> or similar).</p>
+
+</dd>
+<dt id="siteconfigpath-path"><b>--siteconfigpath</b>=<i>path</i></dt>
+<dd>
+
+<p>Use the specified path for locating site-specific configuration files. Ignore the default directories (usually <code>/etc/mail/spamassassin</code> or similar).</p>
+
+</dd>
+<dt id="updatedir"><b>--updatedir</b></dt>
+<dd>
+
+<p>By default, <code>sa-compile</code> will use the system-wide rules update directory:</p>
+
+<pre><code>        /var/lib/spamassassin/compiled/5.016/3.004004</code></pre>
+
+<p>If the updates should be stored in another location, specify it here.</p>
+
+<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&#39;s runtime behaviour.</p>
+
+</dd>
+<dt id="cf-config-line"><b>--cf=&#39;config line&#39;</b></dt>
+<dd>
+
+<p>Add additional lines of configuration directly from the command-line, parsed after the configuration files are read. Multiple <b>--cf</b> arguments can be used, and each will be considered a separate line of configuration.</p>
+
+</dd>
+<dt id="p-prefs---prefspath-prefs---prefs-file-prefs"><b>-p</b> <i>prefs</i>, <b>--prefspath</b>=<i>prefs</i>, <b>--prefs-file</b>=<i>prefs</i></dt>
+<dd>
+
+<p>Read user score preferences from <i>prefs</i> (usually <code>$HOME/.spamassassin/user_prefs</code>) .</p>
+
+</dd>
+<dt id="D-area-...---debug-area"><b>-D</b> [<i>area,...</i>], <b>--debug</b> [<i>area,...</i>]</dt>
+<dd>
+
+<p>Produce debugging output. If no areas are listed, all debugging information is printed. Diagnostic output can also be enabled for each area individually; <i>area</i> is the area of the code to instrument.</p>
+
+<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>
+<dt id="h---help"><b>-h</b>, <b>--help</b></dt>
+<dd>
+
+<p>Print help message and exit.</p>
+
+</dd>
+<dt id="V---version"><b>-V</b>, <b>--version</b></dt>
+<dd>
+
+<p>Print sa-compile version and exit.</p>
+
+</dd>
+</dl>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>Mail::SpamAssassin(3) spamassassin(1) spamd(1)</p>
+
+<h1 id="PREREQUISITES">PREREQUISITES</h1>
+
+<p><code>Mail::SpamAssassin</code> <code>re2c</code> <code>Mail::SpamAssassin::Plugin::Rule2XSBody</code></p>
+
+<h1 id="BUGS">BUGS</h1>
+
+<p>See &lt;http://issues.apache.org/SpamAssassin/&gt;</p>
+
+<h1 id="AUTHORS">AUTHORS</h1>
+
+<p>The Apache SpamAssassin(tm) Project &lt;https://spamassassin.apache.org/&gt;</p>
+
+<h1 id="LICENSE-AND-COPYRIGHT">LICENSE AND COPYRIGHT</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>
+
+<p>Copyright (C) 2015 The Apache Software Foundation</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=1873332&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-compile.txt (added)
+++ spamassassin/site/full/3.4.x/doc/sa-compile.txt Wed Jan 29 19:05:59 2020
@@ -0,0 +1,136 @@
+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: /usr/local/etc/mail/spamassassin)
+      --updatedir=path              Directory to place updates
+              (default: /var/lib/spamassassin/compiled/<perlversion>/3.004004)
+      --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.016/3.004004" 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.016/3.004004
+
+        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)
+
+PREREQUISITES
+    "Mail::SpamAssassin" "re2c" "Mail::SpamAssassin::Plugin::Rule2XSBody"
+
+BUGS
+    See <http://issues.apache.org/SpamAssassin/>
+
+AUTHORS
+    The Apache SpamAssassin(tm) Project <https://spamassassin.apache.org/>
+
+LICENSE AND COPYRIGHT
+    SpamAssassin is distributed under the Apache License, Version 2.0, as
+    described in the file "LICENSE" included with the distribution.
+
+    Copyright (C) 2015 The Apache Software Foundation
+