File: Changelog.txt

Recommend this page to a friend!
  Classes of Caleb  >  CIDRAM  >  Changelog.txt  >  Download  
File: Changelog.txt
Role: Documentation
Content type: text/plain
Description: Documentation
Class: CIDRAM
Check if an IP address is a bad source of traffic
Author: By
Last change: Add an error handler event.

Changelog excerpt:

- Added an error handler event to be able to catch and report errors more
effectively.
Add an events orchestrator and refactor.
Bug-fix.

Invalid argument warning at the front-end updates page.
L10N patch.

- This commit adds *partial* internal language support for Latvian, Polish,
and Tamil (thank you to naveen17797 for the Tamil translations). Will
sync it all up with the other translations when there's time.
- Some minor miscellaneous refactoring/improvement of other L10N data.
Date: 2 years ago
Size: 79,761 bytes
 

Contents

Class file image Download
CIDRAM (Classless Inter-Domain Routing Access Manager) Changelog.

=== VERSION RELEASE GUIDELINES ===
CIDRAM adopts and adheres to SemVer (Semantic Versioning). For more information
about SemVer, please refer to:
- https://semver.org/

Detailed version release guidelines for CIDRAM can be found at:
- https://github.com/CIDRAM/CIDRAM/blob/v2/CONTRIBUTING.md#cidram-version-release-guidelines

=== Changes made since last versioned release ===

- [2019.09.04; Maikuolan]: Added *partial* internal language support for
  Latvian, Polish, and Tamil (thank you to naveen17797 for the Tamil
  translations). Will sync it all up with the other translations when there's
  time.

- [2019.09.06; Bug-fix; Maikuolan]: Found a way to trigger an invalid argument
  warning at the front-end updates page in some contexts; Fixed.

- [2019.09.17; Maikuolan]: Added an events orchestrator and refactored.

- [2019.09.18; Maikuolan]: Added an error handler event to be able to catch and
  report errors more effectively.

=== Version/Release 2.1.0 ===
MINOR RELEASE.

- [2019.08.13; Maikuolan]: Search engine and social media verification can now
  leverage the report orchestrator to report spoofing.

- [2019.08.17; Maikuolan]: CIDRAM can now honour HTTP_ACCEPT_LANGUAGE values
  specified by the client for the Access Denied page, and a new configuration
  directive, "lang_override", has been added to enable/disable it.

- [2019.08.23; Maikuolan]: Slightly refactored the front-end updates page,
  related closures and other related functionality, and added the ability to
  install/activate or to deactivate/uninstall with a single action (previously,
  these actions had to be done separately, as two actions). Added some new
  switches/filters.

- [2019.08.24; Maikuolan]: Added last modified date/time to the file listings
  at the front-end file manager and fixed a possible issue with correct icon
  display for some not yet used file formats.

Caleb M (Maikuolan),
August 31, 2019.

=== Version/Release 2.0.1 ===
PATCH RELEASE.

- [2019.06.07; Maikuolan]: The front-end IP test page is now capable of
  catching and reporting some basic types of errors caused by problematic
  auxiliary rules and modules.

- [2019.06.17; Maikuolan]: Added the ability to optionally update only all
  signature files to the front-end updates page (as opposed to updating
  everything at once).

- [2019.06.18-23; DanielRuf]: Added unit test suite (BDD testing and unit
  testing with Codeception and PHPUnit).
  Refer github.com/CIDRAM/CIDRAM/pull/130

- [2019.06.26; Maikuolan]: Improved the way that CIDRAM generates block event
  entry IDs (before they were incremental; now they're based on microtime and
  high resolution time).
  Refer github.com/CIDRAM/CIDRAM/issues/131

- [2019.06.27; Maikuolan]: Shifted responsibility for number formatting out
  from the front-end functions file, into its own, distinct class.

- [2019.06.30; Maikuolan]: Added search engine verification support for Mojeek.

- [2019.07.10; Maikuolan]: The front-end updates page now sets "verify" as the
  default option for components, to help reduce the risk that users select
  "uninstall" or "deactivate" by accident.

- [2019.07.10; Maikuolan]: Slightly improved front-end pie chart colouring.

- [2019.07.11; Maikuolan]: Added a configuration directive to control whether a
  cookie warning should be displayed alongside reCAPTCHA instances for when
  cookies are to be set ("show_cookie_warning").
  Refer github.com/CIDRAM/CIDRAM/issues/133

- [2019.07.15; Maikuolan]: Added support for resolving Teredo and ISATAP
  addresses and did some minor refactoring for the output generator and a few
  of the closures in the front-end functions file.

- [2019.07.15; Bug-fix; Maikuolan]: Search engine verification and social media
  verification were ignoring whitelist status for requests; Fixed.
  Refer github.com/CIDRAM/CIDRAM/issues/137

- [2019.07.15; Maikuolan]: Added a switch to the front-end IP test page to be
  able to optionally select whether to test against search engine and social
  media verification.

- [2019.07.21; Maikuolan]: Added some buttons to the auxiliary rules page to
  be able to move rules to the top or the bottom of the list.

- [2019.07.24-25; Maikuolan]: Performed various prepwork necessary in order to
  provide some of the functionality needed by some newly created optional
  modules. Modules and signature files can now provide their own configuration
  directives to CIDRAM. Added a report orchestrator to CIDRAM, allowing modules
  to optionally create and send reports based on the collective behaviour of
  all enabled signature files and modules as a whole.

- [2019.07.26; Maikuolan]: Added condition to ensure that "delete" should never
  be the default option selected for files shown at the front-end file manager.

Caleb M (Maikuolan),
August 1, 2019.

=== Version/Release 2.0.0 ===
MAJOR RELEASE (BACKWARDS INCOMPATIBLE).

- [2019.05.05-08; Maikuolan]: Slightly improved the log data sanitisation
  process and added a new configuration directive, "log_sanitisation", to
  allow users to modify the default log data sanitisation behaviour.

- [2019.05.08; MAJOR CODE CHANGE; Maikuolan]: Removed CIDRAM's CLI-mode and all
  related assets, configuration options, L10N data, etc. Removed PHP 5.4
  polyfills, thereby immediately upping the minimum PHP version requirement for
  the upcoming release. Updated the loader, upping the hardcoded minimum PHP
  version requirement to PHP 7.2, and removed some no longer needed code.
  Removed some extraneous .htaccess files (only really need our main .htaccess
  file in the base of the vault nowadays; the extra .htaccess files in some of
  the vault's subdirectories aren't necessary). Split the CIDRAM "component"
  into three distinct components; the "Core", the "Front-End", and the "Common
  Classes Package" (this should make future updates slightly more manageable).

- [2019.05.10-11; Maikuolan]: Slightly refactored a handful of closures, fixed
  some PHPDoc typos, and added PHP7-style type hinting and return type
  declarations wherever applicable. Updated all common classes package classes
  to the latest compatible versions.

- [2019.05.11; Bug-fix; Maikuolan]: Wrong default parameter types supplied to
  the Request closure by signature file webhook functionality, and to the
  DNS-Resolve closure by hostname lookup functionality (detected after adding
  type hinting); Fixed.

- [2019.05.17; Bug-fix; Maikuolan]: Wrong type hints specified for some of the
  closures used by the front-end updates page (for activating, deactivating,
  etc); Fixed.
  Refer github.com/CIDRAM/CIDRAM/issues/112
  Refer github.com/CIDRAM/CIDRAM/issues/113

- [2019.05.26; Maikuolan]: Renamed a number of configuration directives in
  order to better comply with the CIDRAM code style guidelines regarding the
  use of snake_case for configuration directives. Also performed some minor
  refactoring.

- [2019.05.31; NEW FEATURE; Maikuolan]: Added the ability to automatically
  switch between different channels when requesting a remote resource (e.g.,
  when the front-end updates page attempts to update something, or attempts to
  retrieve the latest available component metadata), for whenever such a
  request fails (e.g., due to server errors, the requested resource no longer
  existing at a particular location, etc), and added a new configuration
  directive, "disabled_channels", to optionally prevent CIDRAM from ever
  requesting resources from particular, specific channels.

Caleb M (Maikuolan),
June 1, 2019.

=== Version/Release 1.12.0 ===
MINOR RELEASE.

- [2019.04.02-07; NEW FEATURE; Maikuolan]: Implemented a new, unified caching
  system to the package, optionally allowing package users to choose from a
  range of different caching mechanisms supported by the new caching system,
  currently consisting of APCu, Memcached, Redis, and PDO-based caching,
  alternatively deferring back to the package's existing flatfile caching
  mechanism when no other mechanisms are otherwise chosen.

- [2019.04.09; Maikuolan]: Slightly adjusted the file reading part of the cache
  handler to account for some potential edge-case problems on some servers.

- [2019.04.17; Maikuolan]: The front-end homepage now checks and displays
  whether various extensions that can be used by CIDRAM are installed and
  available (APCu, Memcached, Redis, PDO, PCRE, cURL, etc).

- [2019.04.19; Maikuolan]: Slightly refactored the front-end updater and made
  some changes to the executor (needed for a smooth v2 transition).

- [2019.04.21; Bug-fix; Maikuolan]: Found a small bug affecting RTL users that
  could potentially cause text to align incorrectly in some cases; Fixed.

- [2019.04.21; NEW FEATURE; Maikuolan]: Rewrote and ported the signature
  validator/fixer to the front-end.

