Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mosquitto for openSUSE:Factory checked in at 2024-10-20 10:07:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mosquitto (Old) and /work/SRC/openSUSE:Factory/.mosquitto.new.26871 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mosquitto" Sun Oct 20 10:07:15 2024 rev:32 rq:1209000 version:2.0.20 Changes: -------- --- /work/SRC/openSUSE:Factory/mosquitto/mosquitto.changes 2024-10-03 17:45:02.755901584 +0200 +++ /work/SRC/openSUSE:Factory/.mosquitto.new.26871/mosquitto.changes 2024-10-20 10:07:29.895492414 +0200 @@ -1,0 +2,10 @@ +Sat Oct 19 08:56:14 UTC 2024 - Martin Hauke <mar...@gmx.de> + +- Update to version 2.0.20 + Broker: + - Fix QoS 1 / QoS 2 publish incorrectly returning + "no subscribers". + - Don't allow invalid response topic values. + - Fix some strict protocol compliance issues. + +------------------------------------------------------------------- Old: ---- mosquitto-2.0.19.tar.gz mosquitto-2.0.19.tar.gz.sig New: ---- mosquitto-2.0.20.tar.gz mosquitto-2.0.20.tar.gz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mosquitto.spec ++++++ --- /var/tmp/diff_new_pack.61CmJA/_old 2024-10-20 10:07:30.675525750 +0200 +++ /var/tmp/diff_new_pack.61CmJA/_new 2024-10-20 10:07:30.675525750 +0200 @@ -20,7 +20,7 @@ %define c_lib libmosquitto1 %define cpp_lib libmosquittopp1 Name: mosquitto -Version: 2.0.19 +Version: 2.0.20 Release: 0 Summary: A MQTT v3.1/v3.1.1 Broker License: EPL-1.0 ++++++ mosquitto-2.0.19.tar.gz -> mosquitto-2.0.20.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/CMakeLists.txt new/mosquitto-2.0.20/CMakeLists.txt --- old/mosquitto-2.0.19/CMakeLists.txt 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/CMakeLists.txt 2024-10-16 21:25:30.000000000 +0200 @@ -8,7 +8,7 @@ cmake_policy(SET CMP0042 NEW) project(mosquitto) -set (VERSION 2.0.19) +set (VERSION 2.0.20) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") @@ -20,7 +20,7 @@ endif (WIN32) if(APPLE) - set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -undefined dynamic_lookup") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -undefined dynamic_lookup") endif(APPLE) include(GNUInstallDirs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/ChangeLog.txt new/mosquitto-2.0.20/ChangeLog.txt --- old/mosquitto-2.0.19/ChangeLog.txt 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/ChangeLog.txt 2024-10-16 21:25:30.000000000 +0200 @@ -1,3 +1,20 @@ +2.0.20 - 2024-10-16 +=================== + +Broker: +- Fix QoS 1 / QoS 2 publish incorrectly returning "no subscribers". + Closes #3128. +- Open files with appropriate access on Windows. Closes #3119. +- Don't allow invalid response topic values. +- Fix some strict protocol compliance issues. Closes #3052. + +Client library: +- Fix cmake build on OS X. Closes #3125. + +Build: +- Fix build on NetBSD + + 2.0.19 - 2024-10-02 =================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/README.md new/mosquitto-2.0.20/README.md --- old/mosquitto-2.0.19/README.md 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/README.md 2024-10-16 21:25:30.000000000 +0200 @@ -30,7 +30,7 @@ ## Quick start If you have installed a binary package the broker should have been started -automatically. If not, it can be started with a basic configuration: +automatically. If not, it can be started with a very basic configuration: mosquitto @@ -42,6 +42,23 @@ mosquitto_pub -t 'test/topic' -m 'hello world' +Note that starting the broker like this allows anonymous/unauthenticated access +but only from the local computer, so it's only really useful for initial testing. + +If you want to have clients from another computer connect, you will need to +provide a configuration file. If you have installed from a binary package, you +will probably already have a configuration file at somewhere like +`/etc/mosquitto/mosquitto.conf`. If you've compiled from source, you can write +your config file then run as `mosquitto -c /path/to/mosquitto.conf`. + +To start your config file you define a listener and you will need to think +about what authentication you require. It is not advised to run your broker +with anonymous access when it is publically available. + +For details on how to do this, look at the +[authentication methods](https://mosquitto.org/documentation/authentication-methods/) +available and the [dynamic security plugin](https://mosquitto.org/documentation/dynamic-security/). + ## Documentation Documentation for the broker, clients and client library API can be found in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/apps/db_dump/Makefile new/mosquitto-2.0.20/apps/db_dump/Makefile --- old/mosquitto-2.0.19/apps/db_dump/Makefile 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/apps/db_dump/Makefile 2024-10-16 21:25:30.000000000 +0200 @@ -18,6 +18,7 @@ stubs.o \ time_mosq.o \ topic_tok.o \ + util_topic.o \ utf8_mosq.o .PHONY: all clean reallyclean @@ -75,6 +76,9 @@ topic_tok.o : ../../src/topic_tok.c ${CROSS_COMPILE}${CC} $(CFLAGS_FINAL) -c $< -o $@ +util_topic.o : ../../lib/util_topic.c + ${CROSS_COMPILE}${CC} $(CFLAGS_FINAL) -c $< -o $@ + utf8_mosq.o : ../../lib/utf8_mosq.c ${CROSS_COMPILE}${CC} $(CFLAGS_FINAL) -c $< -o $@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/config.h new/mosquitto-2.0.20/config.h --- old/mosquitto-2.0.19/config.h 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/config.h 2024-10-16 21:25:30.000000000 +0200 @@ -7,8 +7,6 @@ #ifdef __APPLE__ # define __DARWIN_C_SOURCE #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__SYMBIAN32__) -# define _XOPEN_SOURCE 700 -# define __BSD_VISIBLE 1 # define HAVE_NETINET_IN_H #elif defined(__QNX__) # define _XOPEN_SOURCE 600 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/config.mk new/mosquitto-2.0.20/config.mk --- old/mosquitto-2.0.19/config.mk 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/config.mk 2024-10-16 21:25:30.000000000 +0200 @@ -130,7 +130,7 @@ # Also bump lib/mosquitto.h, CMakeLists.txt, # installer/mosquitto.nsi, installer/mosquitto64.nsi -VERSION=2.0.19 +VERSION=2.0.20 # Client library SO version. Bump if incompatible API/ABI changes are made. SOVERSION=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/include/mosquitto.h new/mosquitto-2.0.20/include/mosquitto.h --- old/mosquitto-2.0.19/include/mosquitto.h 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/include/mosquitto.h 2024-10-16 21:25:30.000000000 +0200 @@ -66,7 +66,7 @@ #define LIBMOSQUITTO_MAJOR 2 #define LIBMOSQUITTO_MINOR 0 -#define LIBMOSQUITTO_REVISION 19 +#define LIBMOSQUITTO_REVISION 20 /* LIBMOSQUITTO_VERSION_NUMBER looks like 1002001 for e.g. version 1.2.1. */ #define LIBMOSQUITTO_VERSION_NUMBER (LIBMOSQUITTO_MAJOR*1000000+LIBMOSQUITTO_MINOR*1000+LIBMOSQUITTO_REVISION) @@ -1601,7 +1601,7 @@ * private key for a TLS connection will be obtained. Defaults to * "pem", a normal private key file. * - * MOSQ_OPT_TLS_KPASS_SHA1 - Where the TLS Engine requires the use of + * MOSQ_OPT_TLS_ENGINE_KPASS_SHA1 - Where the TLS Engine requires the use of * a password to be accessed, this option allows a hex encoded * SHA1 hash of the private key password to be passed to the * engine directly. Must be set before <mosquitto_connect>. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/installer/mosquitto.nsi new/mosquitto-2.0.20/installer/mosquitto.nsi --- old/mosquitto-2.0.19/installer/mosquitto.nsi 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/installer/mosquitto.nsi 2024-10-16 21:25:30.000000000 +0200 @@ -9,7 +9,7 @@ !define env_hklm 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' Name "Eclipse Mosquitto" -!define VERSION 2.0.19 +!define VERSION 2.0.20 OutFile "mosquitto-${VERSION}-install-windows-x86.exe" InstallDir "$PROGRAMFILES\mosquitto" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/installer/mosquitto64.nsi new/mosquitto-2.0.20/installer/mosquitto64.nsi --- old/mosquitto-2.0.19/installer/mosquitto64.nsi 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/installer/mosquitto64.nsi 2024-10-16 21:25:30.000000000 +0200 @@ -9,7 +9,7 @@ !define env_hklm 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' Name "Eclipse Mosquitto" -!define VERSION 2.0.19 +!define VERSION 2.0.20 OutFile "mosquitto-${VERSION}-install-windows-x64.exe" !include "x64.nsh" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/CMakeLists.txt new/mosquitto-2.0.20/lib/CMakeLists.txt --- old/mosquitto-2.0.19/lib/CMakeLists.txt 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/CMakeLists.txt 2024-10-16 21:25:30.000000000 +0200 @@ -4,6 +4,7 @@ endif (WITH_LIB_CPP) include_directories(${mosquitto_SOURCE_DIR} ${mosquitto_SOURCE_DIR}/lib + ${OPENSSL_INCLUDE_DIR} # Required for cross compilation ${mosquitto_SOURCE_DIR}/include ${STDBOOL_H_PATH} ${STDINT_H_PATH}) @@ -105,10 +106,15 @@ OUTPUT_NAME mosquitto VERSION ${VERSION} SOVERSION 1 - LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.version - LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.version" ) +if(UNIX AND NOT APPLE) + set_target_properties(libmosquitto PROPERTIES + LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.version + LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.version" + ) +endif() + install(TARGETS libmosquitto RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/dummypthread.h new/mosquitto-2.0.20/lib/dummypthread.h --- old/mosquitto-2.0.19/lib/dummypthread.h 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/dummypthread.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -#ifndef DUMMYPTHREAD_H -#define DUMMYPTHREAD_H - -#define pthread_create(A, B, C, D) -#define pthread_join(A, B) -#define pthread_cancel(A) -#define pthread_testcancel() - -#define pthread_mutex_init(A, B) -#define pthread_mutex_destroy(A) -#define pthread_mutex_lock(A) -#define pthread_mutex_unlock(A) - -#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/handle_pubackcomp.c new/mosquitto-2.0.20/lib/handle_pubackcomp.c --- old/mosquitto-2.0.19/lib/handle_pubackcomp.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/handle_pubackcomp.c 2024-10-16 21:25:30.000000000 +0200 @@ -57,9 +57,9 @@ } } - pthread_mutex_lock(&mosq->msgs_out.mutex); + COMPAT_pthread_mutex_lock(&mosq->msgs_out.mutex); util__increment_send_quota(mosq); - pthread_mutex_unlock(&mosq->msgs_out.mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgs_out.mutex); rc = packet__read_uint16(&mosq->in_packet, &mid); if(rc) return rc; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/misc_mosq.c new/mosquitto-2.0.20/lib/misc_mosq.c --- old/mosquitto-2.0.19/lib/misc_mosq.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/misc_mosq.c 2024-10-16 21:25:30.000000000 +0200 @@ -67,24 +67,31 @@ DWORD ulen = UNLEN; SECURITY_DESCRIPTOR sd; DWORD dwCreationDisposition; + DWORD dwShareMode; int fd; FILE *fptr; switch(mode[0]){ case 'a': dwCreationDisposition = OPEN_ALWAYS; + dwShareMode = GENERIC_WRITE; flags = _O_APPEND; break; case 'r': dwCreationDisposition = OPEN_EXISTING; + dwShareMode = GENERIC_READ; flags = _O_RDONLY; break; case 'w': dwCreationDisposition = CREATE_ALWAYS; + dwShareMode = GENERIC_WRITE; break; default: return NULL; } + if(mode[1] == '+'){ + dwShareMode = GENERIC_READ | GENERIC_WRITE; + } GetUserNameA(username, &ulen); if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) { @@ -104,7 +111,7 @@ sec.bInheritHandle = FALSE; sec.lpSecurityDescriptor = &sd; - hfile = CreateFileA(buf, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, + hfile = CreateFileA(buf, dwShareMode, FILE_SHARE_READ, &sec, dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/mosquitto_internal.h new/mosquitto-2.0.20/lib/mosquitto_internal.h --- old/mosquitto-2.0.19/lib/mosquitto_internal.h 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/mosquitto_internal.h 2024-10-16 21:25:30.000000000 +0200 @@ -33,11 +33,7 @@ #endif #include <stdlib.h> -#if defined(WITH_THREADING) && !defined(WITH_BROKER) -# include <pthread.h> -#else -# include <dummypthread.h> -#endif +#include <pthread_compat.h> #ifdef WITH_SRV # include <ares.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/packet_mosq.c new/mosquitto-2.0.20/lib/packet_mosq.c --- old/mosquitto-2.0.19/lib/packet_mosq.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/packet_mosq.c 2024-10-16 21:25:30.000000000 +0200 @@ -129,13 +129,13 @@ void packet__cleanup_all(struct mosquitto *mosq) { - pthread_mutex_lock(&mosq->current_out_packet_mutex); - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); packet__cleanup_all_no_locks(mosq); - pthread_mutex_unlock(&mosq->out_packet_mutex); - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); } @@ -151,7 +151,7 @@ packet->to_process = packet->packet_length; packet->next = NULL; - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); #ifdef WITH_BROKER if(db.config->max_queued_messages > 0 && mosq->out_packet_count >= db.config->max_queued_messages){ @@ -174,7 +174,7 @@ } mosq->out_packet_last = packet; mosq->out_packet_count++; - pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); #ifdef WITH_BROKER # ifdef WITH_WEBSOCKETS if(mosq->wsi){ @@ -232,8 +232,8 @@ if(!mosq) return MOSQ_ERR_INVAL; if(mosq->sock == INVALID_SOCKET) return MOSQ_ERR_NO_CONN; - pthread_mutex_lock(&mosq->current_out_packet_mutex); - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); if(mosq->out_packet && !mosq->current_out_packet){ mosq->current_out_packet = mosq->out_packet; mosq->out_packet = mosq->out_packet->next; @@ -242,7 +242,7 @@ } mosq->out_packet_count--; } - pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); #ifdef WITH_BROKER if(mosq->current_out_packet){ @@ -252,7 +252,7 @@ state = mosquitto__get_state(mosq); if(state == mosq_cs_connect_pending){ - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); return MOSQ_ERR_SUCCESS; } @@ -274,10 +274,10 @@ || errno == WSAENOTCONN #endif ){ - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); return MOSQ_ERR_SUCCESS; }else{ - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); switch(errno){ case COMPAT_ECONNRESET: return MOSQ_ERR_CONN_LOST; @@ -296,7 +296,7 @@ if(((packet->command)&0xF6) == CMD_PUBLISH){ G_PUB_MSGS_SENT_INC(1); #ifndef WITH_BROKER - pthread_mutex_lock(&mosq->callback_mutex); + COMPAT_pthread_mutex_lock(&mosq->callback_mutex); if(mosq->on_publish){ /* This is a QoS=0 message */ mosq->in_callback = true; @@ -309,7 +309,7 @@ mosq->on_publish_v5(mosq, mosq->userdata, packet->mid, 0, NULL); mosq->in_callback = false; } - pthread_mutex_unlock(&mosq->callback_mutex); + COMPAT_pthread_mutex_unlock(&mosq->callback_mutex); }else if(((packet->command)&0xF0) == CMD_DISCONNECT){ do_client_disconnect(mosq, MOSQ_ERR_SUCCESS, NULL); packet__cleanup(packet); @@ -321,7 +321,7 @@ } /* Free data and reset values */ - pthread_mutex_lock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex); mosq->current_out_packet = mosq->out_packet; if(mosq->out_packet){ mosq->out_packet = mosq->out_packet->next; @@ -330,7 +330,7 @@ } mosq->out_packet_count--; } - pthread_mutex_unlock(&mosq->out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex); packet__cleanup(packet); mosquitto__free(packet); @@ -338,9 +338,9 @@ #ifdef WITH_BROKER mosq->next_msg_out = db.now_s + mosq->keepalive; #else - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->next_msg_out = mosquitto_time() + mosq->keepalive; - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); #endif } #ifdef WITH_BROKER @@ -348,7 +348,7 @@ mux__remove_out(mosq); } #endif - pthread_mutex_unlock(&mosq->current_out_packet_mutex); + COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex); return MOSQ_ERR_SUCCESS; } @@ -536,9 +536,9 @@ #ifdef WITH_BROKER keepalive__update(mosq); #else - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->last_msg_in = mosquitto_time(); - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); #endif } return MOSQ_ERR_SUCCESS; @@ -571,9 +571,9 @@ #ifdef WITH_BROKER keepalive__update(mosq); #else - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->last_msg_in = mosquitto_time(); - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); #endif return rc; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/property_mosq.c new/mosquitto-2.0.20/lib/property_mosq.c --- old/mosquitto-2.0.19/lib/property_mosq.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/property_mosq.c 2024-10-16 21:25:30.000000000 +0200 @@ -958,6 +958,10 @@ if(p->value.i16 == 0){ return MOSQ_ERR_PROTOCOL; } + }else if(p->identifier == MQTT_PROP_RESPONSE_TOPIC){ + if(mosquitto_pub_topic_check(p->value.s.v) != MOSQ_ERR_SUCCESS){ + return MOSQ_ERR_PROTOCOL; + } } /* Check for properties on incorrect commands */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/pthread_compat.h new/mosquitto-2.0.20/lib/pthread_compat.h --- old/mosquitto-2.0.19/lib/pthread_compat.h 1970-01-01 01:00:00.000000000 +0100 +++ new/mosquitto-2.0.20/lib/pthread_compat.h 2024-10-16 21:25:30.000000000 +0200 @@ -0,0 +1,28 @@ +#ifndef PTHREAD_COMPAT_ +#define PTHREAD_COMPAT_ + +#if defined(WITH_THREADING) && !defined(WITH_BROKER) +# include <pthread.h> + +# define COMPAT_pthread_create(A, B, C, D) pthread_create((A), (B), (C), (D)) +# define COMPAT_pthread_join(A, B) pthread_join((A), (B)) +# define COMPAT_pthread_cancel(A) pthread_cancel((A)) +# define COMPAT_pthread_testcancel() pthread_testcancel() + +# define COMPAT_pthread_mutex_init(A, B) pthread_mutex_init((A), (B)) +# define COMPAT_pthread_mutex_destroy(A) pthread_mutex_init((A)) +# define COMPAT_pthread_mutex_lock(A) pthread_mutex_lock((A)) +# define COMPAT_pthread_mutex_unlock(A) pthread_mutex_unlock((A)) +#else +# define COMPAT_pthread_create(A, B, C, D) +# define COMPAT_pthread_join(A, B) +# define COMPAT_pthread_cancel(A) +# define COMPAT_pthread_testcancel() + +# define COMPAT_pthread_mutex_init(A, B) +# define COMPAT_pthread_mutex_destroy(A) +# define COMPAT_pthread_mutex_lock(A) +# define COMPAT_pthread_mutex_unlock(A) +#endif + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/util_mosq.c new/mosquitto-2.0.20/lib/util_mosq.c --- old/mosquitto-2.0.19/lib/util_mosq.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/lib/util_mosq.c 2024-10-16 21:25:30.000000000 +0200 @@ -87,10 +87,10 @@ return MOSQ_ERR_SUCCESS; } #endif - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); next_msg_out = mosq->next_msg_out; last_msg_in = mosq->last_msg_in; - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); if(mosq->keepalive && mosq->sock != INVALID_SOCKET && (now >= next_msg_out || now - last_msg_in >= mosq->keepalive)){ @@ -98,10 +98,10 @@ if(state == mosq_cs_active && mosq->ping_t == 0){ send__pingreq(mosq); /* Reset last msg times to give the server time to send a pingresp */ - pthread_mutex_lock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex); mosq->last_msg_in = now; mosq->next_msg_out = now + mosq->keepalive; - pthread_mutex_unlock(&mosq->msgtime_mutex); + COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex); }else{ #ifdef WITH_BROKER # ifdef WITH_BRIDGE @@ -118,7 +118,7 @@ }else{ rc = MOSQ_ERR_KEEPALIVE; } - pthread_mutex_lock(&mosq->callback_mutex); + COMPAT_pthread_mutex_lock(&mosq->callback_mutex); if(mosq->on_disconnect){ mosq->in_callback = true; mosq->on_disconnect(mosq, mosq->userdata, rc); @@ -129,7 +129,7 @@ mosq->on_disconnect_v5(mosq, mosq->userdata, rc, NULL); mosq->in_callback = false; } - pthread_mutex_unlock(&mosq->callback_mutex); + COMPAT_pthread_mutex_unlock(&mosq->callback_mutex); return rc; #endif @@ -150,11 +150,11 @@ uint16_t mid; assert(mosq); - pthread_mutex_lock(&mosq->mid_mutex); + COMPAT_pthread_mutex_lock(&mosq->mid_mutex); mosq->last_mid++; if(mosq->last_mid == 0) mosq->last_mid++; mid = mosq->last_mid; - pthread_mutex_unlock(&mosq->mid_mutex); + COMPAT_pthread_mutex_unlock(&mosq->mid_mutex); return mid; } @@ -280,14 +280,14 @@ int mosquitto__set_state(struct mosquitto *mosq, enum mosquitto_client_state state) { - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); #ifdef WITH_BROKER if(mosq->state != mosq_cs_disused) #endif { mosq->state = state; } - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); return MOSQ_ERR_SUCCESS; } @@ -296,9 +296,9 @@ { enum mosquitto_client_state state; - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); state = mosq->state; - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); return state; } @@ -306,18 +306,18 @@ #ifndef WITH_BROKER void mosquitto__set_request_disconnect(struct mosquitto *mosq, bool request_disconnect) { - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); mosq->request_disconnect = request_disconnect; - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); } bool mosquitto__get_request_disconnect(struct mosquitto *mosq) { bool request_disconnect; - pthread_mutex_lock(&mosq->state_mutex); + COMPAT_pthread_mutex_lock(&mosq->state_mutex); request_disconnect = mosq->request_disconnect; - pthread_mutex_unlock(&mosq->state_mutex); + COMPAT_pthread_mutex_unlock(&mosq->state_mutex); return request_disconnect; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/libmosquitto.3 new/mosquitto-2.0.20/man/libmosquitto.3 --- old/mosquitto-2.0.19/man/libmosquitto.3 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/libmosquitto.3 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: libmosquitto .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Library calls .\" Source: Mosquitto Project .\" Language: English .\" -.TH "LIBMOSQUITTO" "3" "10/02/2024" "Mosquitto Project" "Library calls" +.TH "LIBMOSQUITTO" "3" "10/16/2024" "Mosquitto Project" "Library calls" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto-tls.7 new/mosquitto-2.0.20/man/mosquitto-tls.7 --- old/mosquitto-2.0.19/man/mosquitto-tls.7 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto-tls.7 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto-tls .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Conventions and miscellaneous .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO\-TLS" "7" "10/02/2024" "Mosquitto Project" "Conventions and miscellaneous" +.TH "MOSQUITTO\-TLS" "7" "10/16/2024" "Mosquitto Project" "Conventions and miscellaneous" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -178,7 +178,7 @@ openssl x509 \-req \-in client\&.csr \-CA ca\&.crt \-CAkey ca\&.key \-CAcreateserial \-out client\&.crt \-days <duration> .RE .SH "SEE ALSO" -\fBmosquitto\fR(8), \fBmosquitto-conf\fR(5) +\fBmosquitto\fR(8), \fBmosquitto.conf\fR(5) .SH "AUTHOR" .PP Roger Light diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto-tls.7.xml new/mosquitto-2.0.20/man/mosquitto-tls.7.xml --- old/mosquitto-2.0.19/man/mosquitto-tls.7.xml 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto-tls.7.xml 2024-10-16 21:25:30.000000000 +0200 @@ -96,7 +96,7 @@ </member> <member> <citerefentry> - <refentrytitle><link xlink:href="mosquitto-conf-5.html">mosquitto-conf</link></refentrytitle> + <refentrytitle><link xlink:href="mosquitto-conf-5.html">mosquitto.conf</link></refentrytitle> <manvolnum>5</manvolnum> </citerefentry> </member> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto.8 new/mosquitto-2.0.20/man/mosquitto.8 --- old/mosquitto-2.0.19/man/mosquitto.8 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto.8 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: System management commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO" "8" "10/02/2024" "Mosquitto Project" "System management commands" +.TH "MOSQUITTO" "8" "10/16/2024" "Mosquitto Project" "System management commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto.conf.5 new/mosquitto-2.0.20/man/mosquitto.conf.5 --- old/mosquitto-2.0.19/man/mosquitto.conf.5 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto.conf.5 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto.conf .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: File formats and conventions .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO\&.CONF" "5" "10/02/2024" "Mosquitto Project" "File formats and conventions" +.TH "MOSQUITTO\&.CONF" "5" "10/16/2024" "Mosquitto Project" "File formats and conventions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_ctrl.1 new/mosquitto-2.0.20/man/mosquitto_ctrl.1 --- old/mosquitto-2.0.19/man/mosquitto_ctrl.1 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto_ctrl.1 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto_ctrl .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO_CTRL" "1" "10/02/2024" "Mosquitto Project" "Commands" +.TH "MOSQUITTO_CTRL" "1" "10/16/2024" "Mosquitto Project" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_ctrl_dynsec.1 new/mosquitto-2.0.20/man/mosquitto_ctrl_dynsec.1 --- old/mosquitto-2.0.19/man/mosquitto_ctrl_dynsec.1 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto_ctrl_dynsec.1 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto_ctrl_dynsec .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO_CTRL_DYNSE" "1" "10/02/2024" "Mosquitto Project" "Commands" +.TH "MOSQUITTO_CTRL_DYNSE" "1" "10/16/2024" "Mosquitto Project" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_passwd.1 new/mosquitto-2.0.20/man/mosquitto_passwd.1 --- old/mosquitto-2.0.19/man/mosquitto_passwd.1 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto_passwd.1 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto_passwd .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO_PASSWD" "1" "10/02/2024" "Mosquitto Project" "Commands" +.TH "MOSQUITTO_PASSWD" "1" "10/16/2024" "Mosquitto Project" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_pub.1 new/mosquitto-2.0.20/man/mosquitto_pub.1 --- old/mosquitto-2.0.19/man/mosquitto_pub.1 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto_pub.1 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto_pub .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO_PUB" "1" "10/02/2024" "Mosquitto Project" "Commands" +.TH "MOSQUITTO_PUB" "1" "10/16/2024" "Mosquitto Project" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_rr.1 new/mosquitto-2.0.20/man/mosquitto_rr.1 --- old/mosquitto-2.0.19/man/mosquitto_rr.1 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto_rr.1 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto_rr .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO_RR" "1" "10/02/2024" "Mosquitto Project" "Commands" +.TH "MOSQUITTO_RR" "1" "10/16/2024" "Mosquitto Project" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_sub.1 new/mosquitto-2.0.20/man/mosquitto_sub.1 --- old/mosquitto-2.0.19/man/mosquitto_sub.1 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mosquitto_sub.1 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mosquitto_sub .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Commands .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MOSQUITTO_SUB" "1" "10/02/2024" "Mosquitto Project" "Commands" +.TH "MOSQUITTO_SUB" "1" "10/16/2024" "Mosquitto Project" "Commands" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mqtt.7 new/mosquitto-2.0.20/man/mqtt.7 --- old/mosquitto-2.0.19/man/mqtt.7 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/man/mqtt.7 2024-10-16 21:25:30.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: mqtt .\" Author: [see the "Author" section] .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/> -.\" Date: 10/02/2024 +.\" Date: 10/16/2024 .\" Manual: Conventions and miscellaneous .\" Source: Mosquitto Project .\" Language: English .\" -.TH "MQTT" "7" "10/02/2024" "Mosquitto Project" "Conventions and miscellaneous" +.TH "MQTT" "7" "10/16/2024" "Mosquitto Project" "Conventions and miscellaneous" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/snap/snapcraft.yaml new/mosquitto-2.0.20/snap/snapcraft.yaml --- old/mosquitto-2.0.19/snap/snapcraft.yaml 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/snap/snapcraft.yaml 2024-10-16 21:25:30.000000000 +0200 @@ -1,5 +1,5 @@ name: mosquitto -version: 2.0.19 +version: 2.0.20 summary: Eclipse Mosquitto MQTT broker description: This is a message broker that supports version 5.0, 3.1.1, and 3.1 of the MQTT protocol. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/src/handle_subscribe.c new/mosquitto-2.0.20/src/handle_subscribe.c --- old/mosquitto-2.0.19/src/handle_subscribe.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/src/handle_subscribe.c 2024-10-16 21:25:30.000000000 +0200 @@ -132,6 +132,11 @@ qos = subscription_options & 0x03; subscription_options &= 0xFC; + if((subscription_options & MQTT_SUB_OPT_NO_LOCAL) && !strncmp(sub, "$share/", 7)){ + mosquitto__free(sub); + mosquitto__free(payload); + return MOSQ_ERR_PROTOCOL; + } retain_handling = (subscription_options & 0x30); if(retain_handling == 0x30 || (subscription_options & 0xC0) != 0){ mosquitto__free(sub); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/src/subs.c new/mosquitto-2.0.20/src/subs.c --- old/mosquitto-2.0.19/src/subs.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/src/subs.c 2024-10-16 21:25:30.000000000 +0200 @@ -659,6 +659,7 @@ int sub__messages_queue(const char *source_id, const char *topic, uint8_t qos, int retain, struct mosquitto_msg_store **stored) { int rc = MOSQ_ERR_SUCCESS, rc2; + int rc_normal = MOSQ_ERR_NO_SUBSCRIBERS, rc_shared = MOSQ_ERR_NO_SUBSCRIBERS; struct mosquitto__subhier *subhier; char **split_topics = NULL; char *local_topic = NULL; @@ -675,12 +676,24 @@ HASH_FIND(hh, db.normal_subs, split_topics[0], strlen(split_topics[0]), subhier); if(subhier){ - rc = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored); + rc_normal = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored); + if(rc_normal > 0){ + rc = rc_normal; + goto end; + } } HASH_FIND(hh, db.shared_subs, split_topics[0], strlen(split_topics[0]), subhier); if(subhier){ - rc = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored); + rc_shared = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored); + if(rc_shared > 0){ + rc = rc_shared; + goto end; + } + } + + if(rc_normal == MOSQ_ERR_NO_SUBSCRIBERS && rc_shared == MOSQ_ERR_NO_SUBSCRIBERS){ + rc = MOSQ_ERR_NO_SUBSCRIBERS; } if(retain){ @@ -688,6 +701,7 @@ if(rc2) rc = rc2; } +end: mosquitto__free(split_topics); mosquitto__free(local_topic); /* Remove our reference and free if needed. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/src/topic_tok.c new/mosquitto-2.0.20/src/topic_tok.c --- old/mosquitto-2.0.19/src/topic_tok.c 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/src/topic_tok.c 2024-10-16 21:25:30.000000000 +0200 @@ -97,7 +97,7 @@ } if(!strcmp((*topics)[0], "$share")){ - if(count < 2){ + if(count < 3 || (count == 3 && strlen((*topics)[2]) == 0)){ mosquitto__free(*local_sub); mosquitto__free(*topics); return MOSQ_ERR_PROTOCOL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/broker/data/CONNECT.json new/mosquitto-2.0.20/test/broker/data/CONNECT.json --- old/mosquitto-2.0.19/test/broker/data/CONNECT.json 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/test/broker/data/CONNECT.json 2024-10-16 21:25:30.000000000 +0200 @@ -41,7 +41,7 @@ {"type":"recv", "payload":"20 02 00 00", "comment": "CONNACK"}, {"type":"send", "payload":"10 0D 0004 4D515454 04 02 000A 0001 70", "comment":"minimal valid CONNECT"} ]}, - { "name": "10 missing client ID", "connect":false, "msgs":[{"type":"send", "payload":"10 08 0004 4D515454 04 02 000A"}]}, + { "name": "10 missing client ID", "connect":false, "msgs":[{"type":"send", "payload":"10 0A 0004 4D515454 04 02 000A"}]}, { "name": "10 empty client ID", "connect":false, "expect_disconnect":false, "msgs":[ {"type":"send", "payload":"10 0C 0004 4D515454 04 02 000A 0000", "comment":"CONNECT clean session true, no client id"}, {"type":"recv", "payload":"20 02 00 00", "comment": "CONNACK"} @@ -128,7 +128,7 @@ {"type":"recv", "payload":"20 02 00 00", "comment": "CONNACK"} ]}, { "name": "duplicate CONNECT", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 02 000A 0001 70", "comment":"minimal valid duplicate CONNECT"}]}, - { "name": "NanoMQ CWE-119", "msgs":[{"type":"send", "payload":"10 07 0004 4D515454 04 C2 003C 000B 746573742D707974686F6E 0005 61646d696E 0008 70617373776F7264"}]} + { "name": "NanoMQ CWE-119", "msgs":[{"type":"send", "payload":"10 28 0004 4D515454 04 C2 003C 000B 746573742D707974686F6E 0005 61646d696E 0008 70617373776F7264"}]} ] }, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/broker/data/PUBLISH.json new/mosquitto-2.0.20/test/broker/data/PUBLISH.json --- old/mosquitto-2.0.19/test/broker/data/PUBLISH.json 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/test/broker/data/PUBLISH.json 2024-10-16 21:25:30.000000000 +0200 @@ -178,7 +178,7 @@ ]}, { "name": "2*message-expiry-interval=1 (four byte integer)", "ver":5, "msgs": [ - {"type":"send", "payload":"32 1A 0005 746F706963 1234 0A 0200000001 0200000001 7061796C6F6164"}, + {"type":"send", "payload":"32 1B 0005 746F706963 1234 0A 0200000001 0200000001 7061796C6F6164"}, {"type":"recv", "payload":"E0 01 82"} ]}, { "name": "message-expiry-interval (four byte integer) missing", "ver":5, "msgs": [ @@ -211,6 +211,10 @@ {"type":"send", "payload":"32 15 0005 746F706963 1234 04 08000170 7061796C6F6164"}, {"type":"recv", "payload":"40 03 1234 10"} ]}, + { "name": "response-topic (UTF-8 string, with wildcard)", "ver":5, "msgs": [ + {"type":"send", "payload":"32 15 0005 746F706963 1234 04 08000123 7061796C6F6164"}, + {"type":"recv", "payload":"E0 01 82"} + ]}, { "name": "2*response-topic (UTF-8 string)", "ver":5, "msgs": [ {"type":"send", "payload":"32 19 0005 746F706963 1234 08 08000170 08000170 7061796C6F6164"}, {"type":"recv", "payload":"E0 01 82"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/broker/data/SUBSCRIBE.json new/mosquitto-2.0.20/test/broker/data/SUBSCRIBE.json --- old/mosquitto-2.0.19/test/broker/data/SUBSCRIBE.json 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/test/broker/data/SUBSCRIBE.json 2024-10-16 21:25:30.000000000 +0200 @@ -87,6 +87,14 @@ {"type":"send", "payload":"8A 07 1234 00 0001 70 00"}, {"type":"recv", "payload":"E0 01 81"} ]}, + { "name": "82 QoS 3 [MQTT-3-8.3-2] (no qos)", "ver":5, "msgs": [ + {"type":"send", "payload":"82 06 1234 00 0001 70"}, + {"type":"recv", "payload":"E0 01 81"} + ]}, + { "name": "82 QoS 3 [MQTT-3-8.3-2] (no topic or qos)", "ver":5, "msgs": [ + {"type":"send", "payload":"82 03 1234 00"}, + {"type":"recv", "payload":"E0 01 81"} + ]}, { "name": "82 QoS 3 [MQTT-3-8.3-4]", "ver":5, "msgs": [ {"type":"send", "payload":"82 07 1234 00 0001 70 03"}, {"type":"recv", "payload":"E0 01 81"} @@ -210,6 +218,18 @@ { "name": "82 multiple ok [MQTT-3.8.4-4]", "ver":5, "expect_disconnect":false, "msgs": [ {"type":"send", "payload":"82 0B 1234 00 0001 70 00 0001 71 00"}, {"type":"recv", "payload":"90 05 1234 00 00 00"} + ]}, + { "name": "82 shared sub with no topic part 1", "ver":5, "msgs": [ + {"type":"send", "payload":"82 0F 1234 00 0009 2473686172652F702F 00"}, + {"type":"recv", "payload":"E0 01 82"} + ]}, + { "name": "82 shared sub with no topic part 2", "ver":5, "msgs": [ + {"type":"send", "payload":"82 0E 1234 00 0008 2473686172652F70 00"}, + {"type":"recv", "payload":"E0 01 82"} + ]}, + { "name": "82 shared sub with no local set", "ver":5, "msgs": [ + {"type":"send", "payload":"82 10 1234 00 000A 2473686172652F702F70 04"}, + {"type":"recv", "payload":"E0 01 82"} ]} ] }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/lib/Makefile new/mosquitto-2.0.20/test/lib/Makefile --- old/mosquitto-2.0.19/test/lib/Makefile 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/test/lib/Makefile 2024-10-16 21:25:30.000000000 +0200 @@ -33,7 +33,7 @@ ./02-subscribe-qos0.py $@/02-subscribe-qos0.test ./02-subscribe-qos1.py $@/02-subscribe-qos1.test ./02-subscribe-qos1.py $@/02-subscribe-qos1-async1.test - ./02-subscribe-qos1.py $@/02-subscribe-qos1-async2.test + #FIXME ./02-subscribe-qos1.py $@/02-subscribe-qos1-async2.test ./02-subscribe-qos2.py $@/02-subscribe-qos2.test ./02-unsubscribe-multiple-v5.py $@/02-unsubscribe-multiple-v5.test ./02-unsubscribe-v5.py $@/02-unsubscribe-v5.test diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/unit/Makefile new/mosquitto-2.0.20/test/unit/Makefile --- old/mosquitto-2.0.19/test/unit/Makefile 2024-10-02 12:09:25.000000000 +0200 +++ new/mosquitto-2.0.20/test/unit/Makefile 2024-10-16 21:25:30.000000000 +0200 @@ -58,6 +58,7 @@ retain.o \ topic_tok.o \ utf8_mosq.o \ + util_topic.o \ util_mosq.o PERSIST_WRITE_TEST_OBJS = \ @@ -80,6 +81,7 @@ subs.o \ topic_tok.o \ utf8_mosq.o \ + util_topic.o \ util_mosq.o TLS_TEST_OBJS = \