CHANGELOG
v2.10 (2022/??/??)
==================
--Added subPre/Postamble convenience functions to Paranoid::Debug,
along with argument summarization
--Changed pdebug output to make it easier to match entrance/exit
points in subroutine messages
--Added file import/export functionality to Paranoid::Data::AVLTree
--Added basic internal profiling support to Paranoid::Data::AVLTree
--Modified default PATH for pSecureEnv to include sbin directories
--Added quad/long conversion functions to Paranoid::Data, along with
a boolean function to detect native quad support
--Various documentation fixes/enhancements
v2.09 (2021/12/28)
==================
--Added new export options for Paranoid::IO
--Added new flock stack mechanism to support transactional I/O patterns
--Improved open flag filtering on reopens
--pflock now performs and popen in order to make sure an flock is
properly applied to reopened file handles in children
--Improved pdebug logging for items geting passed arbitrary content
(logging bytes in content, rather that spilling complete content into the
logs)
--Added non-flocking variants of I/O functions
--Added I/O tests w/pflock stack enabled to ensure consistent behaviour
--Added Paranoid::IO::FileMultiplexer class, which allows for multiple
data stream I/O within a single file, but using normal discrete file
I/O semantics
--Fixed Paranoid::Filesystem test to account for NetBSD's noatime
implementation (utime calls for atime fail entirely)
v2.08 (2020/12/31)
==================
--Updated licensing information to reflect Paranoid trademark impact
--Added IMPORT LISTS section to all modules with exportable functions
Paranoid::Args:
--Added template list for exports
Paranoid::Data::AVLTree:
--Added a tree & node class implementing AVL-balanced tree structures
Paranoid:Debug:
--Added constants list for exports
--Documentation updates
Paranoid::Log:
--Minor internal refactoring
Paranoid::Process:
--Added pcommFork to facilitate forking with bi-directional process
communication
v2.07 (2019/02/01)
==================
Paranoid::Args:
--Consolidate error messages, removing reports for both short/long argument
versions, etc
--Correlate AccompaniedBy/ExclusiveOf errors to both long/short versions
--Automatically set Multiple/CanBundle and Template for any templates
w/CountShort
--Automatically set CanBundle for any options w/a short option and a
template of '' or '$'. The latter is done if there is also a long
name for the option
--Add templates for debug, verbose, help, and version for convenience
Paranoid::Debug:
--Modified pdebug to provide support for plog-passing of messages
--PDPREFIX subroutines are now passed the appropriate caller name during
invocation
--Added PDEBUG1 - PDEBUG8 for developer convenience
Paranoid::Filesystem:
--Fix pmkdir to treat permissions as explicit, not relative to umask
--Modified ptranslatePerms to allow it to be passed octal numbers (or string
representations of octal numbers) and have it return those values
unmodified. This makes it agnostic to translated or untranslated input.
Paranoid::Glob:
--Prune redundant / in paths
Paranoid::Input:
--Documented NEWLINE_REGEX
Paranoid::IO:
--File locking had some corner cases in which flocks weren't applied.
Removed that logic entirely, locks are now applied, regardless.
Paranoid::Log:
--Added Stdout mechanism that passes log messages to STDOUT
--Added Stderr mechanism that passes log messages to STDERR
--Added PDebug mechanism that passes log messages to pdebug, and allows
for pdebug to be used as a message preprocessor for sprintf functionality
--Added plverbosity as a convenience function to support Stdout/Stderr
messages for non-interactive applications
Paranoid::Process:
--fixed pfork to make sure the children counters were reset for the child,
so max children limits apply on a per-process basis. Doing it globally
was unreliable, especially since children only knew what the parent's
count was prior to forking.
v2.06 (2018/08/06)
==================
--Typos in documentation (Debian Perl Group)
--Fixed bug in pflock in Paranoid::Process that failed to apply the
flock as requested
--Improved pflock testing as used by Paranoid::Log::File
--Updated Paranoid::IO::Line POD to clarify the third option to many
functions which control line chomping.
--Improved Paranoid::Process to constrain SIGCHLD handling to only those
children forked specifically with/pfork(). This keeps evals and
miscellaneous system calls from skewing the counter.
--Fixed pchown tests for platforms that use negative numbers for uid/gid
v2.05 (2017/03/23)
==================
--pkmdir would fail when given paths that included . or .. subdirs,
fixed
--improved error message from pkmdir to make it obvious what specific
portion of the path failed
--fixed a bug in popen where reopening a filehandle that was stored
under its absolute name deleted the internal cache record
--fixed sigchld signal preemption so it doesn't miss children exit
codes
v2.04 (2016/09/19)
==================
--Added signal dispatcher functionality to Paranoid::Process
v2.03 (2016/08/09)
==================
--Bad plan for non-IPv6-enabled systems
v2.02 (2016/08/09)
==================
--Typos in documentation (Debial Perl Group)
--Regex improvement for IPv6 addresses (theodore@grcrun11.gr)
v2.01 (2016/06/23)
==================
--Fixed error in prm where files weren't actually deleted if there was a
previous error in $! that set ENOENT
--Fixed error in Paranoid::Filesystem where umask was improperly applied
--Fixed error in popen where mode & perms weren't detainted completely
--Adjusted log file test to account for some timing issues on some platforms
--Expanded documentation for Paranoid::Input (documenting known regexes)
v2.00 (2015/10/12)
==================
--Dropped support for Perl 5.6
--Eliminated most instances of croak/die in favor of expecting developers
to check the return value
--Complete rewrite of I/O layers and functions
--Added Paranoid::IO
--Added Paranoid::IO::Line
--Moved slurp, sip, etc., to Paranoid::IO::Line
--Rewrote slurp, sip, etc., to provide non-locking versions of functions
--Rewrote slurp, sip, etc., to leverage tuneable performance options from
Paranoid::IO
--Rewrote and moved Paranoid::Lockfile to Paranoid::IO::Lockfile
--Rewrote Paranoid::Log, Paranoid::Log::Buffer, and Paranoid::Log::File
--Renamed perror to pderror in Paranoid::Debug to avoid name conflict
with POSIX
--Added printf functionality to pdebug
--Added platform-agnostic pchomp to Paranoid::Input
--Added passed regex functionality to detaint
--Updated detaint to make target var (third argument) optional
--Updated detaint to work on arrays and hashes as well
--Improved/expanded module unit tests
--Eliminated use of prototypes except where absolutely needed
(which eliminates the need to pass by reference for many functions)
--Eliminated pglob from Paranoid::Filesystem. Globs should be handled
exclusively through Paranoid::Glob.
--Modified all Paranoid::Filesystem functions to reorder arguments in
actual order of importance, making optional arguments truly optional
--Made all Paranoid::Filesystem functions consistent in declaring
a filesystem target: you can pass either a string or a glob, but if
specifying disparate targets as a list you must pass it as a
Paranoid::Glob.
--Removed Paranoid::BerkeleyDB, Paranoid::Log::Syslog, and
Paranoid::Log::Email. Those are now in their own CPAN distributions.
--Added/improved various regexes in Paranoid::Input
--Improved Paranoid::Network's extractIPs to also extract network
addresses
--Added deepCmp to the Paranoid::Data module.
v0.36 (2012/09/24)
==================
--Documentation updates
--Added IPv4/6 sorting functions, supporting string, packed, and
integer formats
--Fixed MAXIPV6CIDR constant to 128
--Fixed bare words warnings in Perl 5.6 for IPv6 modules
v0.34 (2012/05/29)
==================
--Added Paranoid::Network::IPv4 & Paranoid::Network::IPv6 to provide
general protocol-specific functions
--Added ipv4NetConvert function to convert IPv4 IPs to native integer
format, and network ranges to base, broadcast, and netmasks in
native integer format
--Added ipv6NetConvert function to convert IPv6 IPs to 32bit integer
arrays, and network ranges to base, broadcast, and netmasks in
32bit integer arrays
--Added ipv4NetIntersect function to test whether two IPv4 IP/network
address ranges intersect
--Added ipv6NetIntersect function to test whether two IPv6 IP/network
address ranges intersect
--Reworked Paranoid::Network to make use of IPv4/IPv6 modules for
use in ipInNetwork
--Added netIntersect to Paranoid::Network, which is an IPv4/IPv6-
agnostic wrapper for the related functions in the IPv4/IPv6 modules
--Typo fixed in Paranoid::Network::Socket documentation
v0.33 (2011/12/29)
==================
--Detection of imported symbols in the local namespace wasn't working
correctly. Fixed.
v0.32 (2011/12/19)
==================
--Added new wrapper module for simpler, more portable IPv6 support and
checking (Paranoid::Network::Socket)
--Modified Paranoid::Network to use Paranoid::Network::Socket, and removed
Socket, Socket6, and Paranoid::Module dependencies
--Improved Paranoid::Module to reduce the number of detaints, requires,
and evals for high frequency calls
--Improved debug output of Paranoid::Module
v0.31 (2011/12/06)
==================
--Use of cached file handles in Paranoid::Lockfile is now fork-safe
--Use of open databases in Paranoid::BerkeleyDB is now fork-safe
--Added lock/unlock methods to Paranoid::BerkeleyDB objects for
multiple operations that need to be atomic
--Socket6 is no longer needed or looked for if on Perl 5.14 or newer
v0.30 (2011/08/17)
==================
--Added file permissions support to BerkekelyDB module
--Moved flocking of lockfile to the BerkelelyDB internals
--plock, etc., now returns exit value of flock routine in Lockfile
--Fixed optional prereqs in generated META.yml file
--Added CREDITS file (with recognition for Slaven Rezic (srezic@cpan.org))
v0.29 (2011/04/15)
==================
--Perl-5.6 compatibility fix: Socket in 5.6 doesn't export AF/PF_INET6,
so using Socket6's exclusively
--Perl-5.8 compatibility fix: Perl's parser chokes on the use of 'bare
word' imports (i.e., AF_INET), so calling them as subs.
--Optimizing regexes with code-based interpolations of constants
--Misc code adjustments
v0.28 (2011/04/12)
==================
--Updated ipInNetwork in Paranoid::Network to support IPv6 networks &
addresses
--Added new function extractIPs to Paranoid::Network which can extract IPv4/
IPv6 addresses from arbitrary text
--Minor tweaks to some regexes in Paranoid::Input
v0.27 (2010/06/03)
==================
--Added the ability to restrict level of indentation for pdebug messages in
Paranoid::Debug
--Fixed pchmod so that relative permissions applied to a symlink doesn't use
the symlink's permissions to apply, but rather the target
--Rewrote Paranoid::Log's internals
--Added '!' as a supported scope for logging facilities
--Added more severity level aliases
v0.26 (2010/05/08)
==================
--Changed daemonize's behavior: reopening STD* on /dev/null and chdir'ing
to /. Hindsight's 20/20, eh?
--Made backup/restore of SIGCHLD in pcapture dependent upon an actual
sighandler being installed
v0.25 (2010/05/05)
==================
--Fixed tail's behavior to be consistent with documentation
--Fixed tail/sip to preserve file position and buffers when
reopening the file in children
--Fixed tail functionality to handle deleted, truncated, moved, or replaced
files
--Expanded tail/sip documentation
--Added daemonize function to Paranoid::Process
v0.24 (2010/04/15)
==================
--Added Paranoid::Glob
--Major cleanup to satisfy PerlCritic and PerlTidy
--Fixed pmkdir to allow permissions that include sticky bits, etc.
--Updated filesystem functions to use Paranoid::Glob instead of pglob
--pglob is now just a wrapper around Paranoid::Glob as well
--Removed excessive external locking in Paranoid::BerkeleyDB -- hopefully
internal CDB locking mechanism is robust enough
--Made user input validation on Paranoid::Filesystem non-fatal (handing in
undefs as filenames, etc.)
--Removed MAXLINKS in Paranoid::Filesystem
v0.23 (2009/03/17)
===================
--Fixed tests that weren't fully supported on all platforms
--Commented out pchown tests which were failing to due to a bug
in Perl. A patch has been submitted to bleadperl to address it.
--Added manual detaint of TERM environment variable in psecureEnv
--Updated documentation to include Paranoid::Data
--Made getKeys in Paranoid::BerkeleyDB use finer grained locking
--Added Paranoid::Data
--Added sip, tail, and closeFile functions
--Fixed bug in preadDir that added undef records while filtering out
symlinks (bug introduced in v0.21)
v0.21 (2009/03/04)
===================
--Massive reformat with Perl::Tidy
--Massive rewrite to accommodate Perl::Critic
--Converted all tests to use Test::More
--Converted licensing to be same as Perl
--Documentation updates
--Updated to only support Perl 5.6 or better
--Fixed bug in pcapture to return appropriate return values
--Fixed bug in pchmodR/pchownR to return correct RV (false)
with non-existant targets
--Added Paranoid::Args
v0.20 (2008/04/28)
===================
--Misc. POD updates
Paranoid::Filesystem:
--Fixed bug in the recursion wrapper where there were errors in certain
modes when called on a hierarchy that included an empty subdirectory
--Fixed bug in pchmod where subtracting perms (i.e., o-w) wouldn't result
in the correct permissions
--Added automatic argument detainting for most functions
--Replaced the horrible manual kludge of pglob with an intelligent wrapper for
the shell glob
--ptouch now supports full shell globbing, even for non-existent files.
--ptouchR can now create files, but won't automatically create subdirectories
Paranoid::Input:
--Added automatic filename detainting for slurp
--Updated filename/fileglob regexes (expanded allowed characters)
Paranoid::Log & Paranoid::Module:
--Added automatic detainting of module names
Paranoid::Log::File:
--Added automatic detainting of log filenames
v0.19 (2008/04/28)
===================
--Made the croak statements more internally consistent
--Made releasing the lockfiles and db entries in BerkeleyDB more explicit
--Updated filename regex in Input
--Added study to stringMatch
--Added pcapture function to Process
v0.18 (2008/02/29)
===================
--Fixed mail headers for Email module when there are multiple recipients
--Fixed tests to account for FreeBSD's comments in /etc/passwd, /etc/group
v0.17 (2008/02/28)
===================
--Made more tests conditional to account for more types of
system configurations
--Made error checking more explicit for e-mail logging, and storing
those errors in Paranoid::ERROR
v0.16 (2008/02/27)
===================
--Fixed conditional tests
--Added new function to Paranoid::Debug (psetDebug)
v0.15 (2008/02/26)
===================
--Initial public release