From d8775b7d9cca3f243eacdafe85cf3640f2e21055 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 26 Nov 2020 12:18:57 +0000 Subject: [PATCH] dynsec: Consistent behaviour when setting clientid. --- plugins/dynamic-security/clients.c | 14 +++++++++----- test/broker/14-dynsec-client.py | 4 ++-- test/broker/14-dynsec-modify-client.py | 5 +++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/plugins/dynamic-security/clients.c b/plugins/dynamic-security/clients.c index dc54ae92..a8628e9f 100644 --- a/plugins/dynamic-security/clients.c +++ b/plugins/dynamic-security/clients.c @@ -697,12 +697,16 @@ int dynsec_clients__process_modify(cJSON *j_responses, struct mosquitto *context } if(json_get_string(command, "clientid", &clientid, false) == MOSQ_ERR_SUCCESS){ - str = mosquitto_strdup(clientid); - if(str == NULL){ - dynsec__command_reply(j_responses, context, "modifyClient", "Internal error", correlation_data); - return MOSQ_ERR_NOMEM; + if(clientid && strlen(clientid) > 0){ + str = mosquitto_strdup(clientid); + if(str == NULL){ + dynsec__command_reply(j_responses, context, "modifyClient", "Internal error", correlation_data); + return MOSQ_ERR_NOMEM; + } + mosquitto_free(client->clientid); + }else{ + str = NULL; } - mosquitto_free(client->clientid); client->clientid = str; } diff --git a/test/broker/14-dynsec-client.py b/test/broker/14-dynsec-client.py index 6d20bd42..3bd0e97b 100755 --- a/test/broker/14-dynsec-client.py +++ b/test/broker/14-dynsec-client.py @@ -50,9 +50,9 @@ list_clients_verbose_response = {'responses':[{"command": "listClients", "data": get_client_command = { "commands": [{ - "command": "getClient", "username": "user_one"}]} + "command": "getClient", "username": "user_one", "correlationData": "42"}]} get_client_response = {'responses':[{'command': 'getClient', 'data': {'client': {'username': 'user_one', 'clientid': 'cid', - 'textname': 'Name', 'textdescription': 'Description', 'groups': [], 'roles': []}}}]} + 'textname': 'Name', 'textdescription': 'Description', 'groups': [], 'roles': []}}, "correlationData":"42"}]} set_client_password_command = {"commands": [{ "command": "setClientPassword", "username": "user_one", "password": "password"}]} diff --git a/test/broker/14-dynsec-modify-client.py b/test/broker/14-dynsec-modify-client.py index 529a89f4..10c1466f 100755 --- a/test/broker/14-dynsec-modify-client.py +++ b/test/broker/14-dynsec-modify-client.py @@ -80,6 +80,7 @@ create_roles_response = {'responses': [ modify_client_command1 = { "commands": [{ "command": "modifyClient", "username": "user_one", "textname": "Modified name", "textdescription": "Modified description", + "clientid": "", "roles":[ {'rolename':'role_one', 'priority':2}, {'rolename':'role_two'}, @@ -112,7 +113,7 @@ get_client_response1 = {'responses':[{'command': 'getClient', 'data': {'client': get_client_command2 = { "commands": [{ "command": "getClient", "username": "user_one"}]} -get_client_response2 = {'responses':[{'command': 'getClient', 'data': {'client': {'username': 'user_one', 'clientid': 'cid', +get_client_response2 = {'responses':[{'command': 'getClient', 'data': {'client': {'username': 'user_one', 'textname': 'Modified name', 'textdescription': 'Modified description', 'roles': [ {'rolename':'role_three', 'priority':10}, @@ -126,7 +127,7 @@ get_client_response2 = {'responses':[{'command': 'getClient', 'data': {'client': get_client_command3 = { "commands": [{ "command": "getClient", "username": "user_one"}]} -get_client_response3 = {'responses':[{'command': 'getClient', 'data': {'client': {'username': 'user_one', 'clientid': 'cid', +get_client_response3 = {'responses':[{'command': 'getClient', 'data': {'client': {'username': 'user_one', 'textname': 'Modified name', 'textdescription': 'Modified description', 'groups': [], 'roles': [