.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Mail::SpamAssassin::SQLBasedAddrList 3pm" .TH Mail::SpamAssassin::SQLBasedAddrList 3pm "2022-09-10" "perl v5.34.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Mail::SpamAssassin::SQLBasedAddrList \- SpamAssassin SQL Based Auto Welcomelist .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& my $factory = Mail::SpamAssassin::SQLBasedAddrList\->new() \& $spamtest\->set_persistent_addr_list_factory ($factory); \& ... call into SpamAssassin classes... .Ve .PP SpamAssassin will call: .PP .Vb 3 \& my $addrlist = $factory\->new_checker($spamtest); \& $entry = $addrlist\->get_addr_entry ($addr, $origip); \& ... .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" A \s-1SQL\s0 based persistent address list implementation. .PP See \f(CW\*(C`Mail::SpamAssassin::PersistentAddrList\*(C'\fR for more information. .PP Uses \s-1DBI::DBD\s0 module access to your favorite database (tested with MySQL, SQLite and PostgreSQL) to store user auto-welcomelists. .PP The default table structure looks like this: \&\s-1CREATE TABLE\s0 awl ( username varchar(100) \s-1NOT NULL\s0 default '', email varchar(255) \s-1NOT NULL\s0 default '', ip varchar(40) \s-1NOT NULL\s0 default '', msgcount int(11) \s-1NOT NULL\s0 default '0', totscore float \s-1NOT NULL\s0 default '0', signedby varchar(255) \s-1NOT NULL\s0 default '', last_hit timestamp \s-1NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\s0 \s-1PRIMARY KEY\s0 (username,email,signedby,ip) ) TYPE=MyISAM; .PP Your table definition may change depending on which database driver you choose. There is a config option to override the table name. .PP This module introduces several new config variables: .PP user_awl_dsn .PP user_awl_sql_username .PP user_awl_sql_password .PP user_awl_sql_table .PP user_awl_sql_override_username .PP see \f(CW\*(C`Mail::SpamAssassin::Conf\*(C'\fR for more information. .SS "new" .IX Subsection "new" public class (Mail::SpamAssassin::SQLBasedAddrList) new () .PP Description: This method creates a new instance of the SQLBasedAddrList factory and calls the parent's (PersistentAddrList) new method. .SS "new_checker" .IX Subsection "new_checker" public instance (Mail::SpamAssassin::SQLBasedAddrList) new_checker (\e% \f(CW$main\fR) .PP Description: This method is called to setup a new checker interface and return a blessed copy of itself. Here is where we setup the \s-1SQL\s0 database connection based on the config values. .SS "get_addr_entry" .IX Subsection "get_addr_entry" public instance (\e%) get_addr_entry (String \f(CW$addr\fR, String \f(CW$signedby\fR) .PP Description: This method takes a given \f(CW$addr\fR 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 \f(CW$signedby\fR is undefined (or empty) only unsigned entries are considered. .PP A key, \f(CW\*(C`exists_p\*(C'\fR, is set to 1 if an entry already exists in the database, otherwise it is set to 0. .SS "add_score" .IX Subsection "add_score" public instance (\e%) add_score (\e% \f(CW$entry\fR, Integer \f(CW$score\fR) .PP Description: This method adds a given \f(CW$score\fR to a given \f(CW$entry\fR. If the entry was marked as not existing in the database then an entry will be inserted, otherwise a simple update will be performed. .PP \&\s-1NOTE:\s0 This code uses a self referential \s-1SQL\s0 call (ie set foo = foo + 1) which is supported by most modern database backends, but not everything calling itself a \s-1SQL\s0 database. .SS "remove_entry" .IX Subsection "remove_entry" public instance () remove_entry (\e% \f(CW$entry\fR) .PP Description: This method removes a given \f(CW$entry\fR from the database. If the ip portion of the entry address is equal to \*(L"none\*(R" then remove any perl-IP entries for this address as well. .SS "finish" .IX Subsection "finish" public instance () finish () .PP Description: This method provides the necessary cleanup for the address list. .SS "_unpack_addr" .IX Subsection "_unpack_addr" private instance (String, String) _unpack_addr(string \f(CW$addr\fR) .PP Description: This method splits an autowelcomelist address into it's two components, email and ip address.