## 2.12 2019-04-11

C Implementation of Archive Push

IMPORTANT NOTE: The new TLS/SSL implementation forbids dots in S3 bucket names per RFC-2818. This security fix is required for compliant hostname verification.

Fix issues when a path option is / terminated.

Fix issues when log-level-file=off is set for the archive-get command.

Fix C code to recognize host:port option format like Perl does.

Fix issues with `remote`/`local` command logging options.

The archive-push command is implemented entirely in C.

Increase process-max limit to 999.

Improve error message when an S3 bucket name contains dots.

Add separate archive-push-async command.

`CryptoHash` improvements and fixes. Fix incorrect buffer size used in `cryptoHashOne()`. Add missing `const` to `cryptoHashOne()` and `cryptoHashOneStr()`. Add hash size constants. Extern hash type constant.

Add CIFS storage driver.

Add file write to the remote and S3 storage drivers.

Add `storageRepoWrite()` and `storagePg()`/`storagePgWrite()` to storage helper.

Use a single file to handle global errors in async archiving.

Add document creation to XML objects.

Remove redundant documentation from interface files and clarify ambiguous function names.

Add WAL info to interface.

Refactor interface to remove most code duplication.

Logging improvements. Allow three-digit process IDs in logging. Allow process id in C logging.

Add process id to `ProtocolParallelJob`.

Add process id to C archive-get and archive-push logging.

Close log file before `exec()`.

Allow warnings to be written by `archiveAsyncStatusOkWrite()`.

Move WAL path prefix logic into `walPath()`.

Make notion of current info ID in C align with Perl.

Add locking capability to the remote command.

Add `forkSafe()` to handle fork errors.

Add `httpHeaderDup()`.

`httpClientRequest()` accepts a body parameter.

Add `protocolKeepAlive()` to send noops to all remotes.

Make `strLstDup()` null-tolerant.

Add `strLstMergeAnti()` for merge anti-joins.

Add `cvtSSizeToZ()` and debug macros.

Remove unused `infoArchiveCheckPg()` function.

Add constants for .ok/.error status extensions.

Clarify that S3-compatible object stores are supported.

Build test harness with the same warnings as code being tested.

Add `TEST_64BIT()` macro to detect 64-bit platforms.

Skip coverage for macros with numbers in their name.

Use restore command for remote performances tests.