• Simon Giesecke's avatar
    Replace console output by monitoring events for curve security issues (#2645) · 5d4e30eb
    Simon Giesecke authored
    * Fixing #2002 one way of doing it
    
     * Mechanisms can implement a new method `error_detail()`
     * This error detail have three values for the moment: no_detail
     (default), protocol, encryption.
        + generic enough to make sense for all mechanisms.
        - low granularity level on information.
    
    * Fixing #2002: implementation of the error details
    
    The ZMQ_EVENT_HANDSHAKE_FAILED event carries the error details
    as value.
    
    * Removed Microsoft extenstion for enum member access
    
    This was leading to compilation error under linux.
    
    * Adaptation of CURVE test cases
    
    * Monitoring event: changed API for detailed events
    
    Removed ZMQ_EVENT_HANDSHAKE_FAILED and replaced it by:
    - ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL,
    - ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL,
    - ZMQ_EVENT_HANDSHAKE_FAILED_ENCRYPTION
    
    Adaptation of text case `security_curve`
    
    * Removed event value comparison
    
    This was introduced for the previous API model adaptation
    
    * Removed the prints in std output and added missing details
    
    `current_error_detail` was not set in every protocol error cases
    
    * Fixed initialization of current_error_detail
    
    * Fixed error in greeting test case
    
    The handshake failure due to mechanism mismatch in greeting is actually
    a protocol error. The error handling method consider it like so and
    send a protocol handshake failure monitoring event instead of no_detail.
    
    Fixed the test_security_curve expectation as well.
    
    * Upgraded tests of monitoring events
    
    The tests check the number of monitoring events received
    
    * Problem: does not build under Linux or without ZMQ_DRAFT_API
    
    Solution:
    - properly use ZMQ_DRAFT_API conditional compilation
    - use receive timeouts instead of Sleep
    
    * Problem: duplicate definition of variable 'timeout'
    
    Solution: merged definitions
    
    * Problem: inconsistent timing dependencies
    
    Solution: reduce timing dependency by using timeouts at more places
    
    * Problem: assertion failure under Linux due to unexpected monitor event
    
    Solution: output event type to aid debugging
    
    * Problem: erroneous assertion code
    
    * Problem: assertion failure with a garbage server key due to an extra third event
    
    Solution: changed assertion to expect three events (needs to be checked)
    
    * Problem: extra include directive to non-existent file
    
    Solution: removed include directive
    
    * Problem: assertion failure on appveyor for unknown reason
    
    Solution: improve debug output
    
    * Problem: no build with libsodium and draft api
    
    Solution: add build configurations with libsodium and draft api
    
    * Problem: assertion failure on CI
    
    Solution: change assertion to reflect actual behaviour on CI (at least temporarily)
    
    * Problem: error in condition in assertion code
    
    * Problem: assertion failure on CI
    
    Solution: generalize assertion to match behavior on CI
    
    * Problem: assertion failures on CI
    
    Solution: removed inconsistent assertion on no monitor events before flushing
    improved debuggability by converting function into macro
    
    * Problem: diverging test code for three analogous test cases with garbage key
    
    Solution: extract common code into function
    
    * Problem: does not build without ZMQ_BUILD_DRAFT_API
    
    Solution: introduce dummy variable
    
    * Attempt to remove workaround regarding ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL again
    
    * Problem: EAGAIN error after handshake complete if there is no more data in inbuffer
    
    Solution: Skip tcp_read attempt in that case
    
    * Problem: handshaking event emitted after handshaking failed
    
    Solution: use stream_engine_t::handshaking instead of mechanism_t::status() to determine whether still handshaking
    
    * Include error code in debug output
    
    * Improve debugging output: output flushed events
    
    * Split up ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL into ZMQ_EVENT_HANDSHAKE_FAILED_ZMTP and ZMQ_EVENT_HANDSHAKE_FAILED_ZAP
    
    * Fixed compilation without ZMQ_BUILD_DRAFT_API
    
    * Renamed ZMQ_EVENT_HANDSHAKE_SUCCEED to ZMQ_EVENT_HANDSHAKE_SUCCEEDED for language consistency
    
    * Renamed ZMQ_EVENT_HANDSHAKE_SUCCEED to ZMQ_EVENT_HANDSHAKE_SUCCEEDED for language consistency
    
    * Renamed ZMQ_EVENT_HANDSHAKE_SUCCEED to ZMQ_EVENT_HANDSHAKE_SUCCEEDED for language consistency
    
    * Fixed assert_monitor_event (require event instead of allowing no event)
    Reverted erroneous change to handshaking condition
    Renamed test_wrong_key to test_garbage_key
    Generalized assumption in test_garbage_key to allow for ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL with error == EPIPE
    
    * Better isolate test cases from each other by providing a fresh context & server for each
    
    * Added diagnostic output
    
    * Changed assertion to reflect actual behavior on CI
    
    * Fixed formatting, observe maximum line length
    
    * Fixed formatting, observe maximum line length
    
    * Increase timeout to check if this fixes valgrind run
    
    * Close server with close_zero_linger
    
    * Increase timeout to check if this fixes valgrind run
    
    * Increase timeout to check if this fixes valgrind run
    
    * Generalize assertion to also work with valgrind
    
    * Fixed formatting
    
    * Add more diagnostic output
    
    * Generalize assertion to also work with valgrind
    5d4e30eb
Name
Last commit
Last update
.github Loading commit data...
RELICENSE Loading commit data...
builds Loading commit data...
doc Loading commit data...
include Loading commit data...
m4 Loading commit data...
packaging Loading commit data...
perf Loading commit data...
src Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
.hgeol Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
AUTHORS Loading commit data...
CMakeLists.txt Loading commit data...
COPYING Loading commit data...
COPYING.LESSER Loading commit data...
Dockerfile Loading commit data...
Doxygen.cfg Loading commit data...
FindSodium.cmake Loading commit data...
INSTALL Loading commit data...
Makefile.am Loading commit data...
NEWS Loading commit data...
README.cygwin.md Loading commit data...
README.doxygen.md Loading commit data...
README.md Loading commit data...
ZeroMQConfig.cmake.in Loading commit data...
acinclude.m4 Loading commit data...
appveyor.yml Loading commit data...
autogen.sh Loading commit data...
branding.bmp Loading commit data...
ci_build.sh Loading commit data...
ci_deploy.sh Loading commit data...
configure.ac Loading commit data...
installer.ico Loading commit data...
version.sh Loading commit data...