Luca Boccassi
31e3977ab9
Merge pull request #2731 from sigiesec/fix-issue-2723
...
Problem: assertion in src\select.cpp:111 on Windows or hang on zmq_ctx_destroy
2017-09-01 19:51:39 +01:00
sigiesec
79e28af4ce
Problem: new function zmq_socket_get_peer_state not in zmq_draft.h
...
Solution: added function to zmq_draft.h
2017-09-01 17:15:23 +02:00
sigiesec
48a1e637b6
Problem: zmq_socket_get_peer_state is not implemented
...
Solution: add initial implementation
2017-09-01 16:28:58 +02:00
sigiesec
f4d139bd16
Problem: duplicated code in socket-related functions
...
Solution: extract as_socket_base_t function
2017-09-01 16:28:58 +02:00
sigiesec
efa86fe629
Problem: no test case using the proposed zmq_socket_get_peer_state function
...
Solution: added test case (with dummy implementation of zmq_socket_get_peer_state)
2017-09-01 16:28:58 +02:00
sigiesec
23e018f37a
Problem: termination is requested from a session's owner when already in
...
pending termination while processing an error
Solution: terminate pipe instead
Fixes #2723
2017-09-01 11:55:31 +02:00
sigiesec
eb8105cde1
Problem: assertion failure in select.cpp:111 under Windows
...
Solution: handle case when get_fd_family fails
2017-09-01 11:55:31 +02:00
bjovke
91e0d689bb
Problem: Inconsistent size_t/int usage. Solution: types corrected.
2017-08-28 15:03:46 +02:00
Jim Klimov
40a3b0746f
Problem: cosmetic setThreadName() can be fatal
...
Solution: do not assert() the values returned; if we failed to set the thread name - we just have harder debugging, not flawed production conditions.
Closes github issue #2679
Signed-off-by: Jim Klimov <EvgenyKlimov@eaton.com>
2017-08-25 15:30:03 +02:00
sigiesec
6147e45a07
Problem: missing tests for zmq_timers_* corner cases, missing handling of such corner cases, code duplication, missing assertions in test code
...
Solution: add tests, add checks to timers_t, add match_by_id functor, add assertions
2017-08-23 09:41:34 +02:00
sigiesec
f685a3ffd2
Solution: unreachable code paths in socket_poller_t
...
Problem: replaced by assertions resp. removed
2017-08-22 21:23:09 +02:00
sigiesec
a71f7b0405
Problem: zmq_poller_* uses ETIMEDOUT (instead of the usual EAGAIN) to indicate timeouts
...
Solution: replace ETIMEDOUT within socket_poller_t and all client code by EAGAIN
Fixes #2713
2017-08-22 20:00:29 +02:00
sigiesec
6a3c053a3e
Problem: EFAULT is returned for bad file descriptors passed to zmq_poller_*_fd
...
Solution: Return EBADF instead
2017-08-22 19:43:56 +02:00
sigiesec
74303b08e6
Problem: calling zmq_poller_wait* with NULL events causes an assertion, as opposed to other NULL arguments, which return an error
...
Solution: return EFAULT when such an operation is attempted
2017-08-22 19:43:56 +02:00
sigiesec
c1a4cfdd9f
Problem: waiting on an empty poller with infinite timeout waits forever
...
Solution: return EFAULT when such an operation is attempted
2017-08-22 19:43:56 +02:00
sigiesec
2e4fc4faf0
Problem: zmq_poller_*_fd functions do not check for invalid fd
...
Solution: add checks, added test cases
2017-08-22 19:28:07 +02:00
sigiesec
c3c2515542
Problem: code duplication within zmq::select_t::rm_fd
...
Solution: extract find_fd_entry_by_handle from rm_fd
2017-08-21 14:36:50 +02:00
sigiesec
bd0675b93f
Problem: no tests for client-side events for successful handshake and authentication failure in handshake
...
Solution: added tests for CURVE, add emitting of client-side event in curve_client_t; add ZAP code 300/500 tests for all mechanisms; suppress sending an error message for ZAP code 300
2017-08-20 22:45:14 +02:00
Luca Boccassi
f6ce019fff
Problem: incompatible parameter passed to send_zap_request
...
Solution: cast from void* to uint8_t* to match new definition
2017-08-19 17:40:15 +01:00
Luca Boccassi
7c85bf2f88
Problem: uninitialised variables in gssapi_server constructor
...
Solution: initialise session and peer_address
2017-08-19 17:40:15 +01:00
Luca Boccassi
2ba0149ee4
Problem: gssapi_mechanism_base_t initialisation misses one param
...
Solution: pass the session as well as the options
2017-08-19 17:40:15 +01:00
Luca Boccassi
83c9c0b55f
Problem: gssapi_client does not have a peer_address param
...
Solution: remove it from the gssapi_mechanism_base initialiser
2017-08-19 17:40:15 +01:00
Luca Boccassi
24b2f61b1b
Problem: gssapi_server out of date with zap_client
...
Solution: remove local unused zap_client variable
2017-08-19 17:40:15 +01:00
Luca Boccassi
c8097af884
Problem: DRAFT GSSAPI socket options in wrong section cause duplication
...
Solution: move them together with the other DRAFT socket options, and
change value of DRAFT ZMQ_BINDTODEVICE from 90 to 92 to avoid clash
2017-08-19 17:40:15 +01:00
Luca Boccassi
6f49e40e36
Problem: gssapi_mechanism_base does not include mechanism_base
...
Solution: include mechanism_base.hpp instead of mechanism.hpp
2017-08-19 17:40:15 +01:00
Luca Boccassi
e2ffa2a77b
Problem: produce_ready in gssapi_mechanism_base not deduped
...
Solution: call make_command_with_basic_properties
2017-08-19 17:40:15 +01:00
Luca Boccassi
90b6c102bb
Problem: various unused variables warnings
...
Solution: use LIBZMQ_UNUSED where necessary
2017-08-19 12:18:51 +01:00
Luca Boccassi
7be3efc936
Problem: TODO in gssapi mechanism
...
Solution: remove it.
Looking at the code:
https://github.com/krb5/krb5/blob/master/src/lib/gssapi/mechglue/g_unseal.c#L55
gss_unwrap as the very first thing checks that plaintext is not a
null pointer, which in our case it's true given it's on the stack,
and then initialises its members to 0 length and null ptr.
https://github.com/krb5/krb5/blob/master/src/lib/gssapi/mechglue/g_rel_buffer.c#L36
So it should be safe to release it in all cases, and the release API
seems to check again if it's not a null pointer and then if the
members are 0 length and null pointer it's a no-op.
2017-08-18 15:58:35 +01:00
Luca Boccassi
77444e206c
Problem: free on stack variable in GSSAPI mechanism
...
Solution: free wrapper.value instead of wrapper.
2017-08-18 15:57:51 +01:00
sigiesec
898691e2eb
Problem: gssapi_mechanism_base_t aborts the application when it receives a message it cannot decode
...
Solution: emit an ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL event instead of using zmq_assert
2017-08-18 12:29:37 +02:00
sigiesec
301f3c70c2
Problem: code duplication between curve_client_t and curve_server_t decode and encode
...
Solution: extracted common base class curve_mechanism_base_t
2017-08-18 11:34:22 +02:00
sigiesec
44f6aa3de6
Problem: gssapi_* do not emit ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL events
...
Solution: emit appropriate events
2017-08-18 10:30:48 +02:00
sigiesec
ca7eee357e
Problem: no ZMQ_EVENT_HANDSHAKE_FAILED_PROTOCOL events emitted in plain_client_t
...
Solution: emit events at appropriate places
2017-08-18 10:15:44 +02:00
sigiesec
c66ae4656f
Problem: curve_client_t may emit misleading event on bad data processed by curve_client_t::decode
...
Solution: use check_basic_command_structure in curve_client_t::decode, also prepare other client mechanisms to use that method by rearranging inheritance hierarchy
2017-08-18 10:04:58 +02:00
sigiesec
e22ca065d6
Problem: curve_client_t does not emit handshake failure events
...
Solution: add handshake failure events to curve_client_t
2017-08-18 09:18:06 +02:00
sigiesec
9bec68354c
Problem: console output for NULL protocol errors
...
Solution: emit socket monitor events for NULL protocol errors (like CURVE)
2017-08-18 09:18:06 +02:00
sigiesec
11b3c93852
Problem: console output for PLAIN protocol errors
...
Solution: emit socket monitor events for PLAIN protocol errors (like CURVE)
2017-08-18 09:18:06 +02:00
sigiesec
e2d3ba9c62
Problem: classification ZMQ_HANDSHAKE_FAILED_* events is coarse-grained and partially misleading
...
Solution: redesign ZMQ_HANDSHAKE_FAILED_* events, introduce new class of ZMQ_HANDSHAKE_FAILED_AUTH events
2017-08-18 09:17:59 +02:00
sigiesec
f9985708b7
Problem: unreachable code in zap_client_t
...
Solution: replaced unreachable code by assertions and adapted uses
2017-08-17 12:54:05 +02:00
sigiesec
f107b53768
Problem: deviating behavior regarding monitoring events between mechanisms
...
Solution: move relevant behavior to zap_client_t
2017-08-17 12:10:00 +02:00
sigiesec
8dce0396fb
Problem: inconsistent handling of ZAP replies
...
Solution: unification, pulled up common behaviour to zap_client_t/zap_client_common_handshake_t
2017-08-17 09:44:05 +02:00
sigiesec
8c58ef7f5c
Problem: zap_msg_available duplicated between curve_server_t and plain_server_t (with deviating behaviour)
...
Solution: pull up into zap_client_common_handshake_t, along with handle_zap_status_code and error_detail/current_error_detail
2017-08-16 18:05:36 +02:00
sigiesec
314a3acfa9
Problem: status method duplicated between curve_server_t and plain_server_t
...
Solution: extract into new intermediate base class zap_client_common_handshake_t
2017-08-16 18:05:36 +02:00
sigiesec
ebba815a4d
Problem: duplicate but equivalent state enums in curve_server_t and plain_server_t
...
Solution: pull state enum up to zap_client_t and unify names of enum values
2017-08-16 18:05:35 +02:00
sigiesec
414c6f45b8
Problem: receive_and_process_zap_reply is duplicated in all mechanisms
...
Solution: extract receive_and_process_zap_reply into zap_client_t and convert zap_client_t into base class of the server mechanism classes
2017-08-16 18:05:35 +02:00
sigiesec
d7a3778387
Problem: plain_server_t duplicates zap_client_t::send_zap_request
...
Solution: Use zap_client_t::send_zap_request
2017-08-16 18:05:35 +02:00
sigiesec
014b201d3e
Problem: ZAP message without credentials is not terminated
...
Solution: Set more flag depending on presence of credentials
2017-08-16 18:05:35 +02:00
sigiesec
b324c66b6f
Problem: null_mechanism duplicates zap_client_t::send_zap_request\nSolution: use zap_client_t::send_zap_request
2017-08-16 18:05:34 +02:00
sigiesec
f3884f3380
Problem: gssapi_server_t duplicates zap_client_t::send_zap_request
...
Solution: Use zap_client_t::send_zap_request
2017-08-16 18:04:31 +02:00
sigiesec
6e8a0b31be
Problem: ZAP client code is duplicated in all mechanisms
...
Solution: created a zap_client_t class, extracted first function send_zap_request from curve_server_t
2017-08-16 18:04:30 +02:00