The sub-directory tests/oss-fuzz contains single files that are
used from the Open Source Software Fuzzer [1]. This change provides
a template Makefile with the proper flags for compiling libcoap
applications in a continuous integration environment such as travis.
Intended usage from top_srcdir is:
make -C test/oss-fuzz -f Makefile.ci check clean
[1] https://github.com/google/oss-fuzz/
Delayed PDUs (found by the limiting of 1 CON request outstanding) are
added to session->sendqueue by coap_session_delay_pdu().
The session->sendqueue is only flushed out when a session becomes established
by calling coap_session_connected().
This fix now calls coap_session_connected() whenever the current CON count
is decremented.
Additionally, CON tracking now only tracks UDP & DTLS sessions.
coap_session_connected() is updated to not sent out more than one CON
request.
If a loss level is configured using coap_debug_set_packet_loss(), it
is not possible to restore full flow using 0% - as 0 is rejected as
being invalid. This fix allows 0% to restore full traffic flows again.
Add in -d max option, which then causes coap_resource_unknown_init() to get
called.
Number of dynamic resoures is limited by 'max'. The current set of resources
can be determined by using .well-known/core
If max is reached, 4.06 is returned.
Fixed typo in man coap_resource(3) in example for unknown resources
Updated to support the new coap_dtls_pki_t.
Add in new -C and -R options to support / test PKI mutual authentication
Make sure time resource is triggered no more frequently than once a sec.
Split out old coap_context(3) into coap_context(3), coap_encryption(3) and
coap_session(3) with coap_encryption(3) primarily updated to reflect the
updated PKI configuration options.
coap-client.txt.in
coap-server.txt.in
Update with new options making use of updated PKI interface
Update calls to coap_dtls_context_set_*() functions
"\n" terminate coap_log() calls
src/coap_session.c:
coap_session_disconnected() Report the session disconnected reason
Warn if coap_new_client_session_psk() called without both key and
identity defined (OpenSSL cannot handle this)
src/net.c:
coap_context_set_pki_root_cas(): New function
coap_dtls_context_set_pki_root_cas(): New function
coap_dtls_context_set_psk(): Remove unused parameters, add in server parameter
coap_dtls_context_set_pki(): Add in server parameter
coap_dtls_context_check_keys_enabled(): Add in UNUSED
src/coap_tinydtls.c:
coap_dtls_free_session() set coap_session->tls = NULL
coap_context_set_pki_root_cas(): New
coap_dtls_context_set_psk(): remove unused parameters, add in server parameter
coap_dtls_context_set_pki(): add in server parameter
coap_dtls_pki_t: Additional configuration parameters
coap_dtls_security_setup_t: Updated
coap_dtls_cn_callback_t: New
coap_dtls_sni_callback_t: New
coap_pki_key_t: New
coap_pki_key_pem_t: New
coap_pki_key_asn1_t: New
coap_dtls_sni_t: New
Comments tidy up.
Better Doxygen comments for coap_dtls.h and net.h
Doxygen fix for debug.h (introduced by #219 merge)
Doxygen update coap_endpoint_new_dtls_session() for in coap_session.h
coap_dtls_pki_t struct has been enhanced to have more configuration options.
These configuruation options then tell libcoap what needs to get checked by
the underlying OpenSSL library rather than the user application has to do it.
There still is support for the user application to do all the Certificate
checking etc.
A late change to the PKI Pull request got missed for the TLS case
in coap_dtls_context_set_pki() for the mapping of private key types to
the OpenSSL version. Have now pulled common DTLS and TLS code into a seperate
function
Fixed coap_(d)tls_free_session to not shut down a session that is not yet
fully started, as well as calling SSL_shutdown() twice if appropriate
The ssl parameter is set to NULL after closedown
Made coap_dtls_context_set_psk() smarter in what was updated, depending on
whether called by a client or server
Make sure that coap_dtls_psk_client_callback is defined in
coap_dtls_context_set_psk() in case coap_dtls_context_set_pki() was called
first. This fixes the first time issue after startup where a PSK client
was unable to establish a DTLS session - subsequent times were successful
Added in a set of callbacks, invoked from coap_dtls_context_set_pki(), so that
a server can differentiate between an incoming PSK or PKI connection request.
These are only invoked if no full_call_back was defined in the setup_data
Add in a set of user definable callbacs for checking CN and SNI provided
information
Add in support for the generation and detection of ALPN externsion
Output error message if PKI or PSK was not set up before a server endpoint was
set up and (D)TLS is being used.
Allow a client to talk to a server that is PKI enabled without the need for
a PreShared Key or PKI Certificate
Set the SSL information at the SSL, not the CTX level when it is a client
coap_show_pdu()'s API is now coap_show_pdu(coap_log_t, coap_pdu_t*)
New function void coap_set_show_pdu_output(int use_fprintf)
Default is use fprintf() instead of coap_log()
The output buffer size can be configuring -DCOAP_DEBUG_BUF_SIZE
Output COAP_OPTION_SIZE2 option as well
For binary data, output ascii readable equivalent immediately under the
hex output for ease of debugging.
include/coap/debug.h
src/debug.c
Update coap_show_pdu() API
New function coap_set_show_pdu_output()
Update coap_show_pdu() code
include/coap/pdu.h
Define the coap debug output debug buffer size
COAP_DEBUG_BUF_SIZE
examples/client.c
examples/contiki/coap-observer.c
src/net.c
tests/test_wellknown.c
tests/test_pdu.c
Update coap_show_pdu() calls
libcoap-2.map
libcoap-2.sym
New function coap_set_show_pdu_output()
If multiple GET requests for the same URI + QUERY with different tokens and
Observe =0 is set, then for each GET there is an increment of the
subscriptions.
Currently, if the application is not clearing out the duplicate subscribers,
then the subscriber list gets large and eventually runs out of memory.
This fix stops duplicate subscriptions for the same session with the same
URI + QUERY, deleting the original entry and replacing it with a new
subscription.
include/coap/coap_dtls.h
include/coap/coap_session.h
include/coap/encode.h
include/coap/net.h
include/coap/str.h
include/coap/subscribe.h
src/resource.c
Several functions have been better commented as well.
build-env/Dockerfile.build-env
scripts/build.sh
Add in valgrind testing of the tests
src/option.c
Issue #199 Better fix of ADVANCE_OPT_CHECK()
src/pdu.c
Issue #214 Validate token length in coap_pdu_parse_header()
src/uri.c
Issue #212 Check not reading off end of buffer in dots()
tests/test_pdu.c
tests/test_uri.c
Tests updated to include tests for #212 & #214
https://tools.ietf.org/html/rfc7641#section-4.5
In order not to cause congestion, servers MUST strictly limit the number of
simultaneous outstanding notifications/responses that they transmit to a given
client to NSTART (1 by default; see Section 4.7 of RFC 7252 [RFC7252]).
An outstanding notification/response is either a confirmable message for which
an acknowledgement has not yet been received and whose last retransmission
attempt has not yet timed out or a non-confirmable message for which the
waiting time that results from the following rate-limiting rules has not yet
elapsed.
Delay sending of PDUs if active CON request waiting for ACK.
Do not start of another Observer unsolicited response if active CON waiting
waiting for ACK.
Display outgoing PDU if log level DEBUG or higher to help troubleshooting.
This does not fix the ratelimiting of non-confirmable messages, which
should be handled by the application.
examples/client.c
Add in support for using PKI certificates
examples/coap-server.c
Add in support for using PKI certificates
remove default PSK key
Add in '-h hint' option
Make Usage reflect actual options available to use
man/coap-client.txt.in
Include the missing options
Update -A option to be a single entity
Sort the options into ascending order as reported by Usage
man/coap-server.txt.in
Include the missing options
Add in '-h hint' option
tests/test_pdu.c: Create t_parse_pdu15() which shows the issue
Credit to OSS-Fuzz for finding this - work done by Bhargava Shastry with
the libcoap testing
To document that uri.port input to coap_encode_var_safe() never
has more than 16 bits, an explicit bit mask has been added. This
change is supposed to avoid the false positive CID 1469635.
cmdline_content_type() treated option numbers as 8-bit integers and
therefore could not parse values >255. Now, option numbers are
represented as uint16_t to allow for numbers between 0 and 65535.
Moreover, as RFC 7252 has made the Accept option non-repeatable,
cmdline_content_type() now will only add a single Accept option.
libcoap-minimal [1] contains small client and server examples that
illustrate the use of libcoap-2.
This change also updates the copyright year.
[1] https://github.com/obgm/libcoap-minimal
Calling strncpy() on the variable (and erroneous) calculated token
length in cmdline_token() has caused stringop-overflow warning by
GCC 8. This change fixes the error and replaces strncpy() by
memcpy() to quieten the compiler.