Mail::SpamAssassin::Util(3pm)

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.

METHODS

untaint_var($var)
    This sub takes a scalar or a reference to an array, hash, scalar or another reference and recursively untaints all its values (and keys if it's a reference to a hash). It will return the untainted value if requested but to avoid unnecessary copying, the return value should be ignored when working on lists.

is_fqdn_valid($host)
    Check for full hostname / FQDN / DNS name validity. IP addresses must be validated with other functions like Constants::IP_ADDRESS. Does not check for valid TLD, use $self->{main}->{registryboundaries}->is_domain_valid() additionally for that. If $is_ascii given and true, skip idn_to_ascii() conversion.

is_valid_utf8($str)
    The sub returns true if the provided string of octets represents a syntactically valid UTF-8 string, otherwise a false is returned.

idn_to_ascii($domain)
    Given an international domain name with U-labels (UTF-8 or Unicode chars) converts it to ASCII-compatible encoding (ACE). If the argument is in ASCII (or is an invalid IDN), returns it lowercased but otherwise unchanged. The result is always in octets (utf8 flag off) even if the argument was in Unicode characters.

"exit_status_str($stat, $errno)"
    map process termination status number to an informative string, and append optional message (dual-valued errno or a string or a number), returning the resulting string

"proc_status_ok($exit_status, $errno, @success)"
    check errno to be 0 and a process exit status to be in the list of success status codes, returning true if both are ok, and false otherwise.

parse_rfc822_date($date)
    Parses an RFC 2822 formatted date string and returns a Unix timestamp. Takes a date to parse as input and returns a Unix timestamp (seconds since epoch) if the date can be parsed, or undef on failure.

time_to_rfc822_date($timestamp)
    Converts a Unix timestamp and returns an RFC 2822 formatted date string.

qp_decode($str)
    Decodes a string that has been encoded using the Quoted-Printable content transfer encoding.

extract_ipv4_addr_from_string($str)
    Given a string, extract an IPv4 address from it.

reverse_ip_address($ip)
    Given a quad-dotted IPv4 address or an IPv6 address, reverses the order of its bytes (IPv4) or nibbles (IPv6), joins them with dots, producing a string suitable for reverse DNS lookups. Returns undef in case of a syntactically invalid IP address.

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

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) and it filename.

    If it cannot open a file after 20 tries, it returns "undef".

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".

"compile_regexp($re, $strip_delimiters, $ignore_always_matching)"
    Compiles a regular expression pattern for efficient and safe use within SpamAssassin.