- [2019.04.28; Maikuolan]: Implemented a new class, "Demojibakefier", to give
  CIDRAM the ability to detect whether data conforms to a specific character
  encoding.

Caleb M (Maikuolan),
April 30, 2019.

=== Version/Release 1.11.1 ===
PATCH RELEASE.

- [2019.03.02; Bug-fix; Maikuolan]: The loader would sometimes fail to
  correctly distinguish between direct requests and indirect requests, an
  ability currently needed to be able to access the front-end; Fixed.

- [2019.03.03; Maikuolan]: Added search engine verification support for
  Teoma Bot (Ask Jeeves).

- [2019.03.06; Maikuolan]: Slightly improved the front-end updates page
  component verification feature. The distinction between failed integrity
  checks and failed sanity checks should be a little more obvious now.

- [2019.03.26; Maikuolan]: Added an option to the IP aggregator to preserve
  tags and comments when aggregating, and updated common classes.

- [2019.03.29; Maikuolan]: Redesigned the front-end cache data page. It should
  now be a little easier to navigate the page and to interpret its data.

Caleb M (Maikuolan),
March 31, 2019.

=== Version/Release 1.11.0 ===
MINOR RELEASE.

- [2019.02.06; Maikuolan]: Completely overhauled the way that L10N data is
  processed and handled. A new class has been written to handle all L10N data,
  and L10N data is now processed and handled in an entirely object-oriented
  way. L10N data isn't stored as PHP files anymore, to be required into the
  package. Instead, L10N data is now stored entirely as YAML files. Using YAML
  instead of PHP should theoretically be a little safer in certain, edge-case
  scenarios, and should be much easier to work with for when introducing new
  translations into the package in the future (i.e., for translators which
  aren't familiar or aren't comfortable working with PHP). This overhaul also
  serves as a small stepping stone towards a future, more object-oriented major
  version release.

- [2019.02.07; Maikuolan]: Added suggested values for ipaddr as selectable
  options to the front-end configuration page.

- [2019.02.14; Bug-fix; Maikuolan]: A mechanism on the front-end updates page
  to ensure that interdependent components updated simultaneously sometimes
  wouldn't trigger properly; Fixed.

- [2019.02.14; Maikuolan]: Added search engine verification support for
  SeznamBot and removed various signatures from modules and signature file that
  could've potentially blocked it outright.

- [2019.02.25; Maikuolan]: Reorganised the "some useful links" list on the
  front-end homepage a little (should look a little nicer now).

Caleb M (Maikuolan),
March 1, 2019.

=== Version/Release 1.10.0 ===
MINOR RELEASE.

- [2019.01.09; Maikuolan]: The IP aggregator now sorts its input differently,
  as such that IPv4 and IPv6 output isn't thoroughly mixed together anymore.
  The IP aggregator now supports netmasks, both as input and as output.

- [2019.01.17; Maikuolan]: Added the ability to disable logging for specific
  requests as a possible option to auxiliary rules.

- [2019.01.19; Maikuolan]: Updated the minimum safe PHP version fallback
  information. Slightly refactored.

- [2019.01.25; Maikuolan]: The YAML handler has been migrated away from the
  main functions file and into its own, dedicated class file (this class file
  will also be released as part of a separate package in the near future).
  Improved the UI for the front-end updates page verification feature.

- [2019.01.29; Bug-fix; Maikuolan]: For some configuration directives where
  predefined multiple choices are available, the front-end configuration page
  was ignoring custom defined values; Fixed.

Caleb M (Maikuolan),
January 30, 2019.

=== Version/Release 1.9.0 ===
MINOR RELEASE.

- [2018.11.04; Documentation; Maikuolan]: Added some missing information to the
  Composer installation instructions.

- [2018.12.10; NEW FEATURE; Maikuolan]: Added support for rate limiting to
  CIDRAM. This feature was added due to significant user interest, but isn't a
  feature I'd readily recommend using (please refer to the documentation).
  Refer github.com/CIDRAM/CIDRAM/issues/78

- [2018.12.19; Sub-minor code change; Maikuolan]: Split apart the YAML handler
  a little more (doesn't change anything functionally, but should help to
  slightly reduce complaints sometimes made by certain code quality checkers
  and such). It's also less messy now to use an integer value of zero as a key.

- [2019.01.05; Sub-minor code change; Maikuolan]: Changed the default value of
  "pseudonymise_ip_addresses" from "false" to "true" in order to strengthen
  GDPR compliance.

- [2019.01.06; Sub-minor code change; Maikuolan]: Added the ability to check
  IPs in IP tracking against auxiliary rules.

- [2019.01.07; Sub-minor code change; Maikuolan]: Improved the front-end file
  manager, making items in the components list clickable, to display further
  relevant information.

Caleb M (Maikuolan),
January 8, 2019.

=== Version/Release 1.8.0 ===
MINOR RELEASE.

- [2018.08.08; Maikuolan]: Performed some early legwork for future email
  functionality and future two-factor authentication functionality (neither
  things are prime-time ready yet though). A handful of new configuration
  directives have been added (currently marked as experimental/unstable) which
  won't do anything yet, but which are related to this future functionality.

- [2018.08.09; Sub-minor code change; Maikuolan]: Slightly improved front-end
  logging.

- [2018.08.10; Bug-fixes; Maikuolan]: Fixed a missing L10N string. Fixed a
  weakness in the fallback for fetching the IP address of inbound requests.

- [2018.08.10; NEW FEATURE; Maikuolan]: Added support for deference tags (these
  will allow users to defer specific signature sections when specific signature
  files are installed; more information available in the documentation).

- [2018.08.11-12; NEW FEATURE; Maikuolan]: Added support for two-factor
  authentication by email for when logging into the front-end! It is strongly
  recommended that all users using the front-end should use this new feature
  for improved front-end security (documentation explaining how to use this
  properly will be available in the near future).

- [2018.08.26; NEW FEATURE; Maikuolan]: Added a configuration directive which
  allows users to specify via the configuration whether to include or omit
  empty fields from logging and output display.

- [2018.08.27; Minor code change; Maikuolan]: Repurposed the front-end sections
  list page as a means for users to ignore or unignore sections with a single
  click via the front-end.

- [2018.09.12; Sub-minor code change; Maikuolan]: Replaced some real typecasts
  with float due to the anticipated deprecation of the real type for PHP 7.4.

- [2018.09.19; Sub-minor code change; Maikuolan]: Added a new safety mechanism
  for when dealing with the front-end database or CIDRAM cache file.

- [2018.09.21; Bug-fix; Maikuolan]: Webfont cleanup procedure removed wrong
  part from template files when webfonts not clearly marked; Fixed.

- [2018.09.22; Sub-minor code change; Maikuolan]: Slightly refactored all the
  HTML template files, slightly reducing indenting and improving readability.

