From bb1a69b7d7fbc754d813b7b83494e5ce8d2f54f3 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 8 Jul 2014 23:07:19 +0100 Subject: [PATCH] Disconnect clients consistently. --- src/context.c | 2 +- src/loop.c | 4 ++-- src/read_handle_server.c | 2 +- src/security.c | 3 +++ src/security_default.c | 4 ++-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/context.c b/src/context.c index 28f090d4..66c0d919 100644 --- a/src/context.c +++ b/src/context.c @@ -132,7 +132,7 @@ void mqtt3_context_cleanup(struct mosquitto_db *db, struct mosquitto *context, b } #endif _mosquitto_socket_close(db, context); - if(context->clean_session && db){ + if((do_free || context->clean_session) && db){ mqtt3_subs_clean_session(db, context, &db->subs); mqtt3_db_messages_delete(context); } diff --git a/src/loop.c b/src/loop.c index 83d6f071..3369f8ab 100644 --- a/src/loop.c +++ b/src/loop.c @@ -163,14 +163,14 @@ int mosquitto_main_loop(struct mosquitto_db *db, int *listensock, int listensock context->pollfd_index = pollfd_index; pollfd_index++; }else{ - mqtt3_context_disconnect(db, context); + do_disconnect(db, context); } }else{ if(db->config->connection_messages == true){ _mosquitto_log_printf(NULL, MOSQ_LOG_NOTICE, "Client %s has exceeded timeout, disconnecting.", context->id); } /* Client has exceeded keepalive*1.5 */ - mqtt3_context_disconnect(db, context); + do_disconnect(db, context); } } } diff --git a/src/read_handle_server.c b/src/read_handle_server.c index 3f9a14c4..8480883c 100644 --- a/src/read_handle_server.c +++ b/src/read_handle_server.c @@ -648,7 +648,7 @@ int mqtt3_handle_disconnect(struct mosquitto_db *db, struct mosquitto *context) _mosquitto_log_printf(NULL, MOSQ_LOG_DEBUG, "Received DISCONNECT from %s", context->id); if(context->protocol == mosq_p_mqtt311){ if((context->in_packet.command&0x0F) != 0x00){ - mqtt3_context_disconnect(db, context); + do_disconnect(db, context); return MOSQ_ERR_PROTOCOL; } } diff --git a/src/security.c b/src/security.c index a019ada5..e4ee6b8a 100644 --- a/src/security.c +++ b/src/security.c @@ -194,6 +194,9 @@ int mosquitto_security_cleanup(struct mosquitto_db *db, bool reload) int mosquitto_acl_check(struct mosquitto_db *db, struct mosquitto *context, const char *topic, int access) { + if(!context->id){ + return MOSQ_ERR_ACL_DENIED; + } if(!db->auth_plugin.lib){ return mosquitto_acl_check_default(db, context, topic, access); }else{ diff --git a/src/security_default.c b/src/security_default.c index 131bf3f8..ff79555f 100644 --- a/src/security_default.c +++ b/src/security_default.c @@ -703,13 +703,13 @@ int mosquitto_security_apply_default(struct mosquitto_db *db) /* Check for anonymous clients when allow_anonymous is false */ if(!allow_anonymous && !context->username){ context->state = mosq_cs_disconnecting; - _mosquitto_socket_close(db, context); + do_disconnect(db, context); continue; } /* Check for connected clients that are no longer authorised */ if(mosquitto_unpwd_check_default(db, context->username, context->password) != MOSQ_ERR_SUCCESS){ context->state = mosq_cs_disconnecting; - _mosquitto_socket_close(db, context); + do_disconnect(db, context); continue; } /* Check for ACLs and apply to user. */