From 4db1e80410979ac2fbd23ee231dd667b21a21822 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 26 Sep 2019 11:53:41 +0100 Subject: [PATCH] More allow_zero_length_clientid fixes. Closes #1429. Thanks to Dustin Sallings. --- ChangeLog.txt | 5 +++-- src/conf.c | 3 +++ test/broker/01-connect-zero-length-id.py | 27 ++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 65d94ad7..28fdc0ef 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,7 @@ Broker: -- allow_zero_length_clientid wasn't being used by the default listener, making - it impossible to turn this option off. +- Various fixes for `allow_zero_length_clientid` config, where this option was + not being set correctly. Closes #1429. + 1.6.7 - 20190925 ================ diff --git a/src/conf.c b/src/conf.c index 1b9708d2..9d30e30f 100644 --- a/src/conf.c +++ b/src/conf.c @@ -271,6 +271,7 @@ void config__init(struct mosquitto_db *db, struct mosquitto__config *config) config->default_listener.max_connections = -1; config->default_listener.protocol = mp_mqtt; config->default_listener.security_options.allow_anonymous = -1; + config->default_listener.security_options.allow_zero_length_clientid = true; config->default_listener.maximum_qos = 2; config->default_listener.max_topic_alias = 10; } @@ -471,6 +472,7 @@ int config__parse_args(struct mosquitto_db *db, struct mosquitto__config *config || config->default_listener.security_options.psk_file || config->default_listener.security_options.auth_plugin_config_count || config->default_listener.security_options.allow_anonymous != -1 + || config->default_listener.security_options.allow_zero_length_clientid != true ){ config->listener_count++; @@ -1389,6 +1391,7 @@ int config__read_file_core(struct mosquitto__config *config, bool reload, struct } cur_listener->security_options.allow_anonymous = -1; + cur_listener->security_options.allow_zero_length_clientid = true; cur_listener->protocol = mp_mqtt; cur_listener->port = tmp_int; cur_listener->maximum_qos = 2; diff --git a/test/broker/01-connect-zero-length-id.py b/test/broker/01-connect-zero-length-id.py index e9c6d8fe..370199ab 100755 --- a/test/broker/01-connect-zero-length-id.py +++ b/test/broker/01-connect-zero-length-id.py @@ -11,9 +11,11 @@ def write_config(filename, port1, port2, per_listener, allow_zero): with open(filename, 'w') as f: f.write("per_listener_settings %s\n" % (per_listener)) f.write("port %d\n" % (port2)) - f.write("allow_zero_length_clientid %s\n" % (allow_zero)) + if allow_zero != "": + f.write("allow_zero_length_clientid %s\n" % (allow_zero)) f.write("listener %d\n" % (port1)) - f.write("allow_zero_length_clientid %s\n" % (allow_zero)) + if allow_zero != "": + f.write("allow_zero_length_clientid %s\n" % (allow_zero)) def do_test(per_listener, proto_ver, clean_start, allow_zero, client_port, expect_fail): @@ -53,6 +55,7 @@ def do_test(per_listener, proto_ver, clean_start, allow_zero, client_port, expec if rc: print(stde.decode('utf-8')) print("per_listener:%s proto_ver:%d client_port:%d clean_start:%d allow_zero:%s" % (per_listener, proto_ver, client_port, clean_start, allow_zero)) + print("port1:%d port2:%d" % (port1, port2)) exit(rc) @@ -80,6 +83,16 @@ if test_v4 == True: do_test(per_listener="true", proto_ver=4, client_port=port2, clean_start=False, allow_zero="true", expect_fail=True) do_test(per_listener="true", proto_ver=4, client_port=port2, clean_start=False, allow_zero="false", expect_fail=True) + do_test(per_listener="false", proto_ver=4, client_port=port1, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="false", proto_ver=4, client_port=port1, clean_start=False, allow_zero="", expect_fail=True) + do_test(per_listener="true", proto_ver=4, client_port=port1, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="true", proto_ver=4, client_port=port1, clean_start=False, allow_zero="", expect_fail=True) + + do_test(per_listener="false", proto_ver=4, client_port=port2, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="false", proto_ver=4, client_port=port2, clean_start=False, allow_zero="", expect_fail=True) + do_test(per_listener="true", proto_ver=4, client_port=port2, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="true", proto_ver=4, client_port=port2, clean_start=False, allow_zero="", expect_fail=True) + if test_v5 == True: do_test(per_listener="false", proto_ver=5, client_port=port1, clean_start=True, allow_zero="true", expect_fail=False) do_test(per_listener="false", proto_ver=5, client_port=port1, clean_start=True, allow_zero="false", expect_fail=True) @@ -99,4 +112,14 @@ if test_v5 == True: do_test(per_listener="true", proto_ver=5, client_port=port2, clean_start=False, allow_zero="true", expect_fail=False) do_test(per_listener="true", proto_ver=5, client_port=port2, clean_start=False, allow_zero="false", expect_fail=True) + do_test(per_listener="false", proto_ver=5, client_port=port1, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="false", proto_ver=5, client_port=port1, clean_start=False, allow_zero="", expect_fail=False) + do_test(per_listener="true", proto_ver=5, client_port=port1, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="true", proto_ver=5, client_port=port1, clean_start=False, allow_zero="", expect_fail=False) + + do_test(per_listener="false", proto_ver=5, client_port=port2, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="false", proto_ver=5, client_port=port2, clean_start=False, allow_zero="", expect_fail=False) + do_test(per_listener="true", proto_ver=5, client_port=port2, clean_start=True, allow_zero="", expect_fail=False) + do_test(per_listener="true", proto_ver=5, client_port=port2, clean_start=False, allow_zero="", expect_fail=False) + exit(0)