- [2018.09.23; Sub-minor code change; Maikuolan]: Removed capitalisation from
  front-end username display (doesn't always play nice with non-ANSI data).

- [2018.09.22-25; NEW FEATURE; Maikuolan]: A new subsystem, "Auxiliary Rules",
  has been implemented into CIDRAM, which allows users to easily create new
  rules via the front-end to block, bypass, greylist, and whitelist requests
  on the basis of arbitrary data pertinent to the request (IP address, user
  agent, referrer, etc). Auxiliary rules execute after all signature files and
  modules have already finished executing, don't require any configuration, and
  utilise a simple, human-readable YAML structure (1.8.0-DEV+18267804).
  Refer github.com/CIDRAM/CIDRAM/issues/79

- [2018.09.26; Sub-minor code change; Maikuolan]: Front-end L10N slightly
  refactored (1.8.0-DEV+18268592).

Caleb M (Maikuolan),
October 6, 2018.

=== Version/Release 1.7.0 ===
MINOR RELEASE.

- [2018.06.02; Sub-minor code change; Maikuolan]: Added some additional safety
  and sanity checks to the updater. Improved the display order of logfiles
  listed on the logs page.

- [2018.06.06; Sub-minor code change; Maikuolan]: Updated the front-end
  homepage to include some links to repository backup locations.

- [2018.06.07; Bug-fix; Maikuolan]: Fixed a possible "undefined index" error
  that could occur when updating CIDRAM via Cronable.

- [2018.06.08; Bug-fix; Maikuolan]: Discovered an aesthetic bug whereby the
  logs page would stretch sometimes because of non-breaking log entries; Fixed.
  Refer github.com/CIDRAM/CIDRAM/issues/71

- [2018.06.09; Sub-minor code change; Maikuolan]: Slight refactor to allow for
  a slightly greater range of options for HTTP status codes and messages to
  send with blocked requests. "forbid_on_block" also now only accepts integers;
  boolean (true/false) values won't be accepted anymore (technically this may
  pose a backwards-compatibility problem for some pre-v1 installations, but as
  pre-v1 installations aren't on the same major version as the current latest
  version anyhow, this shouldn't necessitate bumping our major version number).

- [2018.06.10; Sub-minor code change; Maikuolan]: Added the ability to generate
  hash tables to the front-end updates page (useful mostly for when verifying
  the integrity of components or for when preparing for future updates).

- [2018.06.13; Sub-minor code change; Maikuolan]: Refactoring again.

- [2018.06.24; Signatures; Maikuolan]: Fixed some false positives via the
  default signature bypasses.

- [2018.06.24-27; Documentation; Maikuolan]: Added an entry to the FAQ
  regarding protection against DDoS attacks.

- [2018.06.28; Bug-fix; Maikuolan]: Found a small typo in one of the JavaScript
  functions on the front-end accounts page; Fixed.

- [2018.07.01; Sub-minor code change; Maikuolan]: It's now possible for users
  to specify their own sort order for when the updater activates or deactivates
  signature files and modules.

- [2018.07.04; NEW FEATURE; Maikuolan]: Added new a configuration directive,
  "social_media_verification". When enabled, and when possible, CIDRAM will
  attempt to verify requests from social media platforms, and will block any
  requests that it identifies as attempts to ghost/masquerade as those
  platforms. This is effectively the same thing as the already existing search
  engine verification feature, except that it instead focuses on social media
  platforms, thus allowing the already existing search engine verification
  feature to maintain its existing focus.

- [2018.07.04; Sub-minor code change; Maikuolan]: Added a new bypass for
  Embed.ly requests.

- [2018.07.10; Sub-minor code change; Maikuolan]: Integrated Pinterest
  verification to the CIDRAM core (the Pinterest verifier module is thus hereby
  deprecated, but will continue to function normally). Split the security
  extras module into two distinct modules (user agents associated with bots and
  nefarious activity, and then everything else). L10N data and etc updated
  accordingly. Added Grapeshot verification.

- [2018.07.14; Minor code change; Maikuolan]: Split some of the hardcoded data
  for search engine and social media verification out from the main functions
  file (functions.php) and into its own file (verification.yaml). This improves
  extensibility by eliminating the need to mess with the main functions file in
  the future event that we want to add support for other platforms to be
  verified at some point.

- [2018.07.23; Maikuolan]: Misc. small corrections and improvements to search
  engine verification + a new bypass needed for DDG + some changed IPs.

Caleb M (Maikuolan),
July 28, 2018.

=== Version/Release 1.6.0 ===
MINOR RELEASE.

- [2018.05.07-09; NEW FEATURE; Maikuolan]: Added log rotation to CIDRAM. With
  log rotation, it's possible to specify a maximum number of logfiles that
  should exist in the vault, and optionally delete or archive them when that
  limit is exceeded.

- [2018.05.09; Bug-fix; Maikuolan]: Attempting to log into the front-end via
  ports other than port 80 would fail due to the way that cookies were being
  set; Fixed.

- [2018.05.10; Bug-fix; Maikuolan]: Log rotation not properly implemented to
  the reCAPTCHA module; Fixed.

- [2018.05.14; Sub-minor code change; Maikuolan]: Logs page can now access
  GZ-compressed logfiles.

- [2018.05.16; Sub-minor code change; Maikuolan]: Changed the default value of
  the "disable_webfonts" directive from "false" to "true" (meaning they should
  now be disabled by default). Removed support for "double banning" (this was
  something used only by some very specific, custom modules anyway, none which
  are still supported anymore, and none of the standard features or functions
  included in the package used it). Slightly refactored the expressions used
  for expanding IP addresses.

- [2018.05.16; NEW FEATURES; Maikuolan]: Added support for pseudonymising IP
  addresses when logging. Added the ability to include a privacy policy link
  in the footer of the Access Denied page.

- [2018.05.17; NEW FEATURES; Maikuolan]: Added support for omitting IP
  addresses, hostnames, and/or user agents from logs.

- [2018.05.18; Minor code change; Maikuolan]: Refactored most of the procedures
  for the front-end updates page, splitting some large closures and slightly
  reducing filesize footprint. Added some new internal executor abilities for
  components metadata to the front-end updates page, allowing for theoretical
  smoother transitions when update channels change. Added an executor
  instruction to update the components metadata to reflect a recent change to
  the optional blocklists update channel.

- [2018.05.19; Sub-minor code change; Maikuolan]: "Some useful links" list
  slightly modified. Added some basic confirmation prompts to some of the
  "clear all" buttons on some front-end pages (may expand this in the future).

- [2018.05.20; Bug-fix; Maikuolan]: Bug found by mikeruss1 whereby infraction
  counts could silently escalate without any Access Denied page being produced
  if module signatures are subsequently triggered after a reCAPTCHA instance is
  successfully passed; Fixed.

- [2018.05.22; Bug-fix; Maikuolan]: Bug found by soumsps whereby reCAPTCHA logs
  weren't pseudonymising IPs correctly; Fixed.

- [2018.05.24; Documentation; Maikuolan]: Added a "legal information" section
  to the documentation to address the collection and processing of PII, and how
  it relates to users, third parties, logging, etc, including some basic
  information about GDPR/DSGVO and some related links for further information.
  Refer github.com/CIDRAM/CIDRAM/issues/66

- [Supported Versions] Because this release contains changes which may improve
  the legal compliancy of the package for some users, all previous versions of
  the package are hereby marked EoL/unsupported on the "compatibility charts".
  Refer maikuolan.github.io/Compatibility-Charts/

Caleb M (Maikuolan),
May 25, 2018.

=== Version/Release 1.5.1 ===
PATCH RELEASE.

- [2018.04.18; Sub-minor code change; Maikuolan]: Slightly refactored L10N data
  and adjusted how the updates page pulls L10N data, and "used with" hints can
  now be declared independently of "extended description" for the updates page.

- [2018.04.30; Signatures; Maikuolan]: Updated the default ignore.dat file.

- [2018.05.01; Sub-minor code change; Maikuolan]: Added a new shorthand entry,
  "Legal". Fixed some small L10N mistakes and improved some wording. Slightly
  refactored the CheckFactors closure. Clarified in L10N+docs that the
  directives and signature files related to blocking proxies also blocks VPNs.

- [2018.05.03; Sub-minor code change; Maikuolan]: Added the ability for links
  to be appended to the Access Denied page when specific CIDR signatures are
  triggered (typically invoked via YAML appended to the signature sections).

- [2018.05.04; Sub-minor code change; Maikuolan]: Added a new shorthand entry,
  "Malware" (currently just used by some IPs linked to ZeuS, but may expand in
  the future, maybe).

Caleb M (Maikuolan),
May 5, 2018.

=== Version/Release 1.5.0 ===
MINOR RELEASE.

- [2018.03.03; Minor code change; Maikuolan]: Added a new front-end page,
  "Cache Data", enabling users to review the contents of their cache.

- [2018.03.13; Signatures; Maikuolan]: BingBot search engine verification will
  no longer occur when Azure signatures are triggered (too many false positives
  and related problems had been occurring).

- [2018.03.13; Sub-minor code change; Maikuolan]: Shifted the code responsible
  for search engine verification from the outgen generator to the functions
  file, and added support for search engine verification to the IP test page.

- [2018.03.15; Minor code change; Maikuolan]: Added a new directive to enable
  users to toggle whether the package version should be included in logs and
  page output.

- [2018.03.15; Bug-fix; Maikuolan]: Discovered some specific conditions that
  could cause an "undefined index" notice to occur; Fixed.

- [2018.03.22; NEW FEATURE; Maikuolan]: Added a "Range Tables" page to the
  front-end (parses active signature files to generate basic statistical
  information about the CIDR/IP ranges that they cover).

- [2018.03.25; Bug-fix; Maikuolan]: "VersionCompare" function gave incorrect
  results when comparing against certain, specific Ubuntu builds of PHP; Fixed.

- [2018.03.31; Bug-fix; Maikuolan]: Slightly modified the "DNS-Reverse-Forward"
  closure in response to #50 ("More search engine verification woes").

- [2018.04.02; Documentation; Maikuolan]: Added an index to the FAQ.

- [2018.04.05; Sub-minor code change; Maikuolan]: Added "client information" to
  the front-end homepage (currently just lists your IP address and user agent).

- [2018.04.06; Sub-minor code change; Maikuolan]: Modified logging mechanisms
  as so that new directories will now be automatically generated when necessary
  when writing new log data.

- [2018.04.08; Documentation; Maikuolan]: Added information to the FAQ about
  possible values for "default_dns".

- [2018.04.10; Documentation; Maikuolan]: Added information to the FAQ about
  using CIDRAM with other technologies and about potential problems relating to
  CDNs and caching services.

Caleb M (Maikuolan),
Apr 10, 2018.

=== Version/Release 1.4.1 ===
PATCH RELEASE.

- [2018.02.06; Maikuolan]: The support forum for the project hosted by Spambot
  Security has effectively become inoperable and defunct due to unmitigable
  circumstances concerning its server. Accordingly, the project support forum
  is hereby deprecated, and all references to the project support forum and to
  Spambot Security have been removed from the codebase and all documentation.
  The issues page for the project at GitHub remains as the uncontested primary
  support endpoint for the project.

- [2018.02.14; Sub-minor code change; Maikuolan]: Some very subtle front-end UI
  improvements; Support for asynchronous requests added to some front-end
  pages.

- [2018.02.15; Sub-minor code change; Maikuolan]: Component update/installation
  via Cronable should fail if unit tests fail; Added code for this accordingly.

- [2018.02.20; Bug-fix; Maikuolan]: The closures for activating and
  deactivating components via the front-end updates page would fail if non-CRLF
  linebreaks were used by the configuration file (thanks to senky for reporting
  this bug); Fixed.
  Refer github.com/phpMussel/phpMussel/issues/151

- [2018.02.25; Documentation; Maikuolan]: Added a new section to the
  documentation, "KNOWN COMPATIBILITY PROBLEMS" (8).
  Refer github.com/CIDRAM/CIDRAM/issues/52

Caleb M (Maikuolan),
Feb 26, 2018.

=== Version/Release 1.4.0 ===
MINOR RELEASE.

- [2017.12.24; Sub-minor code change; Maikuolan]: Signature file extended run
  rule closures can now return exit codes to trigger greylist or whitelist
  mechanisms. Improved default signature bypasses so that CIDRAM can play more
  nicely with Bingbot (occasional false positives with requests originating
  from Azure ranges). Slightly improved logs filtering and search mechanism.

- [2017.12.26; Sub-minor code change; Maikuolan]: Root check safeguard added to
  the "DNS-Reverse" closure.

- [2017.12.27; Minor code change; Maikuolan]: Optional fallback added to
  "DNS-Reverse" closure for "gethostbyaddr" (can be toggled via a newly added
  configuration directive).

- [2017.12.30; NEW FEATURE; Maikuolan]: Added flag support to the front-end
  logs page (it should now be possible to filter log entries on the basis of
  country flags, if any were indicated by the signatures triggered for them).

- [2018.01.11; Sub-minor code change; Maikuolan]: Not technically a bug, but
  DNS lookups shouldn't be performed on localhost addresses due to the risk of
  false positives. Code modified accordingly.

- [2018.01.14; NEW FEATURE; Maikuolan]: Added a "Sections List" page to the
  front-end (lists all the sections in the signature files and counts the total
  number of sections and signatures throughout all the signature files).

- [2018.01.16; Bug-fix; Maikuolan]: Direct closure sometimes produced errors
  when running CIDRAM via Cron (e.g., via Cronable) due to SCRIPT_FILENAME
  sometimes not being defined in that context; Fixed via isset check.

- [2018.01.18; Sub-minor code change; Maikuolan]: Performed some minor
  refactoring. Added checks for origin tags to the CLI signature file validator
  and fixer. Sections list now checks whether sections have been ignored.

- [2018.01.20; Sub-minor code change; Maikuolan]: Slightly improved CLI-mode
  help information.

Caleb M (Maikuolan),
Jan 20, 2018.

=== Version/Release 1.3.0 ===
MINOR RELEASE.

- [2017.10.30; Bug-fix; Maikuolan]: Cancelled or pending CI tests sometimes
  wouldn't display correctly on the updates page; Fixed.

- [2017.11.07; Minor code change; Maikuolan]: Added a new directive,
  "force_hostname_lookup" (normally, hostname lookups occur on the basis of
  necessity; e.g., when a module requires hostname information to check against
  hostname-based signatures; this new directive allows users to force hostname
  lookups to occur for all requests). Removed hardcoded references to fields
  from the main template files in favour of having fields generated entirely by
  the output generator (thus enabling greater control over which fields are
  generated and displayed for any given instance). Empty fields are now omitted
  from block events (Access Denied page, logfiles, etc). reCAPTCHA fields are
  now omitted if reCAPTCHA is entirely disabled. A hostname field is now
  included in the fields if it isn't empty for any given instance (Access
  Denied page, logfiles, etc). Added the ability to resolve 6to4 IPv6 addresses
  to their IPv4 counterparts, and automatically check these resolved addresses
  against the signature files, alongside the original unresolved IP addresses;
  This should help to abate the risk of clients attempting to connect through
  6to4 as a means to avoid being blocked by IPv4 signatures (technically this
  shouldn't be possible to do when a network is configured correctly anyhow,
  but I've recently encountered a few requests that appeared as if they may be
  such attempts; requests on networks that should only support IPv4, but seemed
  to occasionally allow requests from non-blocked 6to4 addresses that resolved
  back to blocked IPv4 addresses).

