You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by si...@apache.org on 2024/03/29 12:01:19 UTC

svn commit: r1916621 [15/19] - in /spamassassin/site/full/4.0.x: ./ doc/

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_VBounce.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,30 @@
+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.
+
+    welcomelist_bounce_relays hostname [hostname2 ...]
+        Previously whitelist_bounce_relays which will work interchangeably
+        until 4.1.
+
+        This is used to 'rescue' legitimate bounce messages that were
+        generated in response to mail you really *did* send. List the MTA
+        relay hostnames that your outbound mail is delivered through. If a
+        bounce message is found, and it contains one of these hostnames in a
+        'Received' header found the in the message body, 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
+        "welcomelist_bounce_relays" lines are also OK.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.html Fri Mar 29 12:01:17 2024
@@ -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>Mail::SpamAssassin::Plugin::WelcomeListSubject - welcomelist by Subject header</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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::WelcomeListSubject - welcomelist by Subject header</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>loadplugin Mail::SpamAssassin::Plugin::WelcomeListSubject
+
+header SUBJECT_IN_WELCOMELIST eval:check_subject_in_welcomelist()
+header SUBJECT_IN_BLOCKLIST eval:check_subject_in_blocklist()
+
+score SUBJECT_IN_WELCOMELIST -100
+score SUBJECT_IN_BLOCKLIST 100
+
+welcomelist_subject [Bug *]
+blocklist_subject Make Money Fast</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>This SpamAssassin plugin module provides eval tests for welcomelisting and blocklisting particular strings in the Subject header. String will match anywhere in the subject. The value for welcomelist_subject or blocklist_subject are strings which may contain file -glob -style patterns, similar to the other welcomelist_* config options. Note that each subject/string must be a separate *_subject command, all whitespace is included in the string.</p>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Plugin_WelcomeListSubject.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,25 @@
+NAME
+    Mail::SpamAssassin::Plugin::WelcomeListSubject - welcomelist by Subject
+    header
+
+SYNOPSIS
+     loadplugin Mail::SpamAssassin::Plugin::WelcomeListSubject
+
+     header SUBJECT_IN_WELCOMELIST eval:check_subject_in_welcomelist()
+     header SUBJECT_IN_BLOCKLIST eval:check_subject_in_blocklist()
+
+     score SUBJECT_IN_WELCOMELIST -100
+     score SUBJECT_IN_BLOCKLIST 100
+
+     welcomelist_subject [Bug *]
+     blocklist_subject Make Money Fast
+
+DESCRIPTION
+    This SpamAssassin plugin module provides eval tests for welcomelisting
+    and blocklisting particular strings in the Subject header. String will
+    match anywhere in the subject. The value for welcomelist_subject or
+    blocklist_subject are strings which may contain file -glob -style
+    patterns, similar to the other welcomelist_* config options. Note that
+    each subject/string must be a separate *_subject command, all whitespace
+    is included in the string.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,44 @@
+<?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::Pyzor - Pyzor spam filtering in Perl</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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::Pyzor - Pyzor spam filtering in Perl</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>This distribution contains Perl implementations of parts of <a href="http://pyzor.org">Pyzor</a>, a tool for use in spam email filtering. It is intended for use with <a>Mail::SpamAssassin</a> but may be useful in other contexts.</p>
+
+<p>See the following modules for information on specific tools that the distribution includes:</p>
+
+<ul>
+
+<li><p><a>Mail::SpamAssassin::Pyzor::Client</a></p>
+
+</li>
+<li><p><a>Mail::SpamAssassin::Pyzor::Digest</a></p>
+
+</li>
+</ul>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,16 @@
+NAME
+    Mail::SpamAssassin::Pyzor - Pyzor spam filtering in Perl
+
+DESCRIPTION
+    This distribution contains Perl implementations of parts of Pyzor
+    <http://pyzor.org>, a tool for use in spam email filtering. It is
+    intended for use with Mail::SpamAssassin but may be useful in other
+    contexts.
+
+    See the following modules for information on specific tools that the
+    distribution includes:
+
+    *   Mail::SpamAssassin::Pyzor::Client
+
+    *   Mail::SpamAssassin::Pyzor::Digest
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,215 @@
+<?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::Pyzor::Client - Pyzor client logic</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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="#PROTOCOL-DETAILS">PROTOCOL DETAILS</a>
+    <ul>
+      <li><a href="#Reliability">Reliability</a></li>
+    </ul>
+  </li>
+  <li><a href="#CONSTRUCTOR">CONSTRUCTOR</a>
+    <ul>
+      <li><a href="#new-OPTS">new(%OPTS)</a></li>
+    </ul>
+  </li>
+  <li><a href="#REQUEST-METHODS">REQUEST METHODS</a>
+    <ul>
+      <li><a href="#report-digest">report($digest)</a></li>
+      <li><a href="#check-digest">check($digest)</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Pyzor::Client - Pyzor client logic</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>use Mail::SpamAssassin::Pyzor::Client ();
+use Mail::SpamAssassin::Pyzor::Digest ();
+
+my $client = Mail::SpamAssassin::Pyzor::Client-&gt;new();
+
+my $digest = Mail::SpamAssassin::Pyzor::Digest::get( $msg );
+
+my $check_ref = $client-&gt;check($digest);
+die $check_ref-&gt;{&#39;Diag&#39;} if $check_ref-&gt;{&#39;Code&#39;} ne &#39;200&#39;;
+
+my $report_ref = $client-&gt;report($digest);
+die $report_ref-&gt;{&#39;Diag&#39;} if $report_ref-&gt;{&#39;Code&#39;} ne &#39;200&#39;;</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>A bare-bones <a href="http://pyzor.org">Pyzor</a> client that currently only implements the functionality needed for <a>Mail::SpamAssassin</a>.</p>
+
+<h1 id="PROTOCOL-DETAILS">PROTOCOL DETAILS</h1>
+
+<p>The Pyzor protocol is not a published standard, and there appears to be no meaningful public documentation. What follows is enough information, largely gleaned through forum posts and reverse engineering, to facilitate effective use of this module:</p>
+
+<p>Pyzor is an RPC-oriented, message-based protocol. Each message is a simple dictionary of 7-bit ASCII keys and values. Server responses always include at least the following:</p>
+
+<ul>
+
+<li><p><code>Code</code> - Similar to HTTP status codes; anything besides <code>200</code> is an error.</p>
+
+</li>
+<li><p><code>Diag</code> - Similar to HTTP status reasons: a text description of the status.</p>
+
+</li>
+</ul>
+
+<p>(NB: There are additional standard response headers that are useful only for the protocol itself and thus are not part of this module&#39;s returns.)</p>
+
+<h2 id="Reliability">Reliability</h2>
+
+<p>Pyzor uses UDP rather than TCP, so no message is guaranteed to reach its destination. A transmission failure can happen in either the request or the response; in either case, a timeout error will result. Such errors are represented as thrown instances of <a>Mail::Pyzor::X::Timeout</a>.</p>
+
+<h1 id="CONSTRUCTOR">CONSTRUCTOR</h1>
+
+<h2 id="new-OPTS">new(%OPTS)</h2>
+
+<p>Create a new pyzor client.</p>
+
+<dl>
+
+<dt id="Input">Input</dt>
+<dd>
+
+<p>%OPTS are (all optional):</p>
+
+<ul>
+
+<li><p><code>server_host</code> - The pyzor server host to connect to (default is <code>public.pyzor.org</code>)</p>
+
+</li>
+<li><p><code>server_port</code> - The pyzor server port to connect to (default is 24441)</p>
+
+</li>
+<li><p><code>username</code> - The username to present to the pyzor server (default is <code>anonymous</code>)</p>
+
+</li>
+<li><p><code>password</code> - The password to present to the pyzor server (default is empty)</p>
+
+</li>
+<li><p><code>timeout</code> - The maximum time, in seconds, to wait for a response from the pyzor server (defeault is 3.5)</p>
+
+</li>
+</ul>
+
+</dd>
+<dt id="Output">Output</dt>
+<dd>
+
+<ul>
+
+<p>Returns a <a>Mail::SpamAssassin::Pyzor::Client</a> object.</p>
+
+</ul>
+
+</dd>
+</dl>
+
+<h1 id="REQUEST-METHODS">REQUEST METHODS</h1>
+
+<h2 id="report-digest">report($digest)</h2>
+
+<p>Report the digest of a spam message to the pyzor server. This function will throw if a messaging failure or timeout happens.</p>
+
+<dl>
+
+<dt id="Input1">Input</dt>
+<dd>
+
+<dl>
+
+<dt id="digest-SCALAR">$digest <code>SCALAR</code></dt>
+<dd>
+
+<p>The message digest to report, as given by <code>Mail::SpamAssassin::Pyzor::Digest::get()</code>.</p>
+
+</dd>
+</dl>
+
+</dd>
+<dt id="Output1">Output</dt>
+<dd>
+
+<dl>
+
+<dt id="HASHREF"><code>HASHREF</code></dt>
+<dd>
+
+<p>Returns a hashref of the standard attributes noted above.</p>
+
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+<h2 id="check-digest">check($digest)</h2>
+
+<p>Check the digest of a message to see if the pyzor server has a report for it. This function will throw if a messaging failure or timeout happens.</p>
+
+<dl>
+
+<dt id="Input2">Input</dt>
+<dd>
+
+<dl>
+
+<dt id="digest-SCALAR1">$digest <code>SCALAR</code></dt>
+<dd>
+
+<p>The message digest to check, as given by <code>Mail::SpamAssassin::Pyzor::Digest::get()</code>.</p>
+
+</dd>
+</dl>
+
+</dd>
+<dt id="Output2">Output</dt>
+<dd>
+
+<dl>
+
+<dt id="HASHREF1"><code>HASHREF</code></dt>
+<dd>
+
+<p>Returns a hashref of the standard attributes noted above as well as the following:</p>
+
+<ul>
+
+<li><p><code>Count</code> - The number of reports the server has received for the given digest.</p>
+
+</li>
+<li><p><code>WL-Count</code> - The number of whitelist requests the server has received for the given digest.</p>
+
+</li>
+</ul>
+
+</dd>
+</dl>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Client.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,111 @@
+NAME
+    Mail::SpamAssassin::Pyzor::Client - Pyzor client logic
+
+SYNOPSIS
+        use Mail::SpamAssassin::Pyzor::Client ();
+        use Mail::SpamAssassin::Pyzor::Digest ();
+
+        my $client = Mail::SpamAssassin::Pyzor::Client->new();
+
+        my $digest = Mail::SpamAssassin::Pyzor::Digest::get( $msg );
+
+        my $check_ref = $client->check($digest);
+        die $check_ref->{'Diag'} if $check_ref->{'Code'} ne '200';
+
+        my $report_ref = $client->report($digest);
+        die $report_ref->{'Diag'} if $report_ref->{'Code'} ne '200';
+
+DESCRIPTION
+    A bare-bones Pyzor <http://pyzor.org> client that currently only
+    implements the functionality needed for Mail::SpamAssassin.
+
+PROTOCOL DETAILS
+    The Pyzor protocol is not a published standard, and there appears to be
+    no meaningful public documentation. What follows is enough information,
+    largely gleaned through forum posts and reverse engineering, to
+    facilitate effective use of this module:
+
+    Pyzor is an RPC-oriented, message-based protocol. Each message is a
+    simple dictionary of 7-bit ASCII keys and values. Server responses
+    always include at least the following:
+
+    *   "Code" - Similar to HTTP status codes; anything besides 200 is an
+        error.
+
+    *   "Diag" - Similar to HTTP status reasons: a text description of the
+        status.
+
+    (NB: There are additional standard response headers that are useful only
+    for the protocol itself and thus are not part of this module's returns.)
+
+  Reliability
+    Pyzor uses UDP rather than TCP, so no message is guaranteed to reach its
+    destination. A transmission failure can happen in either the request or
+    the response; in either case, a timeout error will result. Such errors
+    are represented as thrown instances of Mail::Pyzor::X::Timeout.
+
+CONSTRUCTOR
+  new(%OPTS)
+    Create a new pyzor client.
+
+    Input
+      %OPTS are (all optional):
+
+      *  "server_host" - The pyzor server host to connect to (default is
+         "public.pyzor.org")
+
+      *  "server_port" - The pyzor server port to connect to (default is
+         24441)
+
+      *  "username" - The username to present to the pyzor server (default
+         is "anonymous")
+
+      *  "password" - The password to present to the pyzor server (default
+         is empty)
+
+      *  "timeout" - The maximum time, in seconds, to wait for a response
+         from the pyzor server (defeault is 3.5)
+
+    Output
+
+         Returns a Mail::SpamAssassin::Pyzor::Client object.
+
+REQUEST METHODS
+  report($digest)
+    Report the digest of a spam message to the pyzor server. This function
+    will throw if a messaging failure or timeout happens.
+
+    Input
+
+      $digest "SCALAR"
+         The message digest to report, as given by
+         "Mail::SpamAssassin::Pyzor::Digest::get()".
+
+    Output
+
+      "HASHREF"
+         Returns a hashref of the standard attributes noted above.
+
+  check($digest)
+    Check the digest of a message to see if the pyzor server has a report
+    for it. This function will throw if a messaging failure or timeout
+    happens.
+
+    Input
+
+      $digest "SCALAR"
+         The message digest to check, as given by
+         "Mail::SpamAssassin::Pyzor::Digest::get()".
+
+    Output
+
+      "HASHREF"
+         Returns a hashref of the standard attributes noted above as well as
+         the following:
+
+         *   "Count" - The number of reports the server has received for the
+             given digest.
+
+         *   "WL-Count" - The number of whitelist requests the server has
+             received for the given digest.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,50 @@
+<?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::Pyzor::Digest - Pyzor Digest module</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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="#FUNCTIONS">FUNCTIONS</a>
+    <ul>
+      <li><a href="#hex-get-MSG">$hex = get( $MSG )</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Pyzor::Digest - Pyzor Digest module</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>my $digest = Mail::SpamAssassin::Pyzor::Digest::get( $mime_text );</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>A reimplementation of <a href="https://github.com/SpamExperts/pyzor/blob/master/pyzor/digest.py">https://github.com/SpamExperts/pyzor/blob/master/pyzor/digest.py</a>.</p>
+
+<h1 id="FUNCTIONS">FUNCTIONS</h1>
+
+<h2 id="hex-get-MSG">$hex = get( $MSG )</h2>
+
+<p>This takes an email message in raw MIME text format (i.e., as saved in the standard mbox format) and returns the message&#39;s Pyzor digest in lower-case hexadecimal.</p>
+
+<p>The output from this function should normally be identical to that of the <code>pyzor</code> script&#39;s <code>digest</code> command. It is suitable for use in <a>Mail::SpamAssassin::Pyzor::Client</a>&#39;s request methods.</p>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,20 @@
+NAME
+    Mail::SpamAssassin::Pyzor::Digest - Pyzor Digest module
+
+SYNOPSIS
+        my $digest = Mail::SpamAssassin::Pyzor::Digest::get( $mime_text );
+
+DESCRIPTION
+    A reimplementation of
+    <https://github.com/SpamExperts/pyzor/blob/master/pyzor/digest.py>.
+
+FUNCTIONS
+  $hex = get( $MSG )
+    This takes an email message in raw MIME text format (i.e., as saved in
+    the standard mbox format) and returns the message's Pyzor digest in
+    lower-case hexadecimal.
+
+    The output from this function should normally be identical to that of
+    the "pyzor" script's "digest" command. It is suitable for use in
+    Mail::SpamAssassin::Pyzor::Client's request methods.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,88 @@
+<?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::Pyzor::Digest::Pieces - Pyzor backend logic module</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#DESCRIPTION">DESCRIPTION</a></li>
+  <li><a href="#FUNCTIONS">FUNCTIONS</a>
+    <ul>
+      <li><a href="#strings_ar-digest_payloads-EMAIL_MIME">$strings_ar = digest_payloads( $EMAIL_MIME )</a></li>
+      <li><a href="#normalize-STRING">normalize( $STRING )</a></li>
+      <li><a href="#yn-should_handle_line-STRING">$yn = should_handle_line( $STRING )</a></li>
+      <li><a href="#sr-assemble_lines-LINES">$sr = assemble_lines( \@LINES )</a></li>
+      <li><a href="#main-sub-encoding-checkval-parse_content_type-CONTENT_TYPE">($main, $sub, $encoding, $checkval) = parse_content_type( $CONTENT_TYPE )</a></li>
+      <li><a href="#lines-splitlines-TEXT">@lines = splitlines( $TEXT )</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Pyzor::Digest::Pieces - Pyzor backend logic module</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>This module houses backend logic for <a>Mail::SpamAssassin::Pyzor::Digest</a>.</p>
+
+<p>It reimplements logic found in pyzor&#39;s <i>digest.py</i> module (<a href="https://github.com/SpamExperts/pyzor/blob/master/pyzor/digest.py">https://github.com/SpamExperts/pyzor/blob/master/pyzor/digest.py</a>).</p>
+
+<h1 id="FUNCTIONS">FUNCTIONS</h1>
+
+<h2 id="strings_ar-digest_payloads-EMAIL_MIME">$strings_ar = digest_payloads( $EMAIL_MIME )</h2>
+
+<p>This imitates the corresponding object method in <i>digest.py</i>. It returns a reference to an array of strings. Each string can be either a byte string or a character string (e.g., UTF-8 decoded).</p>
+
+<p>NB: RFC 2822 stipulates that message bodies should use CRLF line breaks, not plain LF (nor plain CR). We will thus convert any plain CRs in a quoted-printable message body into CRLF. Python, though, doesn&#39;t do this, so the output of our implementation of <code>digest_payloads()</code> diverges from that of the Python original. It doesn&#39;t ultimately make a difference since the line-ending whitespace gets trimmed regardless, but it&#39;s necessary to factor in when comparing the output of our implementation with the Python output.</p>
+
+<h2 id="normalize-STRING">normalize( $STRING )</h2>
+
+<p>This imitates the corresponding object method in <i>digest.py</i>. It modifies <code>$STRING</code> in-place.</p>
+
+<p>As with the original implementation, if <code>$STRING</code> contains (decoded) Unicode characters, those characters will be parsed accordingly. So:</p>
+
+<pre><code>$str = &quot;123\xc2\xa0&quot;;   # [ c2 a0 ] == \u00a0, non-breaking space
+
+normalize($str);</code></pre>
+
+<p>The above will leave <code>$str</code> alone, but this:</p>
+
+<pre><code>utf8::decode($str);
+
+normalize($str);</code></pre>
+
+<p>... will trim off the last two bytes from <code>$str</code>.</p>
+
+<h2 id="yn-should_handle_line-STRING">$yn = should_handle_line( $STRING )</h2>
+
+<p>This imitates the corresponding object method in <i>digest.py</i>. It returns a boolean.</p>
+
+<h2 id="sr-assemble_lines-LINES">$sr = assemble_lines( \@LINES )</h2>
+
+<p>This assembles a string buffer out of @LINES. The string is the buffer of octets that will be hashed to produce the message digest.</p>
+
+<p>Each member of @LINES is expected to be an <b>octet string</b>, not a character string.</p>
+
+<h2 id="main-sub-encoding-checkval-parse_content_type-CONTENT_TYPE">($main, $sub, $encoding, $checkval) = parse_content_type( $CONTENT_TYPE )</h2>
+
+<h2 id="lines-splitlines-TEXT">@lines = splitlines( $TEXT )</h2>
+
+<p>Imitates <code>str.splitlines()</code>. (cf. <code>pydoc str</code>)</p>
+
+<p>Returns a plain list in list context. Returns the number of items to be returned in scalar context.</p>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_Pieces.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,61 @@
+NAME
+    Mail::SpamAssassin::Pyzor::Digest::Pieces - Pyzor backend logic module
+
+DESCRIPTION
+    This module houses backend logic for Mail::SpamAssassin::Pyzor::Digest.
+
+    It reimplements logic found in pyzor's digest.py module
+    (<https://github.com/SpamExperts/pyzor/blob/master/pyzor/digest.py>).
+
+FUNCTIONS
+  $strings_ar = digest_payloads( $EMAIL_MIME )
+    This imitates the corresponding object method in digest.py. It returns a
+    reference to an array of strings. Each string can be either a byte
+    string or a character string (e.g., UTF-8 decoded).
+
+    NB: RFC 2822 stipulates that message bodies should use CRLF line breaks,
+    not plain LF (nor plain CR). We will thus convert any plain CRs in a
+    quoted-printable message body into CRLF. Python, though, doesn't do
+    this, so the output of our implementation of "digest_payloads()"
+    diverges from that of the Python original. It doesn't ultimately make a
+    difference since the line-ending whitespace gets trimmed regardless, but
+    it's necessary to factor in when comparing the output of our
+    implementation with the Python output.
+
+  normalize( $STRING )
+    This imitates the corresponding object method in digest.py. It modifies
+    $STRING in-place.
+
+    As with the original implementation, if $STRING contains (decoded)
+    Unicode characters, those characters will be parsed accordingly. So:
+
+        $str = "123\xc2\xa0";   # [ c2 a0 ] == \u00a0, non-breaking space
+
+        normalize($str);
+
+    The above will leave $str alone, but this:
+
+        utf8::decode($str);
+
+        normalize($str);
+
+    ... will trim off the last two bytes from $str.
+
+  $yn = should_handle_line( $STRING )
+    This imitates the corresponding object method in digest.py. It returns a
+    boolean.
+
+  $sr = assemble_lines( \@LINES )
+    This assembles a string buffer out of @LINES. The string is the buffer
+    of octets that will be hashed to produce the message digest.
+
+    Each member of @LINES is expected to be an octet string, not a character
+    string.
+
+  ($main, $sub, $encoding, $checkval) = parse_content_type( $CONTENT_TYPE )
+  @lines = splitlines( $TEXT )
+    Imitates "str.splitlines()". (cf. "pydoc str")
+
+    Returns a plain list in list context. Returns the number of items to be
+    returned in scalar context.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,61 @@
+<?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::Pyzor::Digest::StripHtml - Pyzor HTML-stripping module</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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="#ACCURACY">ACCURACY</a></li>
+  <li><a href="#FUNCTIONS">FUNCTIONS</a>
+    <ul>
+      <li><a href="#stripped-strip-HTML">$stripped = strip( $HTML )</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Pyzor::Digest::StripHtml - Pyzor HTML-stripping module</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<pre><code>my $stripped = Mail::SpamAssassin::Pyzor::Digest::StripHtml::strip($html);</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>This module attempts to duplicate pyzor&#39;s HTML-stripping logic.</p>
+
+<h1 id="ACCURACY">ACCURACY</h1>
+
+<p>This library cannot achieve 100%, bug-for-bug parity with pyzor because to do so would require duplicating Python&#39;s own HTML parsing library. Since that library&#39;s output has changed over time, and those changes in turn affect pyzor, it&#39;s literally impossible to arrive at a single, fully-compatible reimplementation.</p>
+
+<p>That said, all known divergences between pyzor and this library involve invalid HTML as input.</p>
+
+<p>Please open bug reports for any divergences you identify, particularly if the input is valid HTML.</p>
+
+<h1 id="FUNCTIONS">FUNCTIONS</h1>
+
+<h2 id="stripped-strip-HTML">$stripped = strip( $HTML )</h2>
+
+<p>Give it some HTML, and it&#39;ll give back the stripped text.</p>
+
+<p>In <b>general</b>, the stripping consists of removing tags as well as <code>&lt;script&gt;</code> and <code>&lt;style&gt;</code> elements; however, it also removes HTML entities.</p>
+
+<p>This tries very hard to duplicate pyzor&#39;s behavior with invalid HTML.</p>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Pyzor_Digest_StripHtml.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,33 @@
+NAME
+    Mail::SpamAssassin::Pyzor::Digest::StripHtml - Pyzor HTML-stripping
+    module
+
+SYNOPSIS
+        my $stripped = Mail::SpamAssassin::Pyzor::Digest::StripHtml::strip($html);
+
+DESCRIPTION
+    This module attempts to duplicate pyzor's HTML-stripping logic.
+
+ACCURACY
+    This library cannot achieve 100%, bug-for-bug parity with pyzor because
+    to do so would require duplicating Python's own HTML parsing library.
+    Since that library's output has changed over time, and those changes in
+    turn affect pyzor, it's literally impossible to arrive at a single,
+    fully-compatible reimplementation.
+
+    That said, all known divergences between pyzor and this library involve
+    invalid HTML as input.
+
+    Please open bug reports for any divergences you identify, particularly
+    if the input is valid HTML.
+
+FUNCTIONS
+  $stripped = strip( $HTML )
+    Give it some HTML, and it'll give back the stripped text.
+
+    In general, the stripping consists of removing tags as well as
+    "<script>" and "<style>" elements; however, it also removes HTML
+    entities.
+
+    This tries very hard to duplicate pyzor's behavior with invalid HTML.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.html Fri Mar 29 12:01:17 2024
@@ -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>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>
+
+
+
+<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-is_ascii">($hostname, $domain) = split_domain ($fqdn, $is_ascii)</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>
+
+<p>If $is_ascii given and true, skip idn_to_ascii() conversion</p>
+
+</dd>
+<dt id="domain-trim_domain-fqdn-is_ascii">$domain = trim_domain($fqdn, $is_ascii)</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>
+
+<p>If $is_ascii given and true, skip idn_to_ascii() conversion</p>
+
+</dd>
+<dt id="ok-is_domain_valid-dom-is_ascii">$ok = is_domain_valid($dom, $is_ascii)</dt>
+<dd>
+
+<p>Return <code>1</code> if the domain/hostname uses valid known TLD, <code>undef</code> otherwise.</p>
+
+<p>If $is_ascii given and true, skip idn_to_ascii() conversion.</p>
+
+<p>Note that this only checks the TLD validity and nothing else. To verify that the complete fqdn is in a valid legal format, Util::is_fqdn_valid() can additionally be used.</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_RegistryBoundaries.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,36 @@
+NAME
+    Mail::SpamAssassin::RegistryBoundaries - domain delegation rules
+
+METHODS
+    ($hostname, $domain) = split_domain ($fqdn, $is_ascii)
+        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" )
+
+        If $is_ascii given and true, skip idn_to_ascii() conversion
+
+    $domain = trim_domain($fqdn, $is_ascii)
+        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"
+
+        If $is_ascii given and true, skip idn_to_ascii() conversion
+
+    $ok = is_domain_valid($dom, $is_ascii)
+        Return 1 if the domain/hostname uses valid known TLD, "undef"
+        otherwise.
+
+        If $is_ascii given and true, skip idn_to_ascii() conversion.
+
+        Note that this only checks the TLD validity and nothing else. To
+        verify that the complete fqdn is in a valid legal format,
+        Util::is_fqdn_valid() can additionally be used.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.html Fri Mar 29 12:01:17 2024
@@ -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>Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto Welcomelist</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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 Welcomelist</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-welcomelists.</p>
+
+<p>The default table structure looks like this: CREATE TABLE awl ( username varchar(100) NOT NULL default &#39;&#39;, email varchar(255) NOT NULL default &#39;&#39;, ip varchar(40) NOT NULL default &#39;&#39;, msgcount int(11) NOT NULL default &#39;0&#39;, totscore float NOT NULL default &#39;0&#39;, signedby varchar(255) NOT NULL default &#39;&#39;, last_hit timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 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 autowelcomelist address into it&#39;s two components, email and ip address.</p>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SQLBasedAddrList.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,107 @@
+NAME
+    Mail::SpamAssassin::SQLBasedAddrList - SpamAssassin SQL Based Auto
+    Welcomelist
+
+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-welcomelists.
+
+    The default table structure looks like this: CREATE TABLE awl ( username
+    varchar(100) NOT NULL default '', email varchar(255) NOT NULL default
+    '', ip varchar(40) NOT NULL default '', msgcount int(11) NOT NULL
+    default '0', totscore float NOT NULL default '0', signedby varchar(255)
+    NOT NULL default '', last_hit timestamp NOT NULL DEFAULT
+    CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 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 autowelcomelist address into it's two
+    components, email and ip address.
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.html Fri Mar 29 12:01:17 2024
@@ -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>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>
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#METHODS">METHODS</a></li>
+  <li><a href="#SEE-ALSO">SEE ALSO</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::SubProcBackChannel - back-channel for communication between a master and multiple slave processes</p>
+
+<h1 id="METHODS">METHODS</h1>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>Mail::SpamAssassin(3) Mail::SpamAssassin::ArchiveIterator(3) Mail::SpamAssassin::SpamdPreforkScaling(3) spamassassin(1) spamd(1) mass-check(1)</p>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_SubProcBackChannel.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,10 @@
+NAME
+    Mail::SpamAssassin::SubProcBackChannel - back-channel for communication
+    between a master and multiple slave processes
+
+METHODS
+SEE ALSO
+    Mail::SpamAssassin(3) Mail::SpamAssassin::ArchiveIterator(3)
+    Mail::SpamAssassin::SpamdPreforkScaling(3) spamassassin(1) spamd(1)
+    mass-check(1)
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.html Fri Mar 29 12:01:17 2024
@@ -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>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>
+
+
+
+<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-&gt;timed_out()</code> 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-&gt;run()</code>, 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/4.0.x/doc/Mail_SpamAssassin_Timeout.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Timeout.txt Fri Mar 29 12:01:17 2024
@@ -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->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->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/4.0.x/doc/Mail_SpamAssassin_Util.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.html Fri Mar 29 12:01:17 2024
@@ -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>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>
+
+
+
+<ul id="index">
+  <li><a href="#NAME">NAME</a></li>
+  <li><a href="#DESCRIPTION">DESCRIPTION</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>Mail::SpamAssassin::Util - utility functions</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>A general class for utility functions. Please use this for functions that stand alone, without requiring a $self object, Portability functions especially.</p>
+
+<p>NOTE: The functions in this module are to be considered private. Their API may change at any point, and it&#39;s expected that they&#39;ll only be used by other Mail::SpamAssassin modules. (TODO: we should probably revisit this if it&#39;s useful for plugin development.)</p>
+
+<p>NOTE: Utility functions should not be changing global variables such as $_, $1, $2, ... $/, etc. unless explicitly documented. If these variables are in use by these functions, they should be localized.</p>
+
+<dl>
+
+<dt id="module-first_available_module-module_list">$module = first_available_module (@module_list)</dt>
+<dd>
+
+<p>Return the name of the first module that can be successfully loaded with <code>require</code> from the list. Returns <code>undef</code> if none are available.</p>
+
+<p>This is used instead of <code>AnyDBM_File</code> as follows:</p>
+
+<pre><code>my $module = Mail::SpamAssassin::Util::first_available_module
+                      (qw(DB_File GDBM_File NDBM_File SDBM_File));
+tie %hash, $module, $path, [... args];</code></pre>
+
+<p>Note that <code>SDBM_File</code> is guaranteed to be present, since it comes with Perl.</p>
+
+</dd>
+<dt id="touch_file-file-args">touch_file(file, { args });</dt>
+<dd>
+
+<p>Touch or create a file.</p>
+
+<p>Possible args:</p>
+
+<p>create_exclusive =&gt; 1 Create a new empty file safely, only if not existing before</p>
+
+</dd>
+<dt id="my-filepath-filehandle-secure_tmpfile">my ($filepath, $filehandle) = secure_tmpfile();</dt>
+<dd>
+
+<p>Generates a filename for a temporary file, opens it exclusively and securely, and returns a filehandle to the open file (opened O_RDWR).</p>
+
+<p>If it cannot open a file after 20 tries, it returns <code>undef</code>.</p>
+
+</dd>
+<dt id="my-dirpath-secure_tmpdir">my ($dirpath) = secure_tmpdir();</dt>
+<dd>
+
+<p>Generates a directory for temporary files. Creates it securely and returns the path to the directory.</p>
+
+<p>If it cannot create a directory after 20 tries, it returns <code>undef</code>.</p>
+
+</dd>
+</dl>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,50 @@
+NAME
+    Mail::SpamAssassin::Util - utility functions
+
+DESCRIPTION
+    A general class for utility functions. Please use this for functions
+    that stand alone, without requiring a $self object, Portability
+    functions especially.
+
+    NOTE: The functions in this module are to be considered private. Their
+    API may change at any point, and it's expected that they'll only be used
+    by other Mail::SpamAssassin modules. (TODO: we should probably revisit
+    this if it's useful for plugin development.)
+
+    NOTE: Utility functions should not be changing global variables such as
+    $_, $1, $2, ... $/, etc. unless explicitly documented. If these
+    variables are in use by these functions, they should be localized.
+
+    $module = first_available_module (@module_list)
+        Return the name of the first module that can be successfully loaded
+        with "require" from the list. Returns "undef" if none are available.
+
+        This is used instead of "AnyDBM_File" as follows:
+
+          my $module = Mail::SpamAssassin::Util::first_available_module
+                                (qw(DB_File GDBM_File NDBM_File SDBM_File));
+          tie %hash, $module, $path, [... args];
+
+        Note that "SDBM_File" is guaranteed to be present, since it comes
+        with Perl.
+
+    touch_file(file, { args });
+        Touch or create a file.
+
+        Possible args:
+
+        create_exclusive => 1 Create a new empty file safely, only if not
+        existing before
+
+    my ($filepath, $filehandle) = secure_tmpfile();
+        Generates a filename for a temporary file, opens it exclusively and
+        securely, and returns a filehandle to the open file (opened O_RDWR).
+
+        If it cannot open a file after 20 tries, it returns "undef".
+
+    my ($dirpath) = secure_tmpdir();
+        Generates a directory for temporary files. Creates it securely and
+        returns the path to the directory.
+
+        If it cannot create a directory after 20 tries, it returns "undef".
+

Added: spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.html Fri Mar 29 12:01:17 2024
@@ -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>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>
+
+
+
+<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/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_DependencyInfo.txt Fri Mar 29 12:01:17 2024
@@ -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/4.0.x/doc/Mail_SpamAssassin_Util_Progress.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_Progress.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_Progress.html (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_Progress.html Fri Mar 29 12:01:17 2024
@@ -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>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>
+
+
+
+<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/4.0.x/doc/Mail_SpamAssassin_Util_Progress.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_Progress.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_Progress.txt (added)
+++ spamassassin/site/full/4.0.x/doc/Mail_SpamAssassin_Util_Progress.txt Fri Mar 29 12:01:17 2024
@@ -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/4.0.x/doc/sa-awl.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/sa-awl.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/sa-awl.html (added)
+++ spamassassin/site/full/4.0.x/doc/sa-awl.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,86 @@
+<?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-welcomelist db</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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-welcomelist db</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p><b>sa-awl</b> [--clean] [--dry-run] [--min n] [dbfile]</p>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>Check or clean a SpamAssassin auto-welcomelist (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-welcomelist</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="dry-run">--dry-run</dt>
+<dd>
+
+<p>When specified with th <code>--clean</code> option it displays the infrequently-used AWL entries that will be deleted. The <code>--min</code> switch can be used to select the threshold at which entries are kept or deleted.</p>
+
+</dd>
+<dt id="min-n">--min n</dt>
+<dd>
+
+<p>Select the threshold at which entries are kept or deleted when <code>--clean</code> is used. The default is <code>2</code>, so entries that have only been seen once are deleted.</p>
+
+</dd>
+</dl>
+
+<h1 id="OUTPUT">OUTPUT</h1>
+
+<p>The output looks like this:</p>
+
+<pre><code>AVG  (TOTSCORE/COUNT)  --  EMAIL|ip=IPBASE</code></pre>
+
+<p>For example:</p>
+
+<pre><code> 0.0         (0.0/7)  --  dawson@example.com|ip=208.192
+21.8        (43.7/2)  --  mcdaniel_2s2000@example.com|ip=200.106</code></pre>
+
+<p><code>AVG</code> is the average score; <code>TOTSCORE</code> is the total score of all mails seen so far; <code>COUNT</code> is the number of messages seen from that sender; <code>EMAIL</code> is the sender&#39;s email address, and <code>IPBASE</code> is the <b>AWL base IP address</b>.</p>
+
+<p><b>AWL base IP address</b> is a way to identify the sender&#39;s IP address they frequently send from, in an approximate way, but remaining hard for spammers to spoof. The algorithm is as follows:</p>
+
+<pre><code>- take the last Received header that contains a public IP address -- namely
+  one which is not in private, unrouted IP space.
+
+- chop off the last two octets, assuming that the user may be in an ISP&#39;s
+  dynamic address pool.</code></pre>
+
+
+</body>
+
+</html>
+
+

Added: spamassassin/site/full/4.0.x/doc/sa-awl.txt
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/sa-awl.txt?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/sa-awl.txt (added)
+++ spamassassin/site/full/4.0.x/doc/sa-awl.txt Fri Mar 29 12:01:17 2024
@@ -0,0 +1,53 @@
+NAME
+    sa-awl - examine and manipulate SpamAssassin's auto-welcomelist db
+
+SYNOPSIS
+    sa-awl [--clean] [--dry-run] [--min n] [dbfile]
+
+DESCRIPTION
+    Check or clean a SpamAssassin auto-welcomelist (AWL) database file.
+
+    The name of the file is specified after any options, as "dbfile". The
+    default is "$HOME/.spamassassin/auto-welcomelist".
+
+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.
+
+    --dry-run
+        When specified with th "--clean" option it displays the
+        infrequently-used AWL entries that will be deleted. The "--min"
+        switch can be used to select the threshold at which entries are kept
+        or deleted.
+
+    --min n
+        Select the threshold at which entries are kept or deleted when
+        "--clean" is used. The default is 2, so entries that have only been
+        seen once are deleted.
+
+OUTPUT
+    The output looks like this:
+
+         AVG  (TOTSCORE/COUNT)  --  EMAIL|ip=IPBASE
+
+    For example:
+
+         0.0         (0.0/7)  --  dawson@example.com|ip=208.192
+        21.8        (43.7/2)  --  mcdaniel_2s2000@example.com|ip=200.106
+
+    "AVG" is the average score; "TOTSCORE" is the total score of all mails
+    seen so far; "COUNT" is the number of messages seen from that sender;
+    "EMAIL" is the sender's email address, and "IPBASE" is the AWL base IP
+    address.
+
+    AWL base IP address is a way to identify the sender's IP address they
+    frequently send from, in an approximate way, but remaining hard for
+    spammers to spoof. The algorithm is as follows:
+
+      - take the last Received header that contains a public IP address -- namely
+        one which is not in private, unrouted IP space.
+
+      - chop off the last two octets, assuming that the user may be in an ISP's
+        dynamic address pool.
+

Added: spamassassin/site/full/4.0.x/doc/sa-check_spamd.html
URL: http://svn.apache.org/viewvc/spamassassin/site/full/4.0.x/doc/sa-check_spamd.html?rev=1916621&view=auto
==============================================================================
--- spamassassin/site/full/4.0.x/doc/sa-check_spamd.html (added)
+++ spamassassin/site/full/4.0.x/doc/sa-check_spamd.html Fri Mar 29 12:01:17 2024
@@ -0,0 +1,175 @@
+<?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-check_spamd - spamd monitoring script for use with Nagios, etc.</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rev="made" href="mailto:root@localhost" />
+</head>
+
+<body>
+
+
+
+<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="#EXIT-CODES">EXIT CODES</a></li>
+  <li><a href="#SEE-ALSO">SEE ALSO</a></li>
+  <li><a href="#PREREQUISITES">PREREQUISITES</a></li>
+  <li><a href="#AUTHOR">AUTHOR</a></li>
+  <li><a href="#COPYRIGHT-AND-LICENSE">COPYRIGHT AND LICENSE</a></li>
+</ul>
+
+<h1 id="NAME">NAME</h1>
+
+<p>sa-check_spamd - spamd monitoring script for use with Nagios, etc.</p>
+
+<h1 id="SYNOPSIS">SYNOPSIS</h1>
+
+<p>sa-check_spamd [options]</p>
+
+<p>Options:</p>
+
+<pre><code>-c secs, --critical=secs          Critical ping response threshold
+-h, -?, --help                    Print usage message
+-H hostname, --hostname=hostname  Hostname of spamd service to ping
+-p port, --port=port              Port of spamd service to ping
+--socketpath=path                 Connect to given UNIX domain socket
+-t secs, --timeout=secs           Max time to wait for a ping response
+-v, --verbose                     Verbose debug output
+-V, --version                     Output version info
+-w secs, --warning=secs           Warning ping response threshold</code></pre>
+
+<h1 id="DESCRIPTION">DESCRIPTION</h1>
+
+<p>The purpose of this program is to provide a tool to monitor the status of <code>spamd</code> server processes. spamd is the daemonized version of the spamassassin executable, both provided in the SpamAssassin distribution.</p>
+
+<p>This program is designed for use, as a plugin, with the Nagios service monitoring software available from http://nagios.org. It might be compatible with other service monitoring packages. It is also useful as a command line utility or as a component of a custom shell script.</p>
+
+<h1 id="OPTIONS">OPTIONS</h1>
+
+<p>Options of the long form can be shortened as long as the remain unambiguous (i.e. <b>--host</b> can be used instead of <b>--hostname</b>).</p>
+
+<dl>
+
+<dt id="c-secs---critical-secs"><b>-c</b> <i>secs</i>, <b>--critical</b>=<i>secs</i></dt>
+<dd>
+
+<p>Critical ping response threshold in seconds. If a spamd ping response takes longer than the value specified (in seconds) the program will exit with a value of 2 to indicate the critical status.</p>
+
+<p>This value must be at least as long as the value specified for <b>warning</b> and less than the value specified for <b>timeout</b>.</p>
+
+</dd>
+<dt id="h-----help"><b>-h</b>, <b>-?</b>, <b>--help</b></dt>
+<dd>
+
+<p>Prints this usage message and exits.</p>
+
+</dd>
+<dt id="H-hostname---hostname-hostname"><b>-H</b> <i>hostname</i>, <b>--hostname</b>=<i>hostname</i></dt>
+<dd>
+
+<p>The hostname, or IP address, of the spamd service to ping. By default the hostname <b>localhost</b> is used. If <b>--socketpath</b> is set this value will be ignored.</p>
+
+</dd>
+<dt id="p-port---port-port"><b>-p</b> <i>port</i>, <b>--port</b>=<i>port</i></dt>
+<dd>
+
+<p>The port of the spamd service to ping. By default port <b>783</b> (the spamd default port number) is used. If <b>--socketpath</b> is set this value will be ignored.</p>
+
+</dd>
+<dt id="socketpath-path"><b>--socketpath</b>=<i>path</i></dt>
+<dd>
+
+<p>Connect to given UNIX domain socket. Use instead of a hostname and TCP port. When set, any hostname and TCP port specified will be ignored.</p>
+
+</dd>
+<dt id="t-secs---timeout-secs"><b>-t</b> <i>secs</i>, <b>--timeout</b>=<i>secs</i></dt>
+<dd>
+
+<p>The maximum time to wait for a ping response. Once exceeded the program will exit with a value of 2 to indicate the critical status. The default timeout value is 45 seconds. The timeout must be no less than 1 second.</p>
+
+<p>This value must be greater than the values specified for both the <b>critical</b> and <b>warning</b> values.</p>
+
+</dd>
+<dt id="v---verbose"><b>-v</b>, <b>--verbose</b></dt>
+<dd>
+
+<p>Display verbose debug output on STDOUT.</p>
+
+</dd>
+<dt id="V---version"><b>-V</b>, <b>--version</b></dt>
+<dd>
+
+<p>Display version info on STDOUT.</p>
+
+</dd>
+<dt id="w-secs---warning-secs"><b>-w</b> <i>secs</i>, <b>--warning</b>=<i>secs</i></dt>
+<dd>
+
+<p>Warning ping response threshold in seconds. If a spamd ping response takes longer than the value specified (in seconds), and does not exceed the <b>critical</b> threshold value, the program will exit with a value of 1 to indicate the warning status.</p>
+
+<p>This value must be no longer than the value specified for <b>critical</b> and less than the value specified for <b>timeout</b>.</p>
+
+</dd>
+</dl>
+
+<h1 id="EXIT-CODES">EXIT CODES</h1>
+
+<p>The program will indicate the status of the spamd process being monitored by exiting with one of these values:</p>
+
+<dl>
+
+<dt id="pod0"><code>0</code></dt>
+<dd>
+
+<p>OK: A spamd ping response was received within all threshold times.</p>
+
+</dd>
+<dt id="pod1"><code>1</code></dt>
+<dd>
+
+<p>WARNING: A spamd ping response exceeded the warning threshold but not the critical threshold.</p>
+
+</dd>
+<dt id="pod2"><code>2</code></dt>
+<dd>
+
+<p>CRITICAL: A spamd ping response exceeded either the critical threshold or the timeout value.</p>
+
+</dd>
+<dt id="pod3"><code>3</code></dt>
+<dd>
+
+<p>UNKNOWN: An error, probably caused by a missing dependency or an invalid configuration parameter being supplied, occurred in the sa-check_spamd program.</p>
+
+</dd>
+</dl>
+
+<h1 id="SEE-ALSO">SEE ALSO</h1>
+
+<p>spamc(1) spamd(1) spamassassin(1)</p>
+
+<h1 id="PREREQUISITES">PREREQUISITES</h1>
+
+<p><code>Mail::SpamAssassin</code> version 3.1.1 or higher (3.1.6 or higher recommended)</p>
+
+<h1 id="AUTHOR">AUTHOR</h1>
+
+<p>Daryl C. W. O&#39;Shea, DOS Technologies &lt;spamassassin@dostech.ca&gt;</p>
+
+<h1 id="COPYRIGHT-AND-LICENSE">COPYRIGHT AND LICENSE</h1>
+
+<p>sa-check_spamd is distributed under the Apache License, Version 2.0, as described in the file <code>LICENSE</code> included with the Apache SpamAssassin distribution and available at http://www.apache.org/licenses/LICENSE-2.0</p>
+
+<p>Copyright (C) 2015 The Apache Software Foundation</p>
+
+
+</body>
+
+</html>
+
+