From e7a4e73cd8eb0b2e96f4fbd4f4090e258455b52f Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 12 Nov 2020 17:36:49 +0000 Subject: [PATCH] Fix listener not being reassociated with client. This occurred when reloading a persistence file and `per_listener_settings true` is set and the client did not set a username. Closes #1891. Thanks to Mikkel Nepper-Christensen. --- ChangeLog.txt | 3 +++ src/persist_read.c | 14 +++++++------- src/persist_write.c | 6 +++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index f9df3acd..50335ed8 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -78,6 +78,9 @@ Broker: - Add the `bridge_bind_address` option. Closes #1311. - Fix crash on Windows if loading a plugin fails. Closes #1866. - TLS certificates for the server are now reloaded on SIGHUP. +- Fix listener not being reassociated with client when reloading a persistence + file and `per_listener_settings true` is set and the client did not set a + username. Closes #1891. Client library: - Client no longer generates random client ids for v3.1.1 clients, these are diff --git a/src/persist_read.c b/src/persist_read.c index 1ec2cd09..9098a180 100644 --- a/src/persist_read.c +++ b/src/persist_read.c @@ -202,13 +202,13 @@ static int persist__client_chunk_restore(FILE *db_fptr) /* username is not freed here, it is now owned by context */ context->username = chunk.username; chunk.username = NULL; - /* in per_listener_settings mode, try to find the listener by persisted port */ - if(db.config->per_listener_settings && !context->listener && chunk.F.listener_port > 0){ - for(i=0; i < db.config->listener_count; i++){ - if(db.config->listeners[i].port == chunk.F.listener_port){ - context->listener = &db.config->listeners[i]; - break; - } + } + /* in per_listener_settings mode, try to find the listener by persisted port */ + if(db.config->per_listener_settings && !context->listener && chunk.F.listener_port > 0){ + for(i=0; i < db.config->listener_count; i++){ + if(db.config->listeners[i].port == chunk.F.listener_port){ + context->listener = &db.config->listeners[i]; + break; } } } diff --git a/src/persist_write.c b/src/persist_write.c index 84d9efbd..cb65aa13 100644 --- a/src/persist_write.c +++ b/src/persist_write.c @@ -174,9 +174,9 @@ static int persist__client_save(FILE *db_fptr) if(context->username){ chunk.F.username_len = (uint16_t)strlen(context->username); chunk.username = context->username; - if(context->listener){ - chunk.F.listener_port = context->listener->port; - } + } + if(context->listener){ + chunk.F.listener_port = context->listener->port; } if(chunk.F.id_len == 0){