- [2017.11.15; Bug-fix; Maikuolan]: Run commands in signature files encountered
  consequent to resolving 6to4 addresses were being ignored in some cases (such
  as in the case of the default signature bypass files); Fixed.

- [2017.11.20; Bug-fix; Maikuolan]: The IP test page wasn't checking IPs
  against modules (it was only checking against signature files); Added an
  option to the IP test page to allow users to check IPs against either just
  the signature files, or against both the signature files and modules, fixing
  the problem (thanks to Dibbyo456 for reporting this bug).
  Refer github.com/CIDRAM/CIDRAM/issues/43

- [2017.11.23; Bug-fix; Maikuolan]: Bug found by Dibbyo456 whereby the failsafe
  for ipaddr values correponding to non-existent variables would sometimes
  prevent modification of ipaddr value via the front-end configuration page,
  and would cause the default value to always be displayed, instead of the
  correctly assigned value; Fixed.
  Refer github.com/CIDRAM/CIDRAM/issues/44

- [2017.11.24; Sub-minor code change; Maikuolan]: Refactored the code for the
  reCAPTCHA module and slightly improved its UI.

- [2017.12.01; Minor code change; Maikuolan]: Added a new directive,
  "signature_limit", allowing users to specify via configuration the maximum
  number of signatures allowed to be triggered when a reCAPTCHA instance is to
  be offered. Previously, this value was hardcoded to 1 (which remains the
  default value for this new directive).
  Refer github.com/CIDRAM/CIDRAM/issues/45

- [2017.12.01; Bug-fix; Maikuolan]: PHP version warnings on the front-end
  homepage weren't always displaying correctly; Fixed.

- [2017.12.03; Documentation; Maikuolan]: Extended the "SIGNATURE FORMAT" (7)
  section of the documentation with additional subsections "BASICS (FOR
  MODULES)" (7.4), "MODULE FUNCTIONALITY" (7.5), and "MODULE VARIABLES" (7.6).
  This should be helpful for users wanting to create their own custom modules.

- [2017.12.05; Minor code change; Maikuolan]: Improved Cronable API, allowing
  updates to occur without sending external requests (uses different methods).
  Shifted a number of update closures from the front-end handler to the
  front-end functions file for slightly improved efficiency.

- [2017.12.06; Bug-fix; Maikuolan]: Fixed a CRITICAL bug introduced yesterday
  that could result in the updates page deleting files pertinent to components
  being updated, thus corrupting those components and potentially rendering
  the package inoperable.

- [2017.12.06; Sub-minor code change; Maikuolan]: Added a component file
  verification option to the updates page. Removed the hotfixes file (this
  file was intended to fix a number of older problems from previous versions of
  the package that aren't relevant anymore).

- [2017.12.12; NEW FEATURE; Maikuolan]: Added the ability to filter logfile
  entries displayed via the front-end logs page and improved the overall
  aesthetics of the logs page.

- [2017.12.17; Minor code change; Maikuolan]: Rewrote and improved the code for
  performing reverse DNS lookups.

- [2017.12.21; NEW FEATURE; Maikuolan]: Added support for invisible reCAPTCHA.

- [2017.12.22; Bug-fix; Maikuolan]: Bug fixed whereby entries in the ignore.dat
  would sometimes themselves be ignored, based on their position in the file.

- [2017.12.23; NEW FEATURE; Maikuolan]: Added the ability to tally logfile data
  to the front-end logs page.

Caleb M (Maikuolan),
23rd December 2017.

=== Version/Release 1.2.0 ===
MINOR RELEASE.

- [2017.08.26; Sub-minor code change; Maikuolan]: The front-end updates page
  now reports the number of added/removed bytes and the total time required for
  when updating/installing/uninstalling components.

- [2017.09.08; NEW FEATURE; Maikuolan]: Added support for Argon2 hashing for
  passwords and sessions (requires PHP => 7.2.0; updating from older versions
  of the package won't affect compatibility with older PHP versions, but the
  option for using Argon2 simply won't be provided for versions < 7.2.0). A
  new configuration directive ("default_algo") has been added, to allow users
  to switch between the defined PHP default password hashing algorithm, BCRYPT,
  and Argon2 (all options are still considered cryptographically secure at this
  time and remain safe to use, but adding this additional support provides
  additional choice and control to the end-user regarding encryption). Also
  rewrote the code for the front-end accounts page accordingly.

- [2017.09.17; Sub-minor code change; Maikuolan]: Reworked page filters. Added
  some new page filters to the IP tracking page to filter out unwanted data and
  better control the way that data is displayed.

- [2017.09.19; NEW FEATURE; Maikuolan]: Built and implemented an aggregator
  into the front-end for aggregating IPs and CIDRs. It can handle both IPv4 and
  IPv6, and its addition should make it much easier to cleanly update signature
  files without needing to rely on external aggregators.

- [2017.09.24; Sub-minor code change; Maikuolan]: Added internal language
  support for Bangla (20 language localisations now completed and available).

- [2017.09.25; Sub-minor code change; Maikuolan]: Added rollback capability to
  the front-end updates page for failed updates/installs (this should help to
  prevent any corruption or broken installs from occurring due to unforeseen
  problems, failed connectivity, etc). Added disk space/usage information to
  the front-end file manager. Added links to vulnerability and compatibility
  charts onto the front-end homepage.

- [2017.09.27; Minor code change; Maikuolan]: Added a pie chart to the file
  manager, allowing users to visually interpret the footprint imposed by the
  various files attributed to CIDRAM and its components (requires installing
  Chart.js via the front-end updates page). Also did some general refactoring
  of the front-end code.

- [2017.09.27; Bug-fix; Maikuolan]: See issue #39 (update bug preventing some
  specific components from updating at all).

- [2017.09.29; Sub-minor code change; Maikuolan]: Added internal language
  support for Norwegian (21 language localisations now completed and
  available).

- [2017.10.02; Sub-minor code change; Maikuolan]: Slightly improved the way
  that the front-end logs page behaves.

- [2017.10.03; NEW FEATURE; Maikuolan]: Added a new page to the front-end for
  viewing CIDRAM usage statistics, and a corresponding configuration directive
  to enable/disable tracking CIDRAM usage statistics.

- [2017.10.07; Sub-minor code change; Maikuolan]: Added a simple metadata
  cleanup routine to the front-end updates page.

- [2017.10.08; Sub-minor code change; Maikuolan]: Refactored code.

- [2017.10.09; Sub-minor code change; Maikuolan]: Added the ability to fetch
  component names and extended descriptions from the L10N data.

- [2017.10.14; Sub-minor code change; Maikuolan]: Added internal language
  support for Swedish (22 language localisations now completed and available).

- [2017.10.15; Sub-minor code change; Maikuolan]: Improved L10N pluralisation.

- [2017.10.26; Sub-minor code change; Maikuolan]: Added CI reports/tests to the
  front-end updates page. Split the functions file into two distinct files (one
  containing closures specifically intended for the front-end, and one for
  everything else; this should increase code maintainability and make things
  less confusing for future contributors).

- [2017.10.27; Sub-minor code change; Maikuolan]: Removed old PHP < 5.4.0 array
  syntax in favour of newer, short array syntax.

- [2017.10.28; Sub-minor code change; Maikuolan]: Added cookie notice to the
  front-end login page. Made the categories on the front-end configuration page
  collapsable/expandable (this should help to make the page look less cluttered
  and easier to navigate).

- [2017.10.28; Bug-fix; Maikuolan]: Bug found preventing the activation or
  deactivation of components via the front-end updates page for multi-domain
  installations when certain specific conditions were met; Fixed.

- [2017.10.29; NEW FEATURE; Maikuolan]: Added an API for Cronable, allowing
  CIDRAM to be updated automatically via cron.

Caleb M (Maikuolan),
29th October 2017.

=== Version/Release 1.1.0 ===
MINOR RELEASE.

- [2017.07.29; NEW FEATURES; Maikuolan]: Added the ability to execute closures
  and specific commands when specific conditions are met when using the
  front-end updates page (installing, uninstalling components, etc). Added a
  configuration directive to modify the font magnification for the front-end
  and the Access Denied page. Added information to the front-end homepage about
  latest stable, unstable, and branch versions for CIDRAM and PHP.

- [2017.07.30; Minor code change; Maikuolan]: Added a configuration directive
  for specifying the preferred way to localise numbers when displaying numeric
  information via the front-end and any other relevant means. Number L10N is
  now independent of language choice, and has also been improved upon somewhat.

- [2017.08.14; Sub-minor code change; Maikuolan]: CheckFactors closure slightly
  modified in order to reduce read/write operations when reading signature
  files and to slightly improve the loading speed for the front-end IP Tracking
  and IP Test pages.

- [2017.08.15; NEW FEATURE; Maikuolan]: Added a new directive for specifying
  how email addresses should be displayed to users ("emailaddr_display_style").

- [2017.08.16; Sub-minor code change; Maikuolan]: Front-end updates page
  components false positives risk label now determined by a new, separate entry
  in the YAML files, which should make it easier in the future to create new
  components due to not needing to translate these entries in the extended
  description anymore, and should help to reduce the size of these files.

- [2017.08.17; Minor code change; Maikuolan]: Added a configuration directive
  for temporarily disabling everything except the front-end
  ("maintenance_mode"). Might be useful in some situations when updating CMS,
  frameworks, forum systems, etc.

Caleb M (Maikuolan),
20th August 2017.

=== Version/Release 1.0.1 ===
PATCH RELEASE.

- [2017.06.03]: Repository migrated from "Maikuolan/CIDRAM" to "CIDRAM/CIDRAM".
  All files, documentation, etc, updated accordingly. No disruptions are
  anticipated as a result of this migration, but if you encounter any, please
  let us know.

- [2017.06.22; Sub-minor code change; Maikuolan]: Slightly improved L10N
  support (rendering numbers correctly, some punctuation fixes, etc).

- [2017.07.23; Sub-minor code change; Maikuolan]: The front-end homepage now
  warns users if they're using a PHP version with known severe vulnerabilities
  and exploits ("severe", in this context, defined as vulnerabilities and
  exploits with a CVSS >= 9.0) and/or a PHP version that isn't actively
  supported anymore (as determined by the php.net Supported Versions page). The
  associated code for this is hardcoded manually, and therefore only updates
  when the package updates (meaning that lack of warning should not necessarily
  be perceived as a lack of vulnerabilities/exploits nor as an indication of
  continued active support).

Caleb M (Maikuolan),
27th July 2017.

=== Version/Release 1.0.0 ===
MAJOR RELEASE (BACKWARDS COMPATIBLE).

- [2017.04.10; Sub-minor code change; Maikuolan]: Added internal language
  support for Thai (17 language localisations now completed and available).

- [2017.04.11; Minor code change; Maikuolan]: Added a new directive,
  "timeFormat", to specify the date/time notation format used by CIDRAM.

- [2017.04.12; Sub-minor code change; Maikuolan]: Temporarily removed donate
  buttons from all project files (possibly may reinstate at a later date).
  Made some subtle aesthetic improvements to the front-end.

- [2017.04.12; Documentation; Furqan Akbar]: Completed translation for the
  CIDRAM README documentation into Urdu. This totals 16 different language
  versions of the README documentation now available.

- [2017.04.21; Sub-minor code change; Maikuolan]: Improved support for
  fractions/floats/reals/decimals/etc for configuration directives. Added some
  basic system information to the front-end homepage, to help with debugging.

- [2017.04.22; NEW FEATURE; Maikuolan]: Added the ability to truncate logfiles
  after they reached a certain size, specified by the newly added "truncate"
  directive.

- [2017.04.22; Bug-fix; Maikuolan]: Fixed a bug whereby version information for
  certain PHP release candidates would be compared incorrectly when using the
  front-end updates page (only affects a small number of users).

- [2017.04.23; Sub-minor code change; Maikuolan]: Added "previewers" to the
  front-end configuration page in order to make it easier for users to handle
  configuration directives that deal with time and byte measurements.

- [2017.04.24; NEW FEATURE; Maikuolan]: Added a new configuration directive
  allowing users to override the default timezone set by PHP. Changed the way
  that configuration directives dealing with byte measurements are handled as
  such that the unit now may be specified alongside the directive value (i.e.,
  byte measurements are no longer locked to predefined units); These byte
  measurements will default to kilobytes when no unit has been specified.

- [2017.04.27; NEW FEATURE; Maikuolan]: Added the ability to optionally
  override configuration directive values on the basis of HTTP_HOST. This
  should be useful for users running multi-domains installations as a way of
  enforcing different values for different configuration directives for
  different domains and sub-domains when necessary.
  Refer github.com/CIDRAM/CIDRAM/issues/15

- [2017.04.28; Sub-minor code change; Tolga Koy?ld?r]: Added internal language
  support for Turkish (18 language localisations now completed and available).

- [2017.04.29; Minor code change; Maikuolan]: Added filtering to the
  configuration defaults, in order to allow the front-end configuration page to
  omit any problematic value choices (for example; attempting to switch to a
  new default language after having deleted its associated language files).

- [2017.05.01; Sub-minor code change; Maikuolan]: Subtle improvements for
  mobile display ("responsiveness").

- [2017.05.04; Sub-minor code change; Maikuolan]: Added internal language
  support for Hindi (19 language localisations now completed and available).

- [2017.05.11; Sub-minor code change; Maikuolan]: Added a simple formatter for
  displaying log data via the front-end logs page.

- [2017.05.19; NEW FEATURE; Maikuolan]: Added full support for custom themes!
  This expands upon the theme support already previously provided which allowed
  users to specify custom CSS files to use for the "Access Denied" page, by way
  of adding full support for custom themes which will now also apply to the
  front-end, allowing a richer level of customisation, and can be installed via
  the front-end updates page.

- [2017.05.24; Sub-minor code change; Maikuolan]: Slightly improved caching for
  front-end assets (CSS files, images, etc).

- [2017.05.27; Minor code change; Maikuolan]: Added the ability to the
  front-end updates page to update all components at once, with a single click.

Caleb M / Maikuolan,
31st May 2017.

=== Version/Release 0.9.0 ===
MINOR RELEASE.

- [2017.03.01; Bug-fix; Maikuolan]: Fixed a bug whereby a negative signature
  count could result in a block event occurring (this shouldn't happen); Fixed.

- [2017.03.03; Minor code change; Maikuolan]: Added a directive to optionally
  enable/disable search engine verification.

- [2017.03.05; NEW FEATURE; Maikuolan]: Signature files and modules can now be
  activated/deactivated directly from the front-end updates page.

- [2017.03.08; Documentation; Maikuolan]: New additions to the FAQ.

- [2017.03.26; Sub-minor code change; Maikuolan]: Implemented some of Google's
  webfonts and slightly increased the text size for both the front-end and the
  default template file; This should significantly improve text readability for
  CIDRAM (previously, in some situations, it was very difficult to properly
  read on-screen text produced by CIDRAM). Also implemented some other very
  small design tweaks in order to improve text readability.

- [2017.03.27; Minor code change; Maikuolan]: Added a directive to optionally
  enable/disable webfonts.

- [2017.03.28; Bug-fix; Maikuolan]: Bug introduced 2017.03.05; Fixed.

- [2017.03.30; Sub-minor code change; Maikuolan]: Some small, aesthetic
  improvements done to the front-end.

- [2017.04.04; Sub-minor code change; Furqan Akbar]: Added internal language
  support for Urdu (16 language localisations now completed and available).

- [2017.04.04; Sub-minor code change; Maikuolan]: Slightly improved support for
  switching between RTL/LTR.

Caleb M / Maikuolan,
7th April 2017.

=== Version/Release 0.8.0 ===
MINOR RELEASE.

- [2017.02.06; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into Arabic (fuzzy and poor quality though). This totals
  14 different language versions of the README documentation now available.

- [2017.02.06; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into Korean (fuzzy). This totals 15 different language
  versions of the README documentation now available.

- [2017.02.07; Sub-minor code change; Maikuolan]: Slightly improved template
  files; Replaced all existing doctype declarations with the doctype
  declaration recommended for HTML5, and slightly improved HTML5 compliance.
  Added an extra safeguard against bad IPv6 factoring.

- [2017.02.11; Sub-minor code change; Maikuolan]: Improved future compatibility
  with PHP >= 8 ("each" function has been identified as targetted for
  deprecation as of PHP 7.2.0).
  Refer wiki.php.net/rfc/deprecations_php_7_2

- [2017.02.12-13; Sub-minor code change; Maikuolan]: Some subtle refactoring.

- [2017.02.17; Bug-fix; Maikuolan]: Whitelisting IPs/CIDRs via IPv4/IPv6
  signature files wasn't resulting in those IPs/CIDRs being whitelisted against
  being blocked by module files; Fixed.

- [2017.02.17; Sub-minor code change; Maikuolan]: Slightly relaxed some of the
  restrictions enforced for which filenames can be worked with via the
  front-end. Added a "hotfix" to automatically detect and update the plugin
  version cited in the plugins dashboard for when CIDRAM is running as a
  WordPress plugin.

- [2017.02.19; Documentation; Maikuolan]: Front-end documentation added.

- [2017.02.20; NEW FEATURE; Maikuolan]: Added a new page to the front-end to
  allow users to check and revoke bans via IP tracking.

- [2017.02.21; NEW FEATURE; Maikuolan]: Added the ability to attach webhooks to
  signatures and signature sections.

- [2017.02.21; Bug-fix; Maikuolan]: Fixed a bug whereby extended expiry dates
  for bans via IP tracking could be reduced to the default tracktime under some
  circumstances.

- [2017.02.21; Sub-minor code change; Maikuolan]: Added a safeguard to the
  DNS-Reverse-IPv4 closure to accommodate for allow_url_fopen or fsockopen
  being disabled by the PHP configuration.

- [2017.02.24; Bug-fix; Maikuolan]: Fixed a bug whereby the front-end login
  logger would sometimes overwrite instead of appending to the front-end logs.

- [2017.02.28; Sub-minor code change; Maikuolan]: Small additional safeguard
  added to the hostname lookup closure function.

Caleb M / Maikuolan,
28th February 2017.

=== Version/Release 0.7.0 ===
MINOR RELEASE.

- [2016.12.15; Bug-fix; Maikuolan]: Files containing underscores weren't
  deleting when uninstalling components; Fixed.

- [2016.12.20; NEW FEATURE; Maikuolan]: Added support for simple CSV signature
  files (integrated directly into the already existing functionality for
  processing signature files; CIDRAM should be able to automatically detect
  whether a signature file uses the normal, default format, or CSV format).
  Additionally, added support for using single IPs in signature files directly,
  without the need for them to use complete CIDR notation (IPs that don't
  include a range will be interpreted seamlessly as 32's for in the case of
  IPv4 signature files and as 128's for in the case of IPv6 signature files).

- [2016.12.31; NEW FEATURE; Maikuolan]: Added support for optionally including
  additional modules into CIDRAM to run after checking IPv4/IPv6 signatures.

- [2017.01.02; Minor code change; Maikuolan]: Added the ability to track and to
  temporarily ban IP addresses blocked by modules.

- [2017.01.05; Bug-fix; Maikuolan]: Fixed a bug related to the dislay of
  reCAPTCHA instances which could arise in some specific situations when some
  specific configurations are used in combination with specially marked
  sections.

- [2017.01.05; Minor code change; Maikuolan]: Added a new directive to control
  the maximum number of infractions an IP is allowed to incur before it is
  banned by IP tracking ("infraction_limit"). Improved the readability of the
  front-end configuration page by including directive names alongside their
  descriptions and formatting accordingly. Rewrote the "Direct" closure in the
  loader (nothing was broken, changed functionality, and patching not required;
  just changed due to that a code quality checking tool I sometimes use was
  complaining about the way it was written before).

- [2017.01.10; Minor code change; Maikuolan]: Added several new directives:
  "ban_override", which allows overriding the value for "forbid_on_block" when
  requests from banned IPs are blocked, and allows skipping processing for the
  template files when processing blocked requests from banned IPs;
  "log_banned_ips", which allows specifying whether to include blocked requests
  from banned IPs in the logfiles; and "track_mode", which allows specifying
  whether to only track IPs blocked by modules, or to track IPs blocked for any
  reasons (eg, via the standard signature files as well as via the modules).

- [2017.01.12; NEW FEATURE; Maikuolan]: Added the ability to distinguish
  between bots masquerading as popular search engines (eg, Googlebot, Bingbot,
  Yahoo! Slurp) and their real, legitimate counterparts. From herein, these
  fake search engine bots will be blocked by default upon detection, whereas
  their legitimate counterparts will have IP tracking disabled by default upon
  detection, therefore rendering them unbannable. Added the ability to perform
  timed DNS lookups, both forward and reverse, along with the ability to cache
  the results of these lookups. Added a new directive: "default_dns".

- [2017.01.15; Bug-fixes; Maikuolan]: Bug found whereby false positives against
  search engines could occasionally be generated as a result of failed and
  incorrect DNS lookups (possible since the 2017.01.12 update); Code therefore
  modified as such to prevent this from occurring; Timeout limit increased and
  timed out lookups now result in no action being taken. Bug found whereby
  logging banned IPs which had exceeded the infraction limit could result in no
  log entry ID being parsed into log entries; Fixed.

- [2017.01.23; Sub-minor code change; Maikuolan]: "default_dns" can now be a
  comma delimited list, allowing fallback servers to be used for DNS lookups.

- [2017.01.24; Signatures; Maikuolan]: Further split the signature files, to
  keep signatures for cloud services, signatures for dangerous and spammy ISPs,
  and other signatures separate from each other, and to further improve
  modularisation.

- [2017.01.25; Sub-minor code change; Maikuolan]: Improved component ordering
  mechanism for the updates page.

- [2017.01.26; NEW FEATURE; Maikuolan]: Added a CIDR calculator to the
  front-end.

- [2017.01.27; Bug-fix; Maikuolan]: When used, "ban_override" would trigger any
  time any block occurred, instead of only when the infraction limit had been
  exceeded; Fixed.

- [2017.01.29; Bug-fix; Maikuolan]: Some versions of the DAT files used by the
  front-end updater for updating various components, signature files, modules,
  blocklists, etc, would sometimes glitch out and save several dozen duplicates
  of the same component entries when newly released components were detected as
  available for download, when those DAT files contained terminating markers at
  unexpected points in the file, when they contained too many terminating
  markers, and/or when they contained inappropriate formatting; Fixed.

- [2017.01.30; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into Japanese (fuzzy). This totals 13 different language
  versions of the README documentation now available.

- [2017.01.31; Minor code change; Maikuolan]: Added a new directive to control
  whether the protections normally provided by CIDRAM are applied to the
  front-end ("protect_frontend"). Possibly useful in cases where users may be
  at risk of blocking themselves due to experimenting with new signatures, new
  modules, etc.

Caleb M / Maikuolan,
1st February 2017.

=== Version/Release 0.6.1 ===
PATCH RELEASE.

- [2016.11.29; Bug-fix; Maikuolan]: Some notices occasionally generated to the
  error logs by undefined indexes when accessing the updater; Fixed.

- [2016.12.02; Sub-minor code change; Maikuolan]: Added some polyfills to
  extend compatibility with CIDRAM to PHP 5.4.x (the newly introduced front-end
  feature for CIDRAM makes use of the password_hash and password_verify
  functions, of which are only available natively to PHP versions 5.5.0 and
  above).

- [2016.12.03; Sub-minor code change; Maikuolan]: Improved mechanism for making
  determinations between requests via direct access and requests via hooks.

- [2016.12.05; Bug-fixes; Maikuolan]: Bug found whereby incorrect filenames
  would sometimes be reported by the updater for the optional country-wide
  blocklists; Fixed. Bug found whereby the active/inactive status for signature
  files would sometimes be incorrectly reported by the updater; Fixed.

- [2016.12.06; Bug-fixes; Maikuolan]: Bug found whereby the install option
  would sometimes not be displayed for some components; Fixed. Bug found
  whereby cells would sometimes be incorrectly rendered for newly discovered
  components; Fixed.

- [2016.12.08; Sub-minor code change; Maikuolan]: Improved mechanism for
  accessing logfiles via the front-end.

- [2016.12.11; Sub-minor code change; Maikuolan]: Removed "matchElement" (never
  used; redundant; better to use "in_array" instead anyway). Improved some of
  the docBlock comments. Did some subtle refactoring. Slightly tweaked some of
  the front-end aesthetics.

- [2016.12.12; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into German (fuzzy and quite likely erroneous, though).
  This totals 12 different language versions of the README documentation now
  available.

Caleb M / Maikuolan,
12th December 2016.

=== Version/Release 0.6.0 ===
MINOR RELEASE.

- [2016.10.18; Minor code change; Maikuolan]: Created a "configuration handler"
  file so as to move everything away from the loader (this'll be important for
  being able to self-update in the future). Slightly improved the YAML closure.
  Fallbacks no longer hardcoded with PHP at the time of loading the
  configuration file; Fallbacks now determined via a separate configuration
  defaults file written using YAML.

- [2016.11.03; Signatures; Maikuolan]: Split signature files, to keep the bogon
  signatures to their own separate signature files (this may help to improve
  performance for any users that don't want to block bogons).

- [2016.11.05; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into Russian (fuzzy and quite likely erroneous, though).
  This totals 11 different language versions of the README documentation now
  available.

- [2016.11.28; NEW FEATURE; Maikuolan]: Finished building the CIDRAM front-end!
  Using the CIDRAM front-end, you can update CIDRAM directly from your browser,
  install and update components and custom signature files, including the
  optional country-wide blocklists provided by MacMathan, language packs and
  more; You can modify core CIDRAM files, upload new files to your vault, view
  and download logfiles, and via the accounts page, selectively grant access to
  others either to administrate CIDRAM on your behalf, or to a more limited
  degree, to access the CIDRAM logfiles directly from the browser; You can test
  batches of IP addresses directly from your browser, to confirm whether
  they're blocked by whichever signature files you have installed at any given
  time; And you can update the CIDRAM configuration directly from your browser,
  too. Front-end access is disabled by default for security reasons, but you
  can enable it via the relevant newly created configuration directives
  pertaining to it.

Caleb M / Maikuolan,
28th November 2016.

=== Version/Release 0.5.1 ===
PATCH RELEASE.

No notable changes to the CIDRAM codebase have been made since the previously
released version. This patch release exists due to numerous significant changes
that've been made to the signature files of CIDRAM since the previously
released version. Updating the working code of CIDRAM from the previously
released version to this version release is not necessary, but updating all
signature files is strongly recommended.

In addition, it is strongly recommended for users updating to this release from
the previous release, to carefully review the changes made to the "ignore.dat"
file prior to doing so; There are some new instructions included in the
"ignore.dat" as of this release which correspond mostly to some new signature
sections introduced into the signature files as of this release, which may or
may not be desired by users, depending on the needs of and the demographics
targeted by the user (updating the signature files, and/or updating to this
release from the previous release, without first reviewing the changes made to
the "ignore.dat" file, may potentially risk an increase in the number of false
positives encountered by the user).

Caleb M / Maikuolan,
1st October 2016.

=== Version/Release 0.5.0 ===
MINOR RELEASE.

- [2016.08.11; Sub-minor code change; Maikuolan]: Revisited the changes made as
  of the previous versioned release (0.4.1) regarding the slightly improved RTL
  text support (there were some rendering problems for some languages caused by
  the approach taken; this has been corrected).

- [2016.08.11; Non-core change (Wordpress plugin); Maikuolan]: Added code to
  ensure that CIDRAM will be loaded before any other plugins in order to help
  avoid conflicts associated with caching plugins and other caching systems
  which could sometimes prevent requests from being blocked.

- [2016.08.14; NEW FEATURE; Maikuolan]: Added reCAPTCHA support to CIDRAM! It's
  now (optionally) possible to allow users to bypass the normal "Access Denied"
  page by submitting a reCAPTCHA form. This should help mitigate some of the
  risks associated with blocking any CIDRs that may potentially carry human
  users/traffic. Due to some of the functionality required by this feature, the
  minimum version of PHP required in order to execute CIDRAM has been raised
  from "5.3.0" to "5.5.0" (that said though, "5.5.0" itself reached official
  "End of Life" status 24 days ago, so it would extremely advisable for users
  to not be using any versions of PHP older than that version anyhow).
  Additionally, this feature has resulted in the creation of some new
  configuration directives and some new files added to the vault (but the
  changes are entirely backwards-compatible).

- [2016.08.17; Minor code change; Maikuolan]: Improved SoC for the reCAPTCHA
  feature (split into its own file and improved modularisation); Added code to
  allow certain specific HTML tags within the block information (requested by
  some users; these would've previously been broken by the anti-XSS
  sanitisation); Added some additional configuration options for the reCAPTCHA
  feature.

- [2016.08.18; Sub-minor code change; Maikuolan]: Adjusted auto-typecasting
  closure (change required to accommodate some of the newer configuration
  directives); Salts made to be optional; Some subtle refactoring; Added
  support for user-free bypasses.

Caleb M / Maikuolan,
24th August 2016.

=== Version/Release 0.4.1 ===
PATCH RELEASE.

- [2016.08.03; Sub-minor code change; Maikuolan]: Added internal language
  support for Korean (15 language options now supported in total, not including
  CLI-mode support; Done with machine assistance, I'm not fluent, and it hasn't
  yet been audited, so, the new translation should be regarded as fuzzy).

- [2016.08.06; Sub-minor code change; Maikuolan]: Slightly improved RTL text
  support; Adjusted the template file to compensate for display problems
  associated LTR/RTL mixed content.

- [2016.08.06; Documentation; Maikuolan]: More work done on the documentation
  translations; Slightly closer to completing the translations for all targeted
  languages.

- [2016.08.06; Non-core change (Wordpress plugin); Maikuolan]: Opted to remove
  action hook call and instead load everything immediately, as to avoid
  conflicts associated with caching plugins and other caching systems which
  could sometimes prevent requests from being blocked.

- [2016.08.07; Sub-minor code change; Maikuolan]: Slightly improved/optimised
  the template file.

Caleb M / Maikuolan,
7th August 2016.

=== Version/Release 0.4.0 ===
MINOR RELEASE.

- [2016.07.22; Sub-minor code change; Maikuolan]: Added code to perform some
  simple sanitisation to the block information; This should help to prevent
  some obscure types of XSS attacks.

- [2016.07.23; Minor code change; Maikuolan]: Added internal language support
  for Japanese (14 language options now supported in total, not including
  CLI-mode support; I'm not fluent and it hasn't yet been audited, so, the new
  translation should be regarded as fuzzy). Added a new function: "Greylist";
  This can be used in the same way that whitelisting is used, but for escaping
  a CIDR from a single file, rather than from all files. Slightly improved the
  signature validator/fixer (can now detect broken/invalid ranges).

- [2016.07.26; NEW FEATURE; Maikuolan]: Added some basic support for YAML-like
  data (note: not a true YAML implementation) to be read from signature files,
  which can used to specify and modify the values of configuration directives
  for separate signature sections.
  Refer github.com/CIDRAM/CIDRAM/issues/6

- [2016.07.30; Bug-fix; Maikuolan]: Fixed a bug whereby some configuration
  directives (in particular, "forbid_on_block") would sometimes be incorrectly
  typecasted, resulting in unexpected behaviour contrary to the documentation.

Caleb M / Maikuolan,
31st July 2016.

=== Version/Release 0.3.1 ===
PATCH RELEASE.

- [2016.06.18; Bug-fix; Maikuolan]: A bug was found by joe38 whereby some of
  the provider-specific bypasses included in the default CIDRAM signatures
  would trigger an error instead of the expected CIDRAM Access Denied message,
  and additionally, some bypasses weren't written with the considerations
  appropriate to the execution context required from which they were executing;
  Fixed.

- [2016.07.04; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into Vietnamese. This totals 10 different language
  versions of the README documentation now available.

Caleb M / Maikuolan,
9th July 2016.

=== Version/Release 0.3.0 ===
MINOR RELEASE.

- [2016.04.25; Minor code change; Maikuolan]: Signature files can now be
  specified via the configuration file (and so, modifying core script files in
  order to add additional custom signature files is no longer required).

- [2016.04.27; Sub-minor code change; Maikuolan]: An additional custom rules
  file added for additional bypasses.

- [2016.05.12; Sub-minor code change; Maikuolan]: Added internal language
  support for Vietnamese (now supported: English, Spanish, French, Indonesian,
  Italian, Dutch, Portuguese, Vietnamese, Chinese [simplified and
  traditional]; 10 language options now supported in total).

- [2016.05.13; Sub-minor code change; Maikuolan]: Added internal language
  support for German (11 language options now supported in total).

- [2016.05.13; Sub-minor code change; Maikuolan/m7mdtiger]: Added internal
  language support for Arabic (12 language options now supported in total).

- [2016.05.26; Minor code change; Maikuolan]: Added a new i18n shorthand value
  for "Deny": "Proxy" (for blocking private and anonymous proxies).

- [2016.05.27; Minor code change; Maikuolan]: Added the ability to use dated
  logfiles! Now, some simple variables ({dd}, {mm}, {yyyy}/{yy}, {hh}) can be
  included when specifying the names to use for logfiles in order to organise
  logfiles by date/time. Added a new directive ("timeOffset") to account for
  the possibility of discrepancies between servers and the local time of those
  using CIDRAM.

- [2016.06.13; Minor code change; Maikuolan]: Added the ability to ignore
  signature sections by identifying their section tags to an ignore file.
  Refactored a number of closures to reduce code duplication and to improve the
  their process logic; Some old closures renamed and split into multiple new
  closures. Added internal language support for Russian (13 language options
  now supported in total, not including CLI-mode support).

Caleb M / Maikuolan,
14th June 2016.

=== Version/Release 0.2.0 ===
MINOR RELEASE.

- [2016.03.15; Signatures; Maikuolan]: Added Microsoft Azure CIDRs to the IPv4
  signatures file; Updating several sections; Changed the "example" CIDRs in
  the IPv4 custom signatures file to reduce ambiguity (because the previous
  examples used CIDRs that wouldn't normally be triggered; fixed).

- [2016.03.17; Signatures; Maikuolan]: Removed all references to HostExploit
  and SiteVet from CIDRAM. These two services appear to have not been updated
  in over a year and a half, and emails I've sent to them to ask whether their
  services are actively maintained and/or up-to-date seem to have been ignored,
  as I've not received any replies from them for any of the emails I'd sent. I
  don't think we should rely on outdated information. I've opted, instead, to
  include references to and information about the Google Malware Dashboard,
  which appears to be being updated on a daily basis, have a greater depth of
  information available and appears to be more reliable, so far. I've already
  added some new sections for new ASNs to block based upon the information they
  have available, and may possibly remove and/or modify some old sections in
  the future based on the information they have available.

- [2016.03.18; Minor code change; Maikuolan]: Renamed all "INC" files to "PHP"
  files and changed all references to them accordingly.
  Refer github.com/CIDRAM/CIDRAM/issues/3

- [2016.03.19; Sub-minor code change; Maikuolan]: Changed the default value of
  the "block_bogons" directive from true to false. Added a new directive,
  "disable_cli", to optionally disable the CLI mode implementation for CIDRAM.
  Added a fallback to help deal with situations where multiple IP address
  server variables may be in use.

- [2016.03.21; Bug-fix; Maikuolan]: Improved the way in which we can detect
  whether we're in CLI-mode (there was a problem previously whereby cronjobs
  could sometimes be blocked in certain circumstances, and this shouldn't
  happen normally, thus qualifying this problem as a bug; this improvement
  corrects this problem).
  Refer github.com/CIDRAM/CIDRAM/issues/4

- [2016.03.25; Sub-minor code change; Maikuolan]: Removed references to the
  "package" tag from all phpDoc page blocks in the package (we don't need
  these, because we already have README documentation and don't use api-docs).
  Refer github.com/phpMussel/phpMussel/issues/85

- [2016.03.27; Minor code change; Maikuolan]: Added a "Why Blocked" field for
  the "Access Denied" page and for logging, to act as a debug mechanism to help
  track line/offset/section values for triggered signatures. Added code to
  allow CIDRAM to handle Windows-style linebreaks within the signature files,
  as so that it can now correctly interpret more than just Unix-style
  linebreaks.
  Refer github.com/CIDRAM/CIDRAM/issues/3

- [2016.03.28; Minor code change; Maikuolan]: Added support for section tags!
  It's now possible to uniquely identify specific signature sections from the
  signature files by tagging sections with a section tag; These section tags
  will be included in the logfiles whenever any of the signatures from the
  tagged sections are triggered and will appear alongside debug information
  for the user whenever they're blocked.
  Refer github.com/CIDRAM/CIDRAM/issues/3

- [2016.03.31; Signatures; Maikuolan]: Renamed "ipv4_custom.dat" to
  "ipv4_custom.dat.RenameMe" and renamed "ipv6_custom.dat" to
  "ipv6_custom.dat.RenameMe". The reason for appending ".RenameMe" onto the end
  of the names of the custom signature files is to prevent accidentally
  overwriting these files whenever someone updates CIDRAM blindly (such as via
  a dependency manager, installer or auto-updater; The custom signature files
  should be renamed back to their original former names by the user to activate
  them). Shell-style hashing implemented to all signature files for all
  comments and for all non-signature and non-syntactical entries; This won't
  be enforced onto users, but is recommended to improve readability for IDEs
  and text editors. Added some information from Spamhaus to help users gage the
  merit of blocking or not blocking some particular ASNs. Numerous new
  signature sections added to both the IPv4 and IPv6 signature files.
  Refer github.com/CIDRAM/CIDRAM/issues/3

- [2016.04.01; Minor code change; Maikuolan]: Renamed "config.ini" to
  "config.ini.RenameMe". The reason here is the same as the reason for having
  recently done the same thing to the custom signature files (to prevent
  accidentally overwriting this file whenever someone updates CIDRAM blindly).
  Additionally, the configuration file is now optional; The script has
  fallbacks implemented for all configuration directives and no longer dies an
  error to the user/client when the configuration file is unavailable. Added a
  "Reconstructed URL" field for the "Access Denied" page and for logging, to
  determine which resource was being requested at the time of a user/client
  being blocked.
  Refer github.com/CIDRAM/CIDRAM/issues/3

- [2016.04.02; Bug-fix; Maikuolan]: A bug was found by GaffNet whereby custom
  whitelist signatures were ignored by the script as of the latest version of
  the codebase due to the way that whitelist signatures were handled; This has
  been fixed.
  Refer github.com/CIDRAM/CIDRAM/issues/7

- [2016.04.03; Minor code change; Maikuolan]: Added support for Apache-style
  logging and for serialised logging (this could help any users wanting to
  integrate CIDRAM with packages such as fail2ban, which require Apache-style
  logs), and two related new configuration directives. Extended the
  "forbid_on_block" directive to allow 503 header responses. Added the ability
  to silently redirect blocked access attempts instead of displaying the usual
  "Access Denied" page. Did some more minor code refactoring.
  Refer github.com/CIDRAM/CIDRAM/issues/3

- [2016.04.04; Minor code change; Maikuolan]: Added support for custom themes;
  A new directive has been added to the configuration file allowing users to
  stipulate a custom CSS file to apply to the HTML output template; This and
  the new custom themes support for CIDRAM will work in the exact same way that
  custom themes for phpMussel works. Implemented a validator/fixer for checking
  and fixing signature files; Currently a work-in-progress and a BETA, but
  seems to function correctly and as intended; Currently only available in CLI,
  but will be available via other means after work has been completed.
  Refer github.com/CIDRAM/CIDRAM/issues/9

- [2016.04.10; Minor code change; Maikuolan]: Added support for section expiry!
  It's now possible to mark signature sections with an expiry date, to ensure
  that any signatures they contain won't be triggered after a specified date.
  This feature is optional; Unmarked signature sections won't expire.

- [2016.04.10; Signatures; Maikuolan]: Added numerous new signature sections to
  the signature files, covering a number of different new ASNs. Added IPs from
  ZeuS C&C tracker.

- [2016.04.12; Minor code change; Maikuolan]: Split the language data files
  into two dinstinct files per each language; Standard language data and CLI
  language data.

- [2016.04.17; Minor code change; divinity76]: Stricter loading for the
  configuration file (CIDRAM will now return an error if the configuration file
  isn't readable).

Caleb M / Maikuolan,
18th April 2016.

=== Version/Release 0.1.2 ===
PATCH RELEASE.

- [2016.03.11; Sub-minor code change; Maikuolan]: When converting all functions
  to closures (anonymous functions) for the previous release, I missed the
  "matchElement" function. I'd thought I'd got them all, but I'd missed this
  one (this function wasn't yet being used anywhere anyhow, so, missing it
  wouldn't have been particularly problematic, anyhow); In any case, this has
  now been corrected.

- [2016.03.13; Documentation; Maikuolan]: Completed translation for the CIDRAM
  README documentation into Chinese. This totals 9 different language versions
  of the README documentation now available.

- [2016.03.14; Bug-fix; Maikuolan]: A bug was found within the IPv6Test closure
  function (used for calculating IPv6 CIDRs), caused by some excess spaces in
  the code that existed where they shouldn't have existed; Fixed.
  Refer github.com/CIDRAM/CIDRAM/issues/2

Caleb M / Maikuolan,
14th March 2016.

=== Version/Release 0.1.1 ===
PATCH RELEASE.

- [2016.03.03-2016.03.06; Documentation; Maikuolan]: Completed translations for
  the CIDRAM README documentation (written originally in English) into Spanish,
  French, Indonesian, Italian, Portuguese and Dutch (none of these translations
  have been checked/audited by a native/fluent speaker yet, but they should be
  at least accurate enough to be understood). This totals 7 different language
  versions of the README documentation now available.

- [2016.03.07; Sub-minor code change; Maikuolan]: Converted all functions to
  closures (anonymous functions), in order to be able to unset them from memory
  after the script execution has finished (we shouldn't leave unrequired data
  in the memory after execution has finished). Changed the blocksize for reading
  files with the "ReadFile" function from 48KB to 128KB (we can afford this,
  and this should *slightly* increase the speed of the script).

Caleb M / Maikuolan,
7th March 2016.

=== Version/Release 0.1.0 ===
MINOR RELEASE (FIRST BETA).

- [2015.12.12; Documentation; Maikuolan]: Added a changelog; Added READMEs.

Caleb M / Maikuolan,
27th February 2016.

Versions < 0.1.0 are ALPHAs.
For more information send a message to info at phpclasses dot org.