From e51e40e95cade69f8f9f972db4a2cb3dc255b09a Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Wed, 29 May 2019 15:40:17 +0100 Subject: [PATCH] Fix incorrect shared subscription topic of '$shared.' --- ChangeLog.txt | 1 + src/subs.c | 4 ++-- test/broker/02-shared-qos0-v5.py | 28 ++++++++++++++-------------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 26c8b66f..c6cee2b0 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -22,6 +22,7 @@ Broker: reconnect, having sent DISCONNECT on a previous session. Closes #1227. - Disable TLS renegotiation. Client initiated renegotiation is considered to be a potential attack vector against servers. Closes #1257. +- Fix incorrect shared subscription topic '$shared'. Client library: - Fix typo causing build error on Windows when building without TLS support. diff --git a/src/subs.c b/src/subs.c index 91d34266..aae32666 100644 --- a/src/subs.c +++ b/src/subs.c @@ -706,7 +706,7 @@ int sub__add(struct mosquitto_db *db, struct mosquitto *context, const char *sub if(sub__topic_tokenise(sub, &tokens)) return 1; - if(!strcmp(tokens->topic, "$shared")){ + if(!strcmp(tokens->topic, "$share")){ if(!tokens->next || !tokens->next->next){ sub__topic_tokens_free(tokens); return MOSQ_ERR_PROTOCOL; @@ -756,7 +756,7 @@ int sub__remove(struct mosquitto_db *db, struct mosquitto *context, const char * if(sub__topic_tokenise(sub, &tokens)) return 1; - if(!strcmp(tokens->topic, "$shared")){ + if(!strcmp(tokens->topic, "$share")){ if(!tokens->next || !tokens->next->next){ sub__topic_tokens_free(tokens); return MOSQ_ERR_PROTOCOL; diff --git a/test/broker/02-shared-qos0-v5.py b/test/broker/02-shared-qos0-v5.py index 96576c69..eaebcb20 100755 --- a/test/broker/02-shared-qos0-v5.py +++ b/test/broker/02-shared-qos0-v5.py @@ -3,10 +3,10 @@ # Test whether shared subscriptions work # Client 1 subscribes to #, non shared. Should receive everything. -# Client 2 subscribes to $shared/one/share-test -# Client 3 subscribes to $shared/one/share-test and $shared/two/share-test -# Client 4 subscribes to $shared/two/share-test -# Client 5 subscribes to $shared/one/share-test +# Client 2 subscribes to $share/one/share-test +# Client 3 subscribes to $share/one/share-test and $share/two/share-test +# Client 4 subscribes to $share/two/share-test +# Client 5 subscribes to $share/one/share-test # A publish to "share-test" should always go to client 1. # The first publish should also go to client 2 (share one) and client 3 (share two) @@ -37,19 +37,19 @@ connack5_packet = mosq_test.gen_connack(rc=0, proto_ver=5) subscribe1_packet = mosq_test.gen_subscribe(mid, "#", 0, proto_ver=5) suback1_packet = mosq_test.gen_suback(mid, 0, proto_ver=5) -subscribe2_packet = mosq_test.gen_subscribe(mid, "$shared/one/share-test", 0, proto_ver=5) +subscribe2_packet = mosq_test.gen_subscribe(mid, "$share/one/share-test", 0, proto_ver=5) suback2_packet = mosq_test.gen_suback(mid, 0, proto_ver=5) -subscribe3a_packet = mosq_test.gen_subscribe(mid, "$shared/one/share-test", 0, proto_ver=5) +subscribe3a_packet = mosq_test.gen_subscribe(mid, "$share/one/share-test", 0, proto_ver=5) suback3a_packet = mosq_test.gen_suback(mid, 0, proto_ver=5) -subscribe3b_packet = mosq_test.gen_subscribe(mid, "$shared/two/share-test", 0, proto_ver=5) +subscribe3b_packet = mosq_test.gen_subscribe(mid, "$share/two/share-test", 0, proto_ver=5) suback3b_packet = mosq_test.gen_suback(mid, 0, proto_ver=5) -subscribe4_packet = mosq_test.gen_subscribe(mid, "$shared/two/share-test", 0, proto_ver=5) +subscribe4_packet = mosq_test.gen_subscribe(mid, "$share/two/share-test", 0, proto_ver=5) suback4_packet = mosq_test.gen_suback(mid, 0, proto_ver=5) -subscribe5_packet = mosq_test.gen_subscribe(mid, "$shared/one/share-test", 0, proto_ver=5) +subscribe5_packet = mosq_test.gen_subscribe(mid, "$share/one/share-test", 0, proto_ver=5) suback5_packet = mosq_test.gen_suback(mid, 0, proto_ver=5) publish1_packet = mosq_test.gen_publish("share-test", qos=0, payload="message1", proto_ver=5) @@ -60,19 +60,19 @@ mid = 2 unsubscribe1_packet = mosq_test.gen_unsubscribe(mid, "#", proto_ver=5) unsuback1_packet = mosq_test.gen_unsuback(mid, proto_ver=5) -unsubscribe2_packet = mosq_test.gen_unsubscribe(mid, "$shared/one/share-test", proto_ver=5) +unsubscribe2_packet = mosq_test.gen_unsubscribe(mid, "$share/one/share-test", proto_ver=5) unsuback2_packet = mosq_test.gen_unsuback(mid, proto_ver=5) -unsubscribe3a_packet = mosq_test.gen_unsubscribe(mid, "$shared/one/share-test", proto_ver=5) +unsubscribe3a_packet = mosq_test.gen_unsubscribe(mid, "$share/one/share-test", proto_ver=5) unsuback3a_packet = mosq_test.gen_unsuback(mid, proto_ver=5) -unsubscribe3b_packet = mosq_test.gen_unsubscribe(mid, "$shared/two/share-test", proto_ver=5) +unsubscribe3b_packet = mosq_test.gen_unsubscribe(mid, "$share/two/share-test", proto_ver=5) unsuback3b_packet = mosq_test.gen_unsuback(mid, proto_ver=5) -unsubscribe4_packet = mosq_test.gen_unsubscribe(mid, "$shared/two/share-test", proto_ver=5) +unsubscribe4_packet = mosq_test.gen_unsubscribe(mid, "$share/two/share-test", proto_ver=5) unsuback4_packet = mosq_test.gen_unsuback(mid, proto_ver=5) -unsubscribe5_packet = mosq_test.gen_unsubscribe(mid, "$shared/one/share-test", proto_ver=5) +unsubscribe5_packet = mosq_test.gen_unsubscribe(mid, "$share/one/share-test", proto_ver=5) unsuback5_packet = mosq_test.gen_unsuback(mid, proto_ver=5)