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 = \

Reply via email to