.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" 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 .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . 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::SPF::Util 3pm" .TH Mail::SPF::Util 3pm 2024-02-09 "perl v5.38.2" "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::SPF::Util \- Mail::SPF utility class .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 1 \& use Mail::SPF::Util; \& \& $hostname = Mail::SPF::Util\->hostname; \& \& $ipv6_address_v4mapped = \& Mail::SPF::Util\->ipv4_address_to_ipv6($ipv4_address); \& \& $ipv4_address = \& Mail::SPF::Util\->ipv6_address_to_ipv4($ipv6_address_v4mapped); \& \& $is_v4mapped = \& Mail::SPF::Util\->ipv6_address_is_ipv4_mapped($ipv6_address); \& \& $ip_address_string = Mail::SPF::Util\->ip_address_to_string($ip_address); \& $reverse_name = Mail::SPF::Util\->ip_address_reverse($ip_address); \& \& $validated_domain = Mail::SPF::Util\->valid_domain_for_ip_address( \& $spf_server, $request, \& $ip_address, $domain, \& $find_best_match, # defaults to false \& $accept_any_domain # defaults to false \& ); \& \& $sanitized_string = Mail::SPF::Util\->sanitize_string($string); .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" \&\fBMail::SPF::Util\fR is Mail::SPF's utility class. .SS "Class methods" .IX Subsection "Class methods" The following class methods are provided: .IP "\fBhostname\fR: returns \fIstring\fR" 4 .IX Item "hostname: returns string" Returns the fully qualified domain name (FQDN) of the local host. .IP "\fBipv4_address_to_ipv6($ipv4_address)\fR: returns \fINetAddr::IP\fR; throws \fIMail::SPF::EInvalidOptionValue\fR" 4 .IX Item "ipv4_address_to_ipv6($ipv4_address): returns NetAddr::IP; throws Mail::SPF::EInvalidOptionValue" Converts the specified \fINetAddr::IP\fR IPv4 address into an IPv4\-mapped IPv6 address. Throws a \fIMail::SPF::EInvalidOptionValue\fR exception if the specified IP address is not an IPv4 address. .IP "\fBipv6_address_to_ipv4($ipv6_address)\fR: returns \fINetAddr::IP\fR; throws \fIMail::SPF::EInvalidOptionValue\fR" 4 .IX Item "ipv6_address_to_ipv4($ipv6_address): returns NetAddr::IP; throws Mail::SPF::EInvalidOptionValue" Converts the specified \fINetAddr::IP\fR IPv4\-mapped IPv6 address into a proper IPv4 address. Throws a \fIMail::SPF::EInvalidOptionValue\fR exception if the specified IP address is not an IPv4\-mapped IPv6 address. .IP "\fBipv6_address_is_ipv4_mapped($ipv6_address)\fR: returns \fIboolean\fR" 4 .IX Item "ipv6_address_is_ipv4_mapped($ipv6_address): returns boolean" Returns \fBtrue\fR if the specified \fINetAddr::IP\fR IPv6 address is an IPv4\-mapped address, \fBfalse\fR otherwise. .IP "\fBip_address_to_string($ip_address)\fR: returns \fIstring\fR; throws \fIMail::SPF::EInvalidOptionValue\fR" 4 .IX Item "ip_address_to_string($ip_address): returns string; throws Mail::SPF::EInvalidOptionValue" Returns the given \fINetAddr::IP\fR IPv4 or IPv6 address compactly formatted as a \&\fIstring\fR. For IPv4 addresses, this is equivalent to calling NetAddr::IP's \&\f(CW\*(C`addr\*(C'\fR method. For IPv6 addresses, this is equivalent to calling NetAddr::IP's \f(CW\*(C`short\*(C'\fR method. Throws a \&\fIMail::SPF::EInvalidOptionValue\fR exception if the specified object is not a \&\fINetAddr::IP\fR IPv4 or IPv6 address object. .IP "\fBip_address_reverse($ip_address)\fR: returns \fIstring\fR; throws \fIMail::SPF::EInvalidOptionValue\fR" 4 .IX Item "ip_address_reverse($ip_address): returns string; throws Mail::SPF::EInvalidOptionValue" Returns the \f(CW\*(C`in\-addr.arpa.\*(C'\fR/\f(CW\*(C`ip6.arpa.\*(C'\fR reverse notation of the given \&\fINetAddr::IP\fR IPv4 or IPv6 address. Throws a \fIMail::SPF::EInvalidOptionValue\fR exception if the specified object is not a \fINetAddr::IP\fR IPv4 or IPv6 address object. .ie n .IP "\fBvalid_domain_for_ip_address($server, \fR\fB$request\fR\fB, \fR\fB$ip_address\fR\fB, \fR\fB$domain\fR\fB, \fR\fB$find_best_match\fR\fB = false, \fR\fB$accept_any_domain\fR\fB = false)\fR: returns \fIstring\fR or \fBundef\fR" 4 .el .IP "\fBvalid_domain_for_ip_address($server, \fR\f(CB$request\fR\fB, \fR\f(CB$ip_address\fR\fB, \fR\f(CB$domain\fR\fB, \fR\f(CB$find_best_match\fR\fB = false, \fR\f(CB$accept_any_domain\fR\fB = false)\fR: returns \fIstring\fR or \fBundef\fR" 4 .IX Item "valid_domain_for_ip_address($server, $request, $ip_address, $domain, $find_best_match = false, $accept_any_domain = false): returns string or undef" Finds a valid domain name for the given \fINetAddr::IP\fR IP address that matches the given domain or a sub-domain thereof. A domain name is valid for the given IP address if the IP address reverse-maps to that domain name in DNS, and the domain name in turn forward-maps to the IP address. Uses the given \&\fIMail::SPF::Server\fR and \fIMail::SPF::Request\fR objects to perform DNS look-ups. Returns the validated domain name. .Sp If \f(CW$find_best_match\fR is \fBtrue\fR, the one domain name is selected that best matches the given domain name, preferring direct matches over sub-domain matches. Defaults to \fBfalse\fR. .Sp If \f(CW$accept_any_domain\fR is \fBtrue\fR, \fIany\fR domain names are considered acceptable, even if they differ completely from the given domain name (which is then effectively unused unless a best match is requested). Defaults to \&\fBfalse\fR. .IP "\fBsanitize_string($string)\fR: returns \fIstring\fR or \fBundef\fR" 4 .IX Item "sanitize_string($string): returns string or undef" Replaces all non-printable or non-ascii characters in a string with their hex-escaped representation (e.g., \f(CW\*(C`\ex00\*(C'\fR). .SH "SEE ALSO" .IX Header "SEE ALSO" Mail::SPF .PP For availability, support, and license information, see the README file included with Mail::SPF. .SH AUTHORS .IX Header "AUTHORS" Julian Mehnle , Shevek