* In addition to the server mode, it is now possible to run the
program in standalone mode. In that mode, the updates selector and
force flag will be read from the command line, the updates will be
executed immediately, and the program will exit.
* Client mode ready to be implemented
* Update runs have been refactored into self-contained structures.
* Running pre-commands, handlers and post-commands has been
implemented. While errors during pre-commands will stop updates for
the files they correspond to, a handler failures will interrupt *all*
updates for files that use that handler.
* The new configuration includes specific commands per file, as well
as handlers that can be triggered by updates but will only ever run
once.
* For now, commands from the pre_commands section are executed, the
rest is ignored
* The DN that is passed along with the update command is checked
against the list of DNs a certificate file uses. If it is not in the
list, then the file is skipped.
* The UNIX socket will be listened on for control messages
* A message containing a single 'Q' will cause it to exit
* A message containing a single 'R' will cause a configuration reload.
If the new configuration is incorrect, the old configuration will be
kept. A new socket will be opened if the path has changed (failure
when doing so will restore the previous configuration as well).
* A message starting with 'U' requests an update. The next character
may be '!' to force updates or anything else to update only as
needed. The rest of the string is the selector: either a DN or '*'.
* The selector is ignored in this commit; all certificates are
re-examined.
* An example configuration file has been added.
* The data structure that corresponds to the configuration has been
defined, and functions to load it have been added.
* Logging using logrus and command line arguments that configure
logging and set the configuration file's path have been added.
* Opening the UNIX socket has been implemented.