https://issues.apache.org/SpamAssassin/show_bug.cgi?id=6518

--- Comment #2 from Mark Martinec <[email protected]> 2010-12-02 20:58:46 
UTC ---
trunk:
  Bug 6518: add POD documentation to Plugin::AskDNS
Sending lib/Mail/SpamAssassin/Plugin/AskDNS.pm
Committed revision 1041671.




=head1 NAME

AskDNS - form a DNS query using tag values, and look up the DNSxL lists

=head1 SYNOPSIS

  loadplugin  Mail::SpamAssassin::Plugin::AskDNS
  askdns DKIMDOMAIN_IN_DWL _DKIMDOMAIN_._vouch.dwl.spamhaus.org TXT /\ball\b/

=head1 DESCRIPTION

Using a DNS query template as specified in a parameter of the askdns rule,
the plugin replaces tag names as found in the template with their values as
soon as they become available, and launches DNS queries. When DNS responses
trickle in, filters them according the requested DNS resource record type
and optional subrule filtering expression, yielding a rule hit if a response
meets filtering conditions.

=head1 USER SETTINGS

=over 4

=item rbl_timeout t [t_min] [zone]              (default: 15 3)

The rbl_timeout setting is common to all DNS querying rules. It can
specify a DNS query timeout globally, or individually for each zone.
See the C<Mail::SpamAssassin::Conf> POD for details on C<rbl_timeout>.

=head1 RULE DEFINITIONS

=over 4

=item askdns NAME_OF_RULE query_template [rr_type [subqueryfilter]]

A query template is a string which will be expanded to produce a domain name
to be used in a DNS query. The template may include SpamAssassin tag names,
which will be replaced with their values to form the final query domain.
The final query domain must adhere to rules governing DNS domains, i.e. must
consist of labels each up to 63 characters long, delimited by dots. There
may be a trailing dot at the end, but it is redundant / carries no semantics,
because SpamAssassin uses a Net::DSN::Resolver::send method for querying
DNS, which ignores any 'search' or 'domain' DNS resolver options.
Domain names in DNS queries are case-insensitive.

A tag name is a string of capital letters, preceded and followed by an
underscore character. This syntax mirrors the add_header setting, except that
tags cannot have parameters in parenthesis when used in askdns templates.
Tag names may appear anywhere in the template - each queried DNS zone
prescribes how a query should be formed.

A query template may contain any number of tag names including none,
although in the most common anticipated scenario exactly one tag name would
appear in each askdns rule. Specified tag names are considered dependencies.
Askdns rules with dependencies on the same set of tags are grouped, and all
queries in a group are launched as soon as all their dependencies are met,
i.e. when the last of the awaited tag values becomes available by a call
to set_tag() from some other plugin or elsewhere in the SpamAssassin code.

Launched queries from all askdns rules are grouped too according to a pair
of: RR type and expanded query domain name. Even if there are multiple rules
producing the same type/domain pair, only one DNS query is launched, and
a reply to such query contributes to all the constituent rules.

A tag may produce none, one or multiple values. Askdns rules waiting for
a tag which never receives its value never result in a DNS query. Tags which
produce multiple values will result in multiple queries launched, each with
an expanded template using one of the tag values. An example is a DKIMDOMAIN
tag which yields a list of signing domains, one for each valid signature in
a message signed by more than one domain.

When more than one tag name appears in a template, each potentially resulting
in multiple values, a Cartesian product is formed, and each tuple results in
a launch of one DNS query (duplicates excluded). For example, a query template
_A_._B_.example.com where tag A is a list (11,22) and B is (xx,yy,zz),
will result in queries: 11.xx.example.com, 22.xx.example.com,
11.yy.example.com, 22.yy.example.com, 11.zz.example.com, 22.zz.example.com .

The parameter following the query template is a DNS resource record (RR)
type. A DNS result may bring resource records of multiple types, but only
those resource records matching the type specified in a rule are considered,
returned resource records with non-matching types are ignored for this rule.
Currently the RR type parameter also determines the DNS query types (not
just the filter for the result), although in future similar queries could
be combined, launching a query of type 'ANY'. Currently allowed RR types
are: A, AAAA, MX, TXT, PTR, NS, SOA, CNAME, HINFO, MINFO, WKS, SRV, SPF.

The last optional parameter of a rule is filtering expression, a.k.a. a
subrule. Its function is much like the subrule in URIDNSBL plugin rules
(like in the uridnssub rules), or in the check_rbl eval rules. The main
difference is that with askdns rules there is no need to manually group
rules according to their queried zone, as the grouping is automatic and
duplicate queries are implicitly eliminated.

The subrule filtering parameter can be: a plain string, a regular expression,
a single numerical value. or a pair of numerical values. Absence of the
filtering parameter implies no filtering, i.e. any positive DNS response
of the requested RR type will result in a rule hit, regardless of the RR
value returned with the response.

When a plain string is used as a filter, it must match the response exactly.
Typical use is an exact text string for TXT queries.

A regular expression follows a familiar perl syntax like /.../ or m{...}
optionally followed by regexp flags (such as 'i' for case-insensitivity).
If a DNS response matches the requested RR type and the regular expression,
the rule hits. Typical use: /^127\.0\.0\.\d+$/ or m{\bdial up\b}i .

A single numerical value can be a decimal number, or a hexadecimal number
prefixed by 0x. Such numeric filtering expression is typically used with
RR type-A DNS queries. The returned value (IP address) is masked with the
specified filtering value, and the rule hits if the result is nonzero:
(r & n) != 0 .  An example: 0x10 .

A pair of numerical values (each a decimal, hexadecimal or quad-dotted)
delimited by a '-' specifies an IP address range, and a pair of values
delimited by a '/' specifies an IP address followed by a bitmask. Again,
this type of filtering expression is primarily intended with RR type-A
DNS queries. The rule hits if the returned IP address falls within the
specified range: (r >= n1 && r <= n2), or masked with a bitmask matches
the specified value: (r & m) == (n & m) .  As a shorthand notation,
a single quad-dotted value is equivalent to a n/32 form, i.e. it must
match the returned value exactly with all its bits.

Some typical examples of a numeric filtering parameter are: 127.0.1.2,
127.0.1.20-127.0.1.39, 127.0.1.0/255.255.255.0, 0.0.0.16/0.0.0.16,
0x10/0x10, 16, 0x10 .

-- 
Configure bugmail: 
https://issues.apache.org/SpamAssassin/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

Reply via email to