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 2018/09/16 14:36:13 UTC

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

Added: spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.html?rev=1841017&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.html (added)
+++ spamassassin/site/full/3.4.x/doc/Mail_SpamAssassin_Plugin_URIDNSBL.html Sun Sep 16 14:36:10 2018
@@ -0,0 +1,235 @@
+<?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="#USER-SETTINGS">USER SETTINGS</a></li>
+  <li><a href="#RULE-DEFINITIONS-AND-PRIVILEGED-SETTINGS">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></li>
+  <li><a href="#ADMINISTRATOR-SETTINGS">ADMINISTRATOR SETTINGS</a></li>
+  <li><a href="#NOTES">NOTES</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>URIDNSBL - look up URLs against DNS blocklists</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>  loadplugin    Mail::SpamAssassin::Plugin::URIDNSBL
+  uridnsbl      URIBL_SBLXBL    sbl-xbl.spamhaus.org.   TXT</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>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).</p>
+
+<h1 id="USER-SETTINGS">USER SETTINGS</h1>
+
+<dl>
+
+<dt id="skip_uribl_checks-0-1-default:-0">skip_uribl_checks ( 0 | 1 ) (default: 0)</dt>
+<dd>
+
+<p>Turning on the skip_uribl_checks setting will disable the URIDNSBL plugin.</p>
+
+<p>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.</p>
+
+<p>See also a related configuration parameter skip_rbl_checks, which controls the DNSEval plugin (documented in the Conf man page).</p>
+
+</dd>
+</dl>
+
+<dl>
+
+<dt id="uridnsbl_skip_domain-domain1-domain2">uridnsbl_skip_domain domain1 domain2 ...</dt>
+<dd>
+
+<p>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.</p>
+
+</dd>
+</dl>
+
+<dl>
+
+<dt id="clear_uridnsbl_skip_domain-domain1-domain2">clear_uridnsbl_skip_domain [domain1 domain2 ...]</dt>
+<dd>
+
+<p>If no argument is given, then clears the entire list of domains declared by <i>uridnsbl_skip_domain</i> configuration directives so far. Any subsequent <i>uridnsbl_skip_domain</i> directives will start creating a new list of skip domains.</p>
+
+<p>When given a list of domains as arguments, only the specified domains are removed from the list of skipped domains.</p>
+
+</dd>
+</dl>
+
+<h1 id="RULE-DEFINITIONS-AND-PRIVILEGED-SETTINGS">RULE DEFINITIONS AND PRIVILEGED SETTINGS</h1>
+
+<dl>
+
+<dt id="uridnsbl-NAME_OF_RULE-dnsbl_zone-lookuptype">uridnsbl NAME_OF_RULE dnsbl_zone lookuptype</dt>
+<dd>
+
+<p>Specify a lookup. <code>NAME_OF_RULE</code> is the name of the rule to be used, <code>dnsbl_zone</code> is the zone to look up IPs in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>). Note that you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+<p>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.</p>
+
+<p>If the corresponding body rule has a tflag &#39;a&#39;, the DNS blocklist will be queried with an IP address of a host found in URLs.</p>
+
+<p>If the corresponding body rule has a tflag &#39;ns&#39;, 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.</p>
+
+<p>Tflags directive may specify either &#39;a&#39; or &#39;ns&#39; or both flags. In absence of any of these two flags, a default is a &#39;ns&#39;, which is compatible with pre-3.4 versions of SpamAssassin.</p>
+
+<p>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 &#39;a&#39; tflag is a &quot;black_a.txt&quot; ( http://www.uribl.com/datasets.shtml ).</p>
+
+<p>Example:</p>
+
+<pre><code> uridnsbl        URIBL_SBLXBL    sbl-xbl.spamhaus.org.   TXT
+ body            URIBL_SBLXBL    eval:check_uridnsbl(&#39;URIBL_SBLXBL&#39;)
+ describe        URIBL_SBLXBL    Contains a URL listed in the SBL/XBL blocklist
+ tflags          URIBL_SBLXBL    net ns</code></pre>
+
+</dd>
+<dt id="uridnssub-NAME_OF_RULE-dnsbl_zone-lookuptype-subtest">uridnssub NAME_OF_RULE dnsbl_zone lookuptype subtest</dt>
+<dd>
+
+<p>Specify a DNSBL-style domain lookup with a sub-test. <code>NAME_OF_RULE</code> is the name of the rule to be used, <code>dnsbl_zone</code> is the zone to look up IPs in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>).</p>
+
+<p>Tflags &#39;ns&#39; and &#39;a&#39; on a corresponding body rule are recognized and have the same meaning as in the uridnsbl directive.</p>
+
+<p><code>subtest</code> 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 &#39;A&#39; 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 &gt;= n1 &amp;&amp; r &lt;= n2); for a n/m form the following must be true: (r &amp; m) == (n &amp; 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 &amp; n) != 0) &amp;&amp; ((r &amp; 0xff000000) == 0x7f000000), i.e. within 127.0.0.0/8</p>
+
+<p>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 .</p>
+
+<p>Note that, as with <code>uridnsbl</code>, you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+<p>Example:</p>
+
+<pre><code>  uridnssub   URIBL_DNSBL_4    dnsbl.example.org.   A    127.0.0.4
+  uridnssub   URIBL_DNSBL_8    dnsbl.example.org.   A    8</code></pre>
+
+</dd>
+<dt id="urirhsbl-NAME_OF_RULE-rhsbl_zone-lookuptype">urirhsbl NAME_OF_RULE rhsbl_zone lookuptype</dt>
+<dd>
+
+<p>Specify a RHSBL-style domain lookup. <code>NAME_OF_RULE</code> is the name of the rule to be used, <code>rhsbl_zone</code> is the zone to look up domain names in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>). Note that you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+<p>An RHSBL zone is one where the domain name is looked up, as a string; e.g. a URI using the domain <code>foo.com</code> will cause a lookup of <code>foo.com.uriblzone.net</code>. Note that hostnames are stripped from the domain used in the URIBL lookup, so the domain <code>foo.bar.com</code> will look up <code>bar.com.uriblzone.net</code>, and <code>foo.bar.co.uk</code> will look up <code>bar.co.uk.uriblzone.net</code>.</p>
+
+<p>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 <code>rhsbl_zone</code>.</p>
+
+<p>Example:</p>
+
+<pre><code>  urirhsbl        URIBL_RHSBL    rhsbl.example.org.   TXT</code></pre>
+
+</dd>
+<dt id="urirhssub-NAME_OF_RULE-rhsbl_zone-lookuptype-subtest">urirhssub NAME_OF_RULE rhsbl_zone lookuptype subtest</dt>
+<dd>
+
+<p>Specify a RHSBL-style domain lookup with a sub-test. <code>NAME_OF_RULE</code> is the name of the rule to be used, <code>rhsbl_zone</code> is the zone to look up domain names in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>).</p>
+
+<p><code>subtest</code> 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 &#39;A&#39; 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 &gt;= n1 &amp;&amp; r &lt;= n2); for a n/m form the following must be true: (r &amp; m) == (n &amp; 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 &amp; n) != 0) &amp;&amp; ((r &amp; 0xff000000) == 0x7f000000), i.e. within 127.0.0.0/8</p>
+
+<p>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 .</p>
+
+<p>Note that, as with <code>urirhsbl</code>, you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+<p>Example:</p>
+
+<pre><code>  urirhssub   URIBL_RHSBL_4    rhsbl.example.org.   A    127.0.0.4
+  urirhssub   URIBL_RHSBL_8    rhsbl.example.org.   A    8</code></pre>
+
+</dd>
+<dt id="urinsrhsbl-NAME_OF_RULE-rhsbl_zone-lookuptype">urinsrhsbl NAME_OF_RULE rhsbl_zone lookuptype</dt>
+<dd>
+
+<p>Perform a RHSBL-style domain lookup against the contents of the NS records for each URI. In other words, a URI using the domain <code>foo.com</code> will cause an NS lookup to take place; assuming that domain has an NS of <code>ns0.bar.com</code>, that will cause a lookup of <code>bar.com.uriblzone.net</code>. Note that hostnames are stripped from both the domain used in the URI, and the domain in the lookup.</p>
+
+<p><code>NAME_OF_RULE</code> is the name of the rule to be used, <code>rhsbl_zone</code> is the zone to look up domain names in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>).</p>
+
+<p>Note that, as with <code>urirhsbl</code>, you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+</dd>
+<dt id="urinsrhssub-NAME_OF_RULE-rhsbl_zone-lookuptype-subtest">urinsrhssub NAME_OF_RULE rhsbl_zone lookuptype subtest</dt>
+<dd>
+
+<p>Specify a RHSBL-style domain-NS lookup, as above, with a sub-test. <code>NAME_OF_RULE</code> is the name of the rule to be used, <code>rhsbl_zone</code> is the zone to look up domain names in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>). <code>subtest</code> is the sub-test to run against the returned data; see &lt;urirhssub&gt;.</p>
+
+<p>Note that, as with <code>urirhsbl</code>, you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+</dd>
+<dt id="urifullnsrhsbl-NAME_OF_RULE-rhsbl_zone-lookuptype">urifullnsrhsbl NAME_OF_RULE rhsbl_zone lookuptype</dt>
+<dd>
+
+<p>Perform a RHSBL-style domain lookup against the contents of the NS records for each URI. In other words, a URI using the domain <code>foo.com</code> will cause an NS lookup to take place; assuming that domain has an NS of <code>ns0.bar.com</code>, that will cause a lookup of <code>ns0.bar.com.uriblzone.net</code>. Note that hostnames are stripped from the domain used in the URI.</p>
+
+<p><code>NAME_OF_RULE</code> is the name of the rule to be used, <code>rhsbl_zone</code> is the zone to look up domain names in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>).</p>
+
+<p>Note that, as with <code>urirhsbl</code>, you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+</dd>
+<dt id="urifullnsrhssub-NAME_OF_RULE-rhsbl_zone-lookuptype-subtest">urifullnsrhssub NAME_OF_RULE rhsbl_zone lookuptype subtest</dt>
+<dd>
+
+<p>Specify a RHSBL-style domain-NS lookup, as above, with a sub-test. <code>NAME_OF_RULE</code> is the name of the rule to be used, <code>rhsbl_zone</code> is the zone to look up domain names in, and <code>lookuptype</code> is the type of lookup (<b>TXT</b> or <b>A</b>). <code>subtest</code> is the sub-test to run against the returned data; see &lt;urirhssub&gt;.</p>
+
+<p>Note that, as with <code>urirhsbl</code>, you must also define a body-eval rule calling <code>check_uridnsbl()</code> to use this.</p>
+
+</dd>
+<dt id="tflags-NAME_OF_RULE-ips_only">tflags NAME_OF_RULE ips_only</dt>
+<dd>
+
+<p>Only URIs containing IP addresses as the &quot;host&quot; component will be matched against the named &quot;urirhsbl&quot;/&quot;urirhssub&quot; rule.</p>
+
+</dd>
+<dt id="tflags-NAME_OF_RULE-domains_only">tflags NAME_OF_RULE domains_only</dt>
+<dd>
+
+<p>Only URIs containing a non-IP-address &quot;host&quot; component will be matched against the named &quot;urirhsbl&quot;/&quot;urirhssub&quot; rule.</p>
+
+</dd>
+<dt id="tflags-NAME_OF_RULE-ns">tflags NAME_OF_RULE ns</dt>
+<dd>
+
+<p>The &#39;ns&#39; 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 &#39;a&#39; nor &#39;ns&#39; flags are specified.</p>
+
+</dd>
+<dt id="tflags-NAME_OF_RULE-a">tflags NAME_OF_RULE a</dt>
+<dd>
+
+<p>The &#39;a&#39; 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 &#39;ns&#39; and &#39;a&#39; flags are specified, both queries will be performed.</p>
+
+</dd>
+</dl>
+
+<h1 id="ADMINISTRATOR-SETTINGS">ADMINISTRATOR SETTINGS</h1>
+
+<dl>
+
+<dt id="uridnsbl_max_domains-N-default:-20">uridnsbl_max_domains N (default: 20)</dt>
+<dd>
+
+<p>The maximum number of domains to look up.</p>
+
+</dd>
+</dl>
+
+<h1 id="NOTES">NOTES</h1>
+
+<p>The <code>uridnsbl_timeout</code> option has been obsoleted by the <code>rbl_timeout</code> option. See the <code>Mail::SpamAssassin::Conf</code> POD for details on <code>rbl_timeout</code>.</p>
+
+
+</body>
+
+</html>
+
+

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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -0,0 +1,63 @@
+<?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="#RULE-DEFINITIONS-AND-PRIVILEGED-SETTINGS">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>URIDetail - test URIs using detailed URI information</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</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><code>  loadplugin    Mail::SpamAssassin::Plugin::URIDetail</code></pre>
+
+<h1 id="RULE-DEFINITIONS-AND-PRIVILEGED-SETTINGS">RULE DEFINITIONS AND PRIVILEGED SETTINGS</h1>
+
+<p>The format for defining a rule is as follows:</p>
+
+<pre><code>  uri_detail SYMBOLIC_TEST_NAME key1 =~ /value1/  key2 !~ /value2/ ...</code></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. <i>parsed</i> 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/, http://spamassassin.apache.org/).</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><code>  uri_detail TEST1 raw =~ /%2Ebar/  domain =~ /^bar\.com$/  type =~ /^a$/</code></pre>
+
+<p>Example rule to look for suspicious &quot;https&quot; links:</p>
+
+<pre><code>  uri_detail FAKE_HTTPS text =~ /\bhttps:/  cleaned !~ /\bhttps:/</code></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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -0,0 +1,117 @@
+<?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="#RULE-DEFINITIONS-AND-PRIVILEGED-SETTINGS">RULE DEFINITIONS AND PRIVILEGED SETTINGS</a></li>
+  <li><a href="#DEPENDENCIES">DEPENDENCIES</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>URILocalBL - blacklist URIs using local information (ISP names, address lists, and country codes)</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</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><code>  loadplugin    Mail::SpamAssassin::Plugin::URILocalBL</code></pre>
+
+<p>Why local blacklisting? There are a few excellent, effective, and well-maintained DNSBL&#39;s out there. But they have several drawbacks:</p>
+
+<ul>
+
+<li><p>blacklists can cover tens of thousands of entries, and you can&#39;t select which ones you use;</p>
+
+</li>
+<li><p>verifying that it&#39;s correctly configured can be non-trivial;</p>
+
+</li>
+<li><p>new blacklisting entries may take a while to be detected and entered, so it&#39;s not instantaneous.</p>
+
+</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>
+
+<h1 id="RULE-DEFINITIONS-AND-PRIVILEGED-SETTINGS">RULE DEFINITIONS AND PRIVILEGED SETTINGS</h1>
+
+<p>The format for defining a rule is as follows:</p>
+
+<pre><code>  uri_block_cc SYMBOLIC_TEST_NAME cc1 cc2 cc3 cc4</code></pre>
+
+<p>or:</p>
+
+<pre><code>  uri_block_cont SYMBOLIC_TEST_NAME co1 co2 co3 co4</code></pre>
+
+<p>or:</p>
+
+<pre><code>  uri_block_cidr SYMBOLIC_TEST_NAME a.a.a.a b.b.b.b/cc d.d.d.d-e.e.e.e</code></pre>
+
+<p>or:</p>
+
+<pre><code>  uri_block_isp SYMBOLIC_TEST_NAME &quot;DataRancid&quot; &quot;McCarrier&quot; &quot;Phishers-r-Us&quot;</code></pre>
+
+<p>Example rule for matching a URI in China:</p>
+
+<pre><code>  uri_block_cc TEST1 cn</code></pre>
+
+<p>This would block the URL http://www.baidu.com/index.htm. Similarly, to match a Spam-haven netblock:</p>
+
+<pre><code>  uri_block_cidr TEST2 65.181.64.0/18</code></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><code>  uri_block_isp TEST3 &quot;ColoCrossing&quot;</code></pre>
+
+<p>if one didn&#39;t trust URL&#39;s pointing to that organization&#39;s clients. Lastly, if there&#39;s a country that you want to block but there&#39;s an explicit host you wish to exempt from that blacklist, you can use:</p>
+
+<pre><code>  uri_block_exclude TEST1 www.baidu.com</code></pre>
+
+<p>if you wish to exempt URL&#39;s referring to this host. The same syntax is applicable to CIDR and ISP blocks as well.</p>
+
+<h1 id="DEPENDENCIES">DEPENDENCIES</h1>
+
+<p>The Country-Code based filtering requires the Geo::IP or GeoIP2 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>
+
+<dl>
+
+<dt id="uri_country_db_path-STRING">uri_country_db_path STRING</dt>
+<dd>
+
+<p>This option tells SpamAssassin where to find the MaxMind country GeoIP2 database.</p>
+
+</dd>
+</dl>
+
+<dl>
+
+<dt id="uri_country_db_isp_path-STRING">uri_country_db_isp_path STRING</dt>
+<dd>
+
+<p>This option tells SpamAssassin where to find the MaxMind isp GeoIP2 database.</p>
+
+</dd>
+</dl>
+
+
+</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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -0,0 +1,85 @@
+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_cont SYMBOLIC_TEST_NAME co1 co2 co3 co4
+
+    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 or GeoIP2 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.
+
+    uri_country_db_path STRING
+      This option tells SpamAssassin where to find the MaxMind country
+      GeoIP2 database.
+
+    uri_country_db_isp_path STRING
+      This option tells SpamAssassin where to find the MaxMind isp GeoIP2
+      database.
+

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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -0,0 +1,51 @@
+<?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="#USER-PREFERENCES">USER PREFERENCES</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Plugin::VBounce - aid in rescuing genuine bounces</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code> loadplugin Mail::SpamAssassin::Plugin::VBounce [/path/to/VBounce.pm]</code></pre>
+
+<h1 id="USER-PREFERENCES">USER PREFERENCES</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 id="whitelist_bounce_relays-hostname-hostname2">whitelist_bounce_relays hostname [hostname2 ...]</dt>
+<dd>
+
+<p>This is used to &#39;rescue&#39; 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 &#39;Received&#39; 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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -0,0 +1,46 @@
+<?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>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Plugin::WhiteListSubject - whitelist by Subject header</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code> 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</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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;, count 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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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><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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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></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="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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&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 Sun Sep 16 14:36:10 2018
@@ -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=1841017&view=auto
==============================================================================
--- spamassassin/site/full/3.4.x/doc/sa-awl.html (added)
+++ spamassassin/site/full/3.4.x/doc/sa-awl.html Sun Sep 16 14:36:10 2018
@@ -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>
+
+