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 2015/04/29 19:04:11 UTC

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

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,242 @@
+NAME
+    URIDNSBL - look up URLs against DNS blocklists
+
+SYNOPSIS
+      loadplugin    Mail::SpamAssassin::Plugin::URIDNSBL
+      uridnsbl      URIBL_SBLXBL    sbl-xbl.spamhaus.org.   TXT
+
+DESCRIPTION
+    This works by analysing message text and HTML for URLs, extracting host
+    names from those, then querying various DNS blocklists for either: IP
+    addresses of these hosts (uridnsbl,a) or their nameservers
+    (uridnsbl,ns), or domain names of these hosts (urirhsbl), or domain
+    names of their nameservers (urinsrhsbl, urifullnsrhsbl).
+
+USER SETTINGS
+    skip_uribl_checks ( 0 | 1 ) (default: 0)
+        Turning on the skip_uribl_checks setting will disable the URIDNSBL
+        plugin.
+
+        By default, SpamAssassin will run URI DNSBL checks. Individual URI
+        blocklists may be disabled selectively by setting a score of a
+        corresponding rule to 0 or through the uridnsbl_skip_domain
+        parameter.
+
+        See also a related configuration parameter skip_rbl_checks, which
+        controls the DNSEval plugin (documented in the Conf man page).
+
+    uridnsbl_skip_domain domain1 domain2 ...
+        Specify a domain, or a number of domains, which should be skipped
+        for the URIBL checks. This is very useful to specify very common
+        domains which are not going to be listed in URIBLs.
+
+    clear_uridnsbl_skip_domain [domain1 domain2 ...]
+        If no argument is given, then clears the entire list of domains
+        declared by *uridnsbl_skip_domain* configuration directives so far.
+        Any subsequent *uridnsbl_skip_domain* directives will start creating
+        a new list of skip domains.
+
+        When given a list of domains as arguments, only the specified
+        domains are removed from the list of skipped domains.
+
+RULE DEFINITIONS AND PRIVILEGED SETTINGS
+    uridnsbl NAME_OF_RULE dnsbl_zone lookuptype
+        Specify a lookup. "NAME_OF_RULE" is the name of the rule to be used,
+        "dnsbl_zone" is the zone to look up IPs in, and "lookuptype" is the
+        type of lookup (TXT or A). Note that you must also define a
+        body-eval rule calling "check_uridnsbl()" to use this.
+
+        This works by collecting domain names from URLs and querying DNS
+        blocklists with an IP address of host names found in URLs or with IP
+        addresses of their name servers, according to tflags as follows.
+
+        If the corresponding body rule has a tflag 'a', the DNS blocklist
+        will be queried with an IP address of a host found in URLs.
+
+        If the corresponding body rule has a tflag 'ns', DNS will be queried
+        for name servers (NS records) of a domain name found in URLs, then
+        these name server names will be resolved to their IP addresses,
+        which in turn will be sent to DNS blocklist.
+
+        Tflags directive may specify either 'a' or 'ns' or both flags. In
+        absence of any of these two flags, a default is a 'ns', which is
+        compatible with pre-3.4 versions of SpamAssassin.
+
+        The choice of tflags must correspond to the policy and expected use
+        of each DNS blocklist and is normally not a local decision. As an
+        example, a blocklist expecting queries resulting from an 'a' tflag
+        is a "black_a.txt" ( http://www.uribl.com/datasets.shtml ).
+
+        Example:
+
+         uridnsbl        URIBL_SBLXBL    sbl-xbl.spamhaus.org.   TXT
+         body            URIBL_SBLXBL    eval:check_uridnsbl('URIBL_SBLXBL')
+         describe        URIBL_SBLXBL    Contains a URL listed in the SBL/XBL blocklist
+         tflags          URIBL_SBLXBL    net ns
+
+    uridnssub NAME_OF_RULE dnsbl_zone lookuptype subtest
+        Specify a DNSBL-style domain lookup with a sub-test. "NAME_OF_RULE"
+        is the name of the rule to be used, "dnsbl_zone" is the zone to look
+        up IPs in, and "lookuptype" is the type of lookup (TXT or A).
+
+        Tflags 'ns' and 'a' on a corresponding body rule are recognized and
+        have the same meaning as in the uridnsbl directive.
+
+        "subtest" is a sub-test to run against the returned data. The
+        sub-test may be in one of the following forms: m, n1-n2, or n/m,
+        where n,n1,n2,m can be any of: decimal digits, 0x followed by up to
+        8 hexadecimal digits, or an IPv4 address in quad-dot form. The 'A'
+        records (IPv4 dotted address) as returned by DNSBLs lookups are
+        converted into a numerical form (r) and checked against the
+        specified sub-test as follows: for a range n1-n2 the following must
+        be true: (r >= n1 && r <= n2); for a n/m form the following must be
+        true: (r & m) == (n & m); for a single value in quad-dot form the
+        following must be true: r == n; for a single decimal or hex form the
+        following must be true: ((r & n) != 0) && ((r & 0xff000000) ==
+        0x7f000000), i.e. within 127.0.0.0/8
+
+        Some typical examples of a sub-test are: 127.0.1.2,
+        127.0.1.20-127.0.1.39, 127.0.1.0/255.255.255.0, 0.0.0.16/0.0.0.16,
+        0x10/0x10, 16, 0x10 .
+
+        Note that, as with "uridnsbl", you must also define a body-eval rule
+        calling "check_uridnsbl()" to use this.
+
+        Example:
+
+          uridnssub   URIBL_DNSBL_4    dnsbl.example.org.   A    127.0.0.4
+          uridnssub   URIBL_DNSBL_8    dnsbl.example.org.   A    8
+
+    urirhsbl NAME_OF_RULE rhsbl_zone lookuptype
+        Specify a RHSBL-style domain lookup. "NAME_OF_RULE" is the name of
+        the rule to be used, "rhsbl_zone" is the zone to look up domain
+        names in, and "lookuptype" is the type of lookup (TXT or A). Note
+        that you must also define a body-eval rule calling
+        "check_uridnsbl()" to use this.
+
+        An RHSBL zone is one where the domain name is looked up, as a
+        string; e.g. a URI using the domain "foo.com" will cause a lookup of
+        "foo.com.uriblzone.net". Note that hostnames are stripped from the
+        domain used in the URIBL lookup, so the domain "foo.bar.com" will
+        look up "bar.com.uriblzone.net", and "foo.bar.co.uk" will look up
+        "bar.co.uk.uriblzone.net".
+
+        If an URI consists of an IP address instead of a hostname, the IP
+        address is looked up (using the standard reversed quads method) in
+        each "rhsbl_zone".
+
+        Example:
+
+          urirhsbl        URIBL_RHSBL    rhsbl.example.org.   TXT
+
+    urirhssub NAME_OF_RULE rhsbl_zone lookuptype subtest
+        Specify a RHSBL-style domain lookup with a sub-test. "NAME_OF_RULE"
+        is the name of the rule to be used, "rhsbl_zone" is the zone to look
+        up domain names in, and "lookuptype" is the type of lookup (TXT or
+        A).
+
+        "subtest" is a sub-test to run against the returned data. The
+        sub-test may be in one of the following forms: m, n1-n2, or n/m,
+        where n,n1,n2,m can be any of: decimal digits, 0x followed by up to
+        8 hexadecimal digits, or an IPv4 address in quad-dot form. The 'A'
+        records (IPv4 dotted address) as returned by DNSBLs lookups are
+        converted into a numerical form (r) and checked against the
+        specified sub-test as follows: for a range n1-n2 the following must
+        be true: (r >= n1 && r <= n2); for a n/m form the following must be
+        true: (r & m) == (n & m); for a single value in quad-dot form the
+        following must be true: r == n; for a single decimal or hex form the
+        following must be true: ((r & n) != 0) && ((r & 0xff000000) ==
+        0x7f000000), i.e. within 127.0.0.0/8
+
+        Some typical examples of a sub-test are: 127.0.1.2,
+        127.0.1.20-127.0.1.39, 127.2.3.0/255.255.255.0, 0.0.0.16/0.0.0.16,
+        0x10/0x10, 16, 0x10 .
+
+        Note that, as with "urirhsbl", you must also define a body-eval rule
+        calling "check_uridnsbl()" to use this.
+
+        Example:
+
+          urirhssub   URIBL_RHSBL_4    rhsbl.example.org.   A    127.0.0.4
+          urirhssub   URIBL_RHSBL_8    rhsbl.example.org.   A    8
+
+    urinsrhsbl NAME_OF_RULE rhsbl_zone lookuptype
+        Perform a RHSBL-style domain lookup against the contents of the NS
+        records for each URI. In other words, a URI using the domain
+        "foo.com" will cause an NS lookup to take place; assuming that
+        domain has an NS of "ns0.bar.com", that will cause a lookup of
+        "bar.com.uriblzone.net". Note that hostnames are stripped from both
+        the domain used in the URI, and the domain in the lookup.
+
+        "NAME_OF_RULE" is the name of the rule to be used, "rhsbl_zone" is
+        the zone to look up domain names in, and "lookuptype" is the type of
+        lookup (TXT or A).
+
+        Note that, as with "urirhsbl", you must also define a body-eval rule
+        calling "check_uridnsbl()" to use this.
+
+    urinsrhssub NAME_OF_RULE rhsbl_zone lookuptype subtest
+        Specify a RHSBL-style domain-NS lookup, as above, with a sub-test.
+        "NAME_OF_RULE" is the name of the rule to be used, "rhsbl_zone" is
+        the zone to look up domain names in, and "lookuptype" is the type of
+        lookup (TXT or A). "subtest" is the sub-test to run against the
+        returned data; see <urirhssub>.
+
+        Note that, as with "urirhsbl", you must also define a body-eval rule
+        calling "check_uridnsbl()" to use this.
+
+    urifullnsrhsbl NAME_OF_RULE rhsbl_zone lookuptype
+        Perform a RHSBL-style domain lookup against the contents of the NS
+        records for each URI. In other words, a URI using the domain
+        "foo.com" will cause an NS lookup to take place; assuming that
+        domain has an NS of "ns0.bar.com", that will cause a lookup of
+        "ns0.bar.com.uriblzone.net". Note that hostnames are stripped from
+        the domain used in the URI.
+
+        "NAME_OF_RULE" is the name of the rule to be used, "rhsbl_zone" is
+        the zone to look up domain names in, and "lookuptype" is the type of
+        lookup (TXT or A).
+
+        Note that, as with "urirhsbl", you must also define a body-eval rule
+        calling "check_uridnsbl()" to use this.
+
+    urifullnsrhssub NAME_OF_RULE rhsbl_zone lookuptype subtest
+        Specify a RHSBL-style domain-NS lookup, as above, with a sub-test.
+        "NAME_OF_RULE" is the name of the rule to be used, "rhsbl_zone" is
+        the zone to look up domain names in, and "lookuptype" is the type of
+        lookup (TXT or A). "subtest" is the sub-test to run against the
+        returned data; see <urirhssub>.
+
+        Note that, as with "urirhsbl", you must also define a body-eval rule
+        calling "check_uridnsbl()" to use this.
+
+    tflags NAME_OF_RULE ips_only
+        Only URIs containing IP addresses as the "host" component will be
+        matched against the named "urirhsbl"/"urirhssub" rule.
+
+    tflags NAME_OF_RULE domains_only
+        Only URIs containing a non-IP-address "host" component will be
+        matched against the named "urirhsbl"/"urirhssub" rule.
+
+    tflags NAME_OF_RULE ns
+        The 'ns' flag may be applied to rules corresponding to uridnsbl and
+        uridnssub directives. Host names from URLs will be mapped to their
+        name server IP addresses (a NS lookup followed by an A lookup),
+        which in turn will be sent to blocklists. This is a default when
+        neither 'a' nor 'ns' flags are specified.
+
+    tflags NAME_OF_RULE a
+        The 'a' flag may be applied to rules corresponding to uridnsbl and
+        uridnssub directives. Host names from URLs will be mapped to their
+        IP addresses, which will be sent to blocklists. When both 'ns' and
+        'a' flags are specified, both queries will be performed.
+
+ADMINISTRATOR SETTINGS
+    uridnsbl_max_domains N (default: 20)
+        The maximum number of domains to look up.
+
+NOTES
+    The "uridnsbl_timeout" option has been obsoleted by the "rbl_timeout"
+    option. See the "Mail::SpamAssassin::Conf" POD for details on
+    "rbl_timeout".
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,70 @@
+<?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>URIDetail - test URIs using detailed URI information</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#rule_definitions_and_privileged_settings">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>URIDetail - test URIs using detailed URI information</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>This plugin creates a new rule test type, known as &quot;uri_detail&quot;.  These
+rules apply to all URIs found in the message.</p>
+<pre>
+  loadplugin    Mail::SpamAssassin::Plugin::URIDetail</pre>
+<p>
+</p>
+<hr />
+<h1><a name="rule_definitions_and_privileged_settings">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></h1>
+<p>The format for defining a rule is as follows:</p>
+<pre>
+  uri_detail SYMBOLIC_TEST_NAME key1 =~ /value1/  key2 !~ /value2/ ...</pre>
+<p>Supported keys are:</p>
+<p><code>raw</code> is the raw URI prior to any cleaning
+(e.g. &quot;http://spamassassin.apache%2Eorg/&quot;).</p>
+<p><code>type</code> is the tag(s) which referenced the raw_uri.  <em>parsed</em> is a
+faked type which specifies that the raw_uri was parsed from the
+rendered text.</p>
+<p><code>cleaned</code> is a list including the raw URI and various cleaned
+versions of the raw URI (http://spamassassin.apache%2Eorg/,
+<a href="http://spamassassin.apache.org/).">http://spamassassin.apache.org/).</a></p>
+<p><code>text</code> is the anchor text(s) (text between &lt;a&gt; and &lt;/a&gt;) that
+linked to the raw URI.</p>
+<p><code>domain</code> is the domain(s) found in the cleaned URIs.</p>
+<p>Example rule for matching a URI where the raw URI matches &quot;%2Ebar&quot;,
+the domain &quot;bar.com&quot; is found, and the type is &quot;a&quot; (an anchor tag).</p>
+<pre>
+  uri_detail TEST1 raw =~ /%2Ebar/  domain =~ /^bar\.com$/  type =~ /^a$/</pre>
+<p>Example rule to look for suspicious &quot;https&quot; links:</p>
+<pre>
+  uri_detail FAKE_HTTPS text =~ /\bhttps:/  cleaned !~ /\bhttps:/</pre>
+<p>Regular expressions should be delimited by slashes.</p>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDetail.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,42 @@
+NAME
+    URIDetail - test URIs using detailed URI information
+
+SYNOPSIS
+    This plugin creates a new rule test type, known as "uri_detail". These
+    rules apply to all URIs found in the message.
+
+      loadplugin    Mail::SpamAssassin::Plugin::URIDetail
+
+RULE DEFINITIONS AND PRIVILEGED SETTINGS
+    The format for defining a rule is as follows:
+
+      uri_detail SYMBOLIC_TEST_NAME key1 =~ /value1/  key2 !~ /value2/ ...
+
+    Supported keys are:
+
+    "raw" is the raw URI prior to any cleaning (e.g.
+    "http://spamassassin.apache%2Eorg/").
+
+    "type" is the tag(s) which referenced the raw_uri. *parsed* is a faked
+    type which specifies that the raw_uri was parsed from the rendered text.
+
+    "cleaned" is a list including the raw URI and various cleaned versions
+    of the raw URI (http://spamassassin.apache%2Eorg/,
+    http://spamassassin.apache.org/).
+
+    "text" is the anchor text(s) (text between <a> and </a>) that linked to
+    the raw URI.
+
+    "domain" is the domain(s) found in the cleaned URIs.
+
+    Example rule for matching a URI where the raw URI matches "%2Ebar", the
+    domain "bar.com" is found, and the type is "a" (an anchor tag).
+
+      uri_detail TEST1 raw =~ /%2Ebar/  domain =~ /^bar\.com$/  type =~ /^a$/
+
+    Example rule to look for suspicious "https" links:
+
+      uri_detail FAKE_HTTPS text =~ /\bhttps:/  cleaned !~ /\bhttps:/
+
+    Regular expressions should be delimited by slashes.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,102 @@
+<?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>URILocalBL - blacklist URIs using local information</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#rule_definitions_and_privileged_settings">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></li>
+	<li><a href="#dependencies">DEPENDENCIES</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>URILocalBL - blacklist URIs using local information (ISP names, address lists, and country codes)</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p>This plugin creates some new rule test types, such as &quot;uri_block_cc&quot;,
+&quot;uri_block_cidr&quot;, and &quot;uri_block_isp&quot;.  These rules apply to the URIs
+found in the HTML portion of a message, i.e. &lt;a href=...&gt; markup.</p>
+<pre>
+  loadplugin    Mail::SpamAssassin::Plugin::URILocalBL</pre>
+<p>Why local blacklisting? There are a few excellent, effective, and
+well-maintained DNSBL's out there. But they have several drawbacks:</p>
+<ul>
+<li><strong><a name="blacklists_can_cover_tens_of_thousands_of_entries_and_you_can_t_select_which_ones_you_use" class="item">blacklists can cover tens of thousands of entries, and you can't select which ones you use;</a></strong>
+
+</li>
+<li><strong><a name="verifying_that_it_s_correctly_configured_can_be_non_trivial" class="item">verifying that it's correctly configured can be non-trivial;</a></strong>
+
+</li>
+<li><strong><a name="new_blacklisting_entries_may_take_a_while_to_be_detected_and_entered_so_it_s_not_instantaneous" class="item">new blacklisting entries may take a while to be detected and entered, so it's not instantaneous.</a></strong>
+
+</li>
+</ul>
+<p>Sometimes all you want is a quick, easy, and very surgical blacklisting of
+a particular site or a particular ISP. This plugin is defined for that
+exact usage case.</p>
+<p>
+</p>
+<hr />
+<h1><a name="rule_definitions_and_privileged_settings">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></h1>
+<p>The format for defining a rule is as follows:</p>
+<pre>
+  uri_block_cc SYMBOLIC_TEST_NAME cc1 cc2 cc3 cc4</pre>
+<p>or:</p>
+<pre>
+  uri_block_cidr SYMBOLIC_TEST_NAME a.a.a.a b.b.b.b/cc d.d.d.d-e.e.e.e</pre>
+<p>or:</p>
+<pre>
+  uri_block_isp SYMBOLIC_TEST_NAME &quot;DataRancid&quot; &quot;McCarrier&quot; &quot;Phishers-r-Us&quot;</pre>
+<p>Example rule for matching a URI in China:</p>
+<pre>
+  uri_block_cc TEST1 cn</pre>
+<p>This would block the URL <a href="http://www.baidu.com/index.htm.">http://www.baidu.com/index.htm.</a>  Similarly, to
+match a Spam-haven netblock:</p>
+<pre>
+  uri_block_cidr TEST2 65.181.64.0/18</pre>
+<p>would match a netblock where several phishing sites were recently hosted.</p>
+<p>And to block all CIDR blocks registered to an ISP, one might use:</p>
+<pre>
+  uri_block_isp TEST3 &quot;ColoCrossing&quot;</pre>
+<p>if one didn't trust URL's pointing to that organization's clients.  Lastly,
+if there's a country that you want to block but there's an explicit host
+you wish to exempt from that blacklist, you can use:</p>
+<pre>
+  uri_block_exclude TEST1 www.baidu.com</pre>
+<p>if you wish to exempt URL's referring to this host. The same syntax is
+applicable to CIDR and ISP blocks as well.</p>
+<p>
+</p>
+<hr />
+<h1><a name="dependencies">DEPENDENCIES</a></h1>
+<p>The Country-Code based filtering requires the Geo::IP module, which uses
+either the fremium GeoLiteCountry database, or the commercial version of it
+called GeoIP from MaxMind.com.</p>
+<p>The ISP based filtering requires the same module, plus the GeoIPISP database.
+There is no fremium version of this database, so commercial licensing is
+required.</p>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URILocalBL.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,73 @@
+NAME
+    URILocalBL - blacklist URIs using local information (ISP names, address
+    lists, and country codes)
+
+SYNOPSIS
+    This plugin creates some new rule test types, such as "uri_block_cc",
+    "uri_block_cidr", and "uri_block_isp". These rules apply to the URIs
+    found in the HTML portion of a message, i.e. <a href=...> markup.
+
+      loadplugin    Mail::SpamAssassin::Plugin::URILocalBL
+
+    Why local blacklisting? There are a few excellent, effective, and
+    well-maintained DNSBL's out there. But they have several drawbacks:
+
+    * blacklists can cover tens of thousands of entries, and you can't
+      select which ones you use;
+
+    * verifying that it's correctly configured can be non-trivial;
+
+    * new blacklisting entries may take a while to be detected and entered,
+      so it's not instantaneous.
+
+    Sometimes all you want is a quick, easy, and very surgical blacklisting
+    of a particular site or a particular ISP. This plugin is defined for
+    that exact usage case.
+
+RULE DEFINITIONS AND PRIVILEGED SETTINGS
+    The format for defining a rule is as follows:
+
+      uri_block_cc SYMBOLIC_TEST_NAME cc1 cc2 cc3 cc4
+
+    or:
+
+      uri_block_cidr SYMBOLIC_TEST_NAME a.a.a.a b.b.b.b/cc d.d.d.d-e.e.e.e
+
+    or:
+
+      uri_block_isp SYMBOLIC_TEST_NAME "DataRancid" "McCarrier" "Phishers-r-Us"
+
+    Example rule for matching a URI in China:
+
+      uri_block_cc TEST1 cn
+
+    This would block the URL http://www.baidu.com/index.htm. Similarly, to
+    match a Spam-haven netblock:
+
+      uri_block_cidr TEST2 65.181.64.0/18
+
+    would match a netblock where several phishing sites were recently
+    hosted.
+
+    And to block all CIDR blocks registered to an ISP, one might use:
+
+      uri_block_isp TEST3 "ColoCrossing"
+
+    if one didn't trust URL's pointing to that organization's clients.
+    Lastly, if there's a country that you want to block but there's an
+    explicit host you wish to exempt from that blacklist, you can use:
+
+      uri_block_exclude TEST1 www.baidu.com
+
+    if you wish to exempt URL's referring to this host. The same syntax is
+    applicable to CIDR and ISP blocks as well.
+
+DEPENDENCIES
+    The Country-Code based filtering requires the Geo::IP module, which uses
+    either the fremium GeoLiteCountry database, or the commercial version of
+    it called GeoIP from MaxMind.com.
+
+    The ISP based filtering requires the same module, plus the GeoIPISP
+    database. There is no fremium version of this database, so commercial
+    licensing is required.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,64 @@
+<?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>Mail::SpamAssassin::Plugin::VBounce - aid in rescuing genuine bounces</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#user_preferences">USER PREFERENCES</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Plugin::VBounce - aid in rescuing genuine bounces</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+ loadplugin Mail::SpamAssassin::Plugin::VBounce [/path/to/VBounce.pm]</pre>
+<p>
+</p>
+<hr />
+<h1><a name="user_preferences">USER PREFERENCES</a></h1>
+<p>The following options can be used in both site-wide (<code>local.cf</code>) and
+user-specific (<code>user_prefs</code>) configuration files to customize how
+SpamAssassin handles incoming email messages.</p>
+<dl>
+<dt><strong><a name="whitelist_bounce_relays_hostname_hostname2" class="item">whitelist_bounce_relays hostname [hostname2 ...]</a></strong></dt>
+
+<dd>
+<p>This is used to 'rescue' legitimate bounce messages that were generated in
+response to mail you really *did* send.  List the MTA relays that your outbound
+mail is delivered through.  If a bounce message is found, and it contains one
+of these hostnames in a 'Received' header, it will not be marked as a blowback
+virus-bounce.</p>
+<p>The hostnames can be file-glob-style patterns, so <code>relay*.isp.com</code> will work.
+Specifically, <code>*</code> and <code>?</code> are allowed, but all other metacharacters are not.
+Regular expressions are not used for security reasons.</p>
+<p>Multiple addresses per line, separated by spaces, is OK.  Multiple
+<code>whitelist_bounce_relays</code> lines are also OK.</p>
+</dd>
+</dl>
+
+</body>
+
+</html>

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt Wed Apr 29 17:04:09 2015
@@ -0,0 +1,26 @@
+NAME
+    Mail::SpamAssassin::Plugin::VBounce - aid in rescuing genuine bounces
+
+SYNOPSIS
+     loadplugin Mail::SpamAssassin::Plugin::VBounce [/path/to/VBounce.pm]
+
+USER PREFERENCES
+    The following options can be used in both site-wide ("local.cf") and
+    user-specific ("user_prefs") configuration files to customize how
+    SpamAssassin handles incoming email messages.
+
+    whitelist_bounce_relays hostname [hostname2 ...]
+        This is used to 'rescue' legitimate bounce messages that were
+        generated in response to mail you really *did* send. List the MTA
+        relays that your outbound mail is delivered through. If a bounce
+        message is found, and it contains one of these hostnames in a
+        'Received' header, it will not be marked as a blowback virus-bounce.
+
+        The hostnames can be file-glob-style patterns, so "relay*.isp.com"
+        will work. Specifically, "*" and "?" are allowed, but all other
+        metacharacters are not. Regular expressions are not used for
+        security reasons.
+
+        Multiple addresses per line, separated by spaces, is OK. Multiple
+        "whitelist_bounce_relays" lines are also OK.
+

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.html?rev=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_WhiteListSubject.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,58 @@
+<?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>Mail::SpamAssassin::Plugin::WhiteListSubject - whitelist by Subject header</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Plugin::WhiteListSubject - whitelist by Subject header</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<pre>
+ loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject</pre>
+<pre>
+ header SUBJECT_IN_WHITELIST eval:check_subject_in_whitelist()
+ header SUBJECT_IN_BLACKLIST eval:check_subject_in_blacklist()</pre>
+<pre>
+ score SUBJECT_IN_WHITELIST -100
+ score SUBJECT_IN_BLACKLIST 100</pre>
+<pre>
+ whitelist_subject [Bug *]
+ blacklist_subject Make Money Fast</pre>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This SpamAssassin plugin module provides eval tests for whitelisting and blacklisting
+particular strings in the Subject header.  The value for whitelist_subject or
+blacklist_subject are strings which may contain file -glob -style patterns,
+similar to the other whitelist_* config options.</p>
+
+</body>
+
+</html>

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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,23 @@
+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. The value for
+    whitelist_subject or blacklist_subject are strings which may contain
+    file -glob -style patterns, similar to the other whitelist_* config
+    options.
+

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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,67 @@
+<?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>Mail::SpamAssassin::RegistryBoundaries - domain delegation rules</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::RegistryBoundaries - domain delegation rules</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="split_domain" class="item">($hostname, $domain) = split_domain ($fqdn)</a></strong></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>
+    &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; )</pre>
+</dd>
+<dt><strong><a name="trim_domain" class="item">$domain = <code>trim_domain($fqdn)</code></a></strong></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>
+    &quot;www.foo.com&quot; =&gt; &quot;foo.com&quot;
+    &quot;www.foo.co.uk&quot; =&gt; &quot;foo.co.uk&quot;</pre>
+</dd>
+<dt><strong><a name="is_domain_valid" class="item">$ok = <code>is_domain_valid($dom)</code></a></strong></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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,147 @@
+<?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>Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto Whitelist</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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-&gt;new()
+    $spamtest-&gt;set_persistent_addr_list_factory ($factory);
+  ... call into SpamAssassin classes...</pre>
+<p>SpamAssassin will call:</p>
+<pre>
+    my $addrlist = $factory-&gt;new_checker($spamtest);
+    $entry = $addrlist-&gt;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 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;</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 &quot;none&quot; 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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,49 @@
+<?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>Mail::SpamAssassin::SubProcBackChannel - back-channel for communication between a master and multiple slave processes</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,125 @@
+<?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>Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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-&gt;new({ secs =&gt; 5, deadline =&gt; $when });
+    
+    $t-&gt;run(sub {
+        # code to run with a 5-second timeout...
+    });</pre>
+<pre>
+    if ($t-&gt;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="new" class="item">my $t = Mail::SpamAssassin::Timeout-&gt;new({ ... options ... });</a></strong></dt>
+
+<dd>
+<p>Constructor.  Options include:</p>
+<dl>
+<dt><strong><a name="secs_seconds" class="item">secs =&gt; $seconds</a></strong></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><strong><a name="deadline_unix_timestamp" class="item">deadline =&gt; $unix_timestamp</a></strong></dt>
+
+<dd>
+<p>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.</p>
+</dd>
+</dl>
+</dd>
+<dt><strong><a name="run" class="item">$t-&gt;<code>run($coderef)</code></a></strong></dt>
+
+<dd>
+<p>Run a code reference within the currently-defined timeout.</p>
+<p>The timeout is as defined by the <strong>secs</strong> and <strong>deadline</strong> 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 <a href="#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>
+<dt><strong><a name="run_and_catch" class="item">$t-&gt;<code>run_and_catch($coderef)</code></a></strong></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't count as a <code>die()</code>.)</p>
+</dd>
+<dt><strong><a name="timed_out" class="item">$t-&gt;<code>timed_out()</code></a></strong></dt>
+
+<dd>
+<p>Returns <code>1</code> if the most recent code executed in <a href="#run"><code>run()</code></a> timed out, or
+<code>undef</code> if it did not.</p>
+</dd>
+<dt><strong><a name="reset" class="item">$t-&gt;<code>reset()</code></a></strong></dt>
+
+<dd>
+<p>If called within a <a href="#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).</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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,77 @@
+<?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>Mail::SpamAssassin::Util - utility functions</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#description">DESCRIPTION</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="first_available_module" class="item">$module = first_available_module (@module_list)</a></strong></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>
+  my $module = Mail::SpamAssassin::Util::first_available_module
+                        (qw(DB_File GDBM_File NDBM_File SDBM_File));
+  tie %hash, $module, $path, [... args];</pre>
+<p>Note that <code>SDBM_File</code> is guaranteed to be present, since it comes
+with Perl.</p>
+</dd>
+<dt><strong><a name="my" class="item">my ($filepath, $filehandle) = <code>secure_tmpfile()</code>;</a></strong></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><strong>my ($dirpath) = <code>secure_tmpdir()</code>;</strong></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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,52 @@
+<?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>Mail:SpamAssassin::Util::DependencyInfo - spamassassin debugging helpers</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#synopsis">SYNOPSIS</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="debug_diagnostics" class="item">$f-&gt;debug_diagnostics ()</a></strong></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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Apr 29 17:04:09 2015
@@ -0,0 +1,116 @@
+<?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>Mail::SpamAssassin::Util::Progress - Progress bar support for SpamAssassin</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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-&gt;new({total =&gt; 100});</pre>
+<pre>
+  $msgcount = 0;
+  foreach my $message (@messages) {
+    # do something here
+    $msgcount++;
+    $progress-&gt;update($msgcount);
+  }</pre>
+<pre>
+  $progress-&gt;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="total" class="item">total (required)</a></strong></dt>
+
+<dd>
+<p>The total number of messages expected to be processed.  This item is
+required.</p>
+</dd>
+<dt><strong><a name="fh_optional" class="item">fh [optional]</a></strong></dt>
+
+<dd>
+<p>An optional filehandle may be passed in, otherwise STDERR will be used by
+default.</p>
+</dd>
+<dt><strong><a name="term_optional" class="item">term [optional]</a></strong></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>
+<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=1676792&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 Apr 29 17:04:09 2015
@@ -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=1676792&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 Wed Apr 29 17:04:09 2015
@@ -0,0 +1,82 @@
+<?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>Mail::SpamAssassin::Util::RegistrarBoundaries - domain delegation rules</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<ul>
+
+	<li><a href="#name">NAME</a></li>
+	<li><a href="#methods">METHODS</a></li>
+</ul>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>Mail::SpamAssassin::Util::RegistrarBoundaries - domain delegation rules</p>
+<p>This module is DEPRECATED AND REPLACED WITH 
+Mail::SpamAssassin::RegistryBoundaries !!</p>
+<p>DO NOT USE. This is left as transition fallback for third party plugins.</p>
+<p>It will be removed in the future but all functionality has been
+transitioned to Mail::SpamAssassin::RegistryBoundaries and the TLD 
+updates via 20_aux_tlds.cf delivered via sa-update with version 3.4.1.</p>
+<p>
+</p>
+<hr />
+<h1><a name="methods">METHODS</a></h1>
+<dl>
+<dt><strong><a name="split_domain" class="item">($hostname, $domain) = split_domain ($fqdn)</a></strong></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>
+    &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; )</pre>
+<p>This function has been moved !!! See Mail::SpamAssassin::RegistryBoundaries !!!</p>
+<p>This is left as transition fallback for third party plugins.</p>
+<p>It will be removed in the future.</p>
+</dd>
+<dt><strong><a name="trim_domain" class="item">$domain = <code>trim_domain($fqdn)</code></a></strong></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>
+    &quot;www.foo.com&quot; =&gt; &quot;foo.com&quot;
+    &quot;www.foo.co.uk&quot; =&gt; &quot;foo.co.uk&quot;</pre>
+<p>This function has been moved !!! See Mail::SpamAssassin::RegistryBoundaries !!!</p>
+<p>This is left as transition fallback for third party plugins.</p>
+<p>It will be removed in the future.</p>
+</dd>
+<dt><strong><a name="is_domain_valid" class="item">$ok = <code>is_domain_valid($dom)</code></a></strong></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>
+<p>This function has been moved !!! See Mail::SpamAssassin::RegistryBoundaries !!!</p>
+<p>This is left as transition fallback for third party plugins.</p>
+<p>It will be removed in the future.</p>
+</dd>
+</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=1676792&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 Wed Apr 29 17:04:09 2015
@@ -0,0 +1,57 @@
+NAME
+    Mail::SpamAssassin::Util::RegistrarBoundaries - domain delegation rules
+
+    This module is DEPRECATED AND REPLACED WITH
+    Mail::SpamAssassin::RegistryBoundaries !!
+
+    DO NOT USE. This is left as transition fallback for third party plugins.
+
+    It will be removed in the future but all functionality has been
+    transitioned to Mail::SpamAssassin::RegistryBoundaries and the TLD
+    updates via 20_aux_tlds.cf delivered via sa-update with version 3.4.1.
+
+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" )
+
+        This function has been moved !!! See
+        Mail::SpamAssassin::RegistryBoundaries !!!
+
+        This is left as transition fallback for third party plugins.
+
+        It will be removed in the future.
+
+    $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"
+
+        This function has been moved !!! See
+        Mail::SpamAssassin::RegistryBoundaries !!!
+
+        This is left as transition fallback for third party plugins.
+
+        It will be removed in the future.
+
+    $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.
+
+        This function has been moved !!! See
+        Mail::SpamAssassin::RegistryBoundaries !!!
+
+        This is left as transition fallback for third party plugins.
+
+        It will be removed in the future.
+

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=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.html (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.html Wed Apr 29 17:04:09 2015
@@ -0,0 +1,91 @@
+<?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>sa-awl - examine and manipulate SpamAssassin's auto-whitelist db</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">
+
+
+<!-- INDEX BEGIN -->
+<div name="index">
+<p><a name="__index__"></a></p>
+
+<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>
+
+<hr name="index" />
+</div>
+<!-- INDEX END -->
+
+<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="clean" class="item">--clean</a></strong></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><strong><a name="min_n" class="item">--min n</a></strong></dt>
+
+<dd>
+<p>Select the threshold at which entries are kept or deleted when <a href="#clean"><code>--clean</code></a> is
+used.  The default is <code>2</code>, so entries that have only been seen once are
+deleted.</p>
+</dd>
+</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=1676792&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.txt (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.txt Wed Apr 29 17:04:09 2015
@@ -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.
+