.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .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" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Mail::Milter::Module::ConnectDNSBL 3pm" .TH Mail::Milter::Module::ConnectDNSBL 3pm "2004-02-26" "perl v5.8.8" "User Contributed Perl Documentation" .SH "NAME" Mail::Milter::Module::ConnectDNSBL \- milter to accept/reject connecting hosts matching DNSBLs .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Mail::Milter::Module::ConnectDNSBL; .Ve .PP .Vb 1 \& my $milter = new Mail::Milter::Module::ConnectDNSBL(\(aqfoo.spamlist.dom\(aq); .Ve .PP .Vb 1 \& my $milter2 = &ConnectDNSBL(\(aqfoo.spamlist.dom\(aq); # convenience .Ve .PP .Vb 1 \& $milter2\->set_message(\(aqConnections from %A disallowed\(aq); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This milter module rejects any connecting host whose IPv4 address matches a given \s-1DNS\s0 Blocking List (\s-1DNSBL\s0). It can also function as a whitelisting Chain element; see \f(CW\*(C`accept_match()\*(C'\fR. .PP The check used by this module is a simple \*(L"A\*(R" record lookup, via the standard \*(L"gethostbyname\*(R" lookup mechanism. This method does not require the use of Net::DNS and is thus typically very fast. .PP (Note: If the connecting host is not using IPv4, this module will simply be a passthrough using \s-1SMFIS_CONTINUE\s0.) .SH "METHODS" .IX Header "METHODS" .IP "new(\s-1DNSBL\s0)" 4 .IX Item "new(DNSBL)" .PD 0 .IP "new(\s-1DNSBL\s0, MATCHRECORD[, ...])" 4 .IX Item "new(DNSBL, MATCHRECORD[, ...])" .IP "new(\s-1DNSBL\s0, \s-1SUBREF\s0)" 4 .IX Item "new(DNSBL, SUBREF)" .PD Creates a ConnectDNSBL object. \s-1DNSBL\s0 is the root host hierarchy to use for lookups. Three methods of matching can be used: .Sp If no additional arguments are provided, the match succeeds if there is any address entry present for the \s-1DNSBL\s0 lookup; the values are not examined. .Sp If one or more \s-1MATCHRECORD\s0 values are supplied, they are string representations of IPv4 addresses. If any of these match record values is the same as any address record returned by the \s-1DNSBL\s0 lookup, the match succeeds. .Sp If a \s-1SUBREF\s0 (reference to a subroutine; may be an anonymous inline \&\f(CW\*(C`sub{}\*(C'\fR) is supplied, it is called for each of the address records returned by the \s-1DNSBL\s0 lookup. The subroutine should return 0 or undef to indicate a failed match, and nonzero to indicate a successful match. The subroutine receives a binary-encoded four byte scalar that should be transformed as needed with \f(CW\*(C`inet_ntoa()\*(C'\fR or \f(CW\*(C`unpack\*(C'\fR. .IP "accept_match(\s-1FLAG\s0)" 4 .IX Item "accept_match(FLAG)" If \s-1FLAG\s0 is 0 (the default), a matching \s-1DNSBL\s0 will cause the connection to be rejected. .Sp If \s-1FLAG\s0 is 1, a matching \s-1DNSBL\s0 will cause this module to return \s-1SMFIS_ACCEPT\s0 instead. This allows a \f(CW\*(C`ConnectDNSBL\*(C'\fR to be used inside a \&\f(CW\*(C`Mail::Milter::Chain\*(C'\fR container (in \f(CWaccept_break(1)\fR mode), to function as a whitelist rather than a blacklist. .Sp This method returns a reference to the object itself, allowing this method call to be chained. .IP "ignore_tempfail(\s-1FLAG\s0)" 4 .IX Item "ignore_tempfail(FLAG)" If \s-1FLAG\s0 is 0 (the default), a \s-1DNSBL\s0 lookup which fails the underlying \s-1DNS\s0 query will cause the milter to return a temporary failure result (\s-1SMFIS_TEMPFAIL\s0). .Sp If \s-1FLAG\s0 is 1, a temporary \s-1DNS\s0 failure will be treated as if the lookup resulted in an empty record set (\s-1SMFIS_CONTINUE\s0). .Sp This method returns a reference to the object itself, allowing this method call to be chained. .IP "set_message(\s-1MESSAGE\s0)" 4 .IX Item "set_message(MESSAGE)" Sets the message used when rejecting connections. This string may contain the substring \f(CW%A\fR, which will be replaced by the matching IPv4 address, or \f(CW%L\fR, which will be replaced by the name of the matching \s-1DNSBL\s0. .Sp This method returns a reference to the object itself, allowing this method call to be chained. .SH "BUGS" .IX Header "BUGS" In Sendmail 8.11 and 8.12, a milter rejection at \*(L"connect\*(R" stage does not allow the reply message to be set \*(-- it simply becomes \*(L"not accepting messages\*(R". However, this module still attempts to set the reply code and message in the hope that this will be fixed. .SH "AUTHOR" .IX Header "AUTHOR" Todd Vierling, .SH "SEE ALSO" .IX Header "SEE ALSO" Mail::Milter::Object