diff --git a/ChangeLog.txt b/ChangeLog.txt index a0312974..f6ccf7b4 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,8 @@ Broker: - Fix crash on Windows if loading a plugin fails. Closes #1866. +- 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. 1.6.12 - 2020-08-19 diff --git a/src/persist_read.c b/src/persist_read.c index df643020..0bd55112 100644 --- a/src/persist_read.c +++ b/src/persist_read.c @@ -199,13 +199,13 @@ static int persist__client_chunk_restore(struct mosquitto_db *db, 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 e6d25121..4c352eaf 100644 --- a/src/persist_write.c +++ b/src/persist_write.c @@ -177,9 +177,9 @@ static int persist__client_save(struct mosquitto_db *db, FILE *db_fptr) if(context->username){ chunk.F.username_len = 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; } rc = persist__chunk_client_write_v6(db_fptr, &chunk);