From fe4fe0102fda8bc52281c4cda8b588ada71f600d Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Wed, 11 Oct 2023 15:12:49 +0100 Subject: [PATCH] Place client context in mosquitto_control_cmd for API simplicity --- include/mosquitto_control.h | 3 +- plugins/dynamic-security/clients.c | 66 +++++++++---------- plugins/dynamic-security/control.c | 64 +++++++++---------- plugins/dynamic-security/default_acl.c | 12 ++-- plugins/dynamic-security/dynamic_security.h | 62 +++++++++--------- plugins/dynamic-security/groups.c | 70 ++++++++++----------- plugins/dynamic-security/roles.c | 42 ++++++------- src/broker_control.c | 20 +++--- src/control_common.c | 9 +-- 9 files changed, 175 insertions(+), 173 deletions(-) diff --git a/include/mosquitto_control.h b/include/mosquitto_control.h index 6f8d501a..4b519361 100644 --- a/include/mosquitto_control.h +++ b/include/mosquitto_control.h @@ -42,6 +42,7 @@ extern "C" { * ========================================================================= */ struct mosquitto_control_cmd{ + struct mosquitto *client; cJSON *j_responses; cJSON *j_command; char *correlation_data; @@ -51,7 +52,7 @@ struct mosquitto_control_cmd{ mosq_EXPORT void mosquitto_control_command_reply(struct mosquitto_control_cmd *cmd, const char *error); mosq_EXPORT void mosquitto_control_send_response(cJSON *tree, const char* topic); mosq_EXPORT int mosquitto_control_generic_callback(struct mosquitto_evt_control *event_data, const char *response_topic, void *userdata, - int (*cmd_cb)(struct mosquitto_control_cmd *cmd, struct mosquitto *context, void *userdata)); + int (*cmd_cb)(struct mosquitto_control_cmd *cmd, void *userdata)); #ifdef __cplusplus } diff --git a/plugins/dynamic-security/clients.c b/plugins/dynamic-security/clients.c index 40710725..0f2bc2dc 100644 --- a/plugins/dynamic-security/clients.c +++ b/plugins/dynamic-security/clients.c @@ -308,7 +308,7 @@ int dynsec_clients__config_save(struct dynsec__data *data, cJSON *tree) } -int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *password, *clientid = NULL; const char *text_name, *text_description; @@ -450,8 +450,8 @@ int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_c mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | createClient | username=%s | password=%s", admin_clientid, admin_username, username, password?"*****":"no password"); @@ -459,7 +459,7 @@ int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_c } -int dynsec_clients__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username; struct dynsec__client *client; @@ -481,8 +481,8 @@ int dynsec_clients__process_delete(struct dynsec__data *data, struct mosquitto_c /* Enforce any changes */ dynsec_kicklist__add(data, username); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | deleteClient | username=%s", admin_clientid, admin_username, username); @@ -493,7 +493,7 @@ int dynsec_clients__process_delete(struct dynsec__data *data, struct mosquitto_c } } -int dynsec_clients__process_disable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_disable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username; struct dynsec__client *client; @@ -521,8 +521,8 @@ int dynsec_clients__process_disable(struct dynsec__data *data, struct mosquitto_ dynsec__config_batch_save(data); mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | disableClient | username=%s", admin_clientid, admin_username, username); @@ -530,7 +530,7 @@ int dynsec_clients__process_disable(struct dynsec__data *data, struct mosquitto_ } -int dynsec_clients__process_enable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_enable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username; struct dynsec__client *client; @@ -556,8 +556,8 @@ int dynsec_clients__process_enable(struct dynsec__data *data, struct mosquitto_c dynsec__config_batch_save(data); mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | enableClient | username=%s", admin_clientid, admin_username, username); @@ -565,7 +565,7 @@ int dynsec_clients__process_enable(struct dynsec__data *data, struct mosquitto_c } -int dynsec_clients__process_set_id(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_set_id(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *clientid; char *clientid_heap = NULL; @@ -619,8 +619,8 @@ int dynsec_clients__process_set_id(struct dynsec__data *data, struct mosquitto_c /* Enforce any changes */ dynsec_kicklist__add(data, username); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | setClientId | username=%s | clientid=%s", admin_clientid, admin_username, username, client->clientid); @@ -641,7 +641,7 @@ static int client__set_password(struct dynsec__client *client, const char *passw } } -int dynsec_clients__process_set_password(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_set_password(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *password; struct dynsec__client *client; @@ -679,8 +679,8 @@ int dynsec_clients__process_set_password(struct dynsec__data *data, struct mosqu /* Enforce any changes */ dynsec_kicklist__add(data, username); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | setClientPassword | username=%s | password=******", admin_clientid, admin_username, username); }else{ @@ -708,7 +708,7 @@ static void client__remove_all_roles(struct dynsec__client *client) } } -int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username; char *clientid = NULL; @@ -875,8 +875,8 @@ int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_c /* Enforce any changes */ dynsec_kicklist__add(data, username); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | modifyClient | username=%s", admin_clientid, admin_username, username); return MOSQ_ERR_SUCCESS; @@ -1005,7 +1005,7 @@ static cJSON *add_client_to_json(struct dynsec__client *client, bool verbose) } -int dynsec_clients__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username; struct dynsec__client *client; @@ -1052,8 +1052,8 @@ int dynsec_clients__process_get(struct dynsec__data *data, struct mosquitto_cont cJSON_AddItemToObject(j_data, "client", j_client); cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | getClient | username=%s", admin_clientid, admin_username, username); @@ -1061,7 +1061,7 @@ int dynsec_clients__process_get(struct dynsec__data *data, struct mosquitto_cont } -int dynsec_clients__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { bool verbose; struct dynsec__client *client, *client_tmp; @@ -1113,8 +1113,8 @@ int dynsec_clients__process_list(struct dynsec__data *data, struct mosquitto_con } cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | listClients | verbose=%s | count=%d | offset=%d", admin_clientid, admin_username, verbose?"true":"false", count, offset); @@ -1122,7 +1122,7 @@ int dynsec_clients__process_list(struct dynsec__data *data, struct mosquitto_con } -int dynsec_clients__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *rolename; struct dynsec__client *client; @@ -1171,8 +1171,8 @@ int dynsec_clients__process_add_role(struct dynsec__data *data, struct mosquitto /* Enforce any changes */ dynsec_kicklist__add(data, username); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | addClientRole | username=%s | rolename=%s | priority=%d", admin_clientid, admin_username, username, rolename, priority); @@ -1180,7 +1180,7 @@ int dynsec_clients__process_add_role(struct dynsec__data *data, struct mosquitto } -int dynsec_clients__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_clients__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *rolename; struct dynsec__client *client; @@ -1225,8 +1225,8 @@ int dynsec_clients__process_remove_role(struct dynsec__data *data, struct mosqui /* Enforce any changes */ dynsec_kicklist__add(data, username); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | removeClientRole | username=%s | rolename=%s", admin_clientid, admin_username, username, rolename); diff --git a/plugins/dynamic-security/control.c b/plugins/dynamic-security/control.c index e7890be7..7d5aa8db 100644 --- a/plugins/dynamic-security/control.c +++ b/plugins/dynamic-security/control.c @@ -35,80 +35,80 @@ Contributors: #define RESPONSE_TOPIC "$CONTROL/dynamic-security/v1/response" -static int dynsec__handle_command(struct mosquitto_control_cmd *cmd, struct mosquitto *context, void *userdata) +static int dynsec__handle_command(struct mosquitto_control_cmd *cmd, void *userdata) { struct dynsec__data *data = userdata; int rc = MOSQ_ERR_SUCCESS; /* Plugin */ if(!strcasecmp(cmd->command_name, "setDefaultACLAccess")){ - rc = dynsec__process_set_default_acl_access(data, cmd, context); + rc = dynsec__process_set_default_acl_access(data, cmd); }else if(!strcasecmp(cmd->command_name, "getDefaultACLAccess")){ - rc = dynsec__process_get_default_acl_access(data, cmd, context); + rc = dynsec__process_get_default_acl_access(data, cmd); /* Clients */ }else if(!strcasecmp(cmd->command_name, "createClient")){ - rc = dynsec_clients__process_create(data, cmd, context); + rc = dynsec_clients__process_create(data, cmd); }else if(!strcasecmp(cmd->command_name, "deleteClient")){ - rc = dynsec_clients__process_delete(data, cmd, context); + rc = dynsec_clients__process_delete(data, cmd); }else if(!strcasecmp(cmd->command_name, "getClient")){ - rc = dynsec_clients__process_get(data, cmd, context); + rc = dynsec_clients__process_get(data, cmd); }else if(!strcasecmp(cmd->command_name, "listClients")){ - rc = dynsec_clients__process_list(data, cmd, context); + rc = dynsec_clients__process_list(data, cmd); }else if(!strcasecmp(cmd->command_name, "modifyClient")){ - rc = dynsec_clients__process_modify(data, cmd, context); + rc = dynsec_clients__process_modify(data, cmd); }else if(!strcasecmp(cmd->command_name, "setClientPassword")){ - rc = dynsec_clients__process_set_password(data, cmd, context); + rc = dynsec_clients__process_set_password(data, cmd); }else if(!strcasecmp(cmd->command_name, "setClientId")){ - rc = dynsec_clients__process_set_id(data, cmd, context); + rc = dynsec_clients__process_set_id(data, cmd); }else if(!strcasecmp(cmd->command_name, "addClientRole")){ - rc = dynsec_clients__process_add_role(data, cmd, context); + rc = dynsec_clients__process_add_role(data, cmd); }else if(!strcasecmp(cmd->command_name, "removeClientRole")){ - rc = dynsec_clients__process_remove_role(data, cmd, context); + rc = dynsec_clients__process_remove_role(data, cmd); }else if(!strcasecmp(cmd->command_name, "enableClient")){ - rc = dynsec_clients__process_enable(data, cmd, context); + rc = dynsec_clients__process_enable(data, cmd); }else if(!strcasecmp(cmd->command_name, "disableClient")){ - rc = dynsec_clients__process_disable(data, cmd, context); + rc = dynsec_clients__process_disable(data, cmd); /* Groups */ }else if(!strcasecmp(cmd->command_name, "addGroupClient")){ - rc = dynsec_groups__process_add_client(data, cmd, context); + rc = dynsec_groups__process_add_client(data, cmd); }else if(!strcasecmp(cmd->command_name, "createGroup")){ - rc = dynsec_groups__process_create(data, cmd, context); + rc = dynsec_groups__process_create(data, cmd); }else if(!strcasecmp(cmd->command_name, "deleteGroup")){ - rc = dynsec_groups__process_delete(data, cmd, context); + rc = dynsec_groups__process_delete(data, cmd); }else if(!strcasecmp(cmd->command_name, "getGroup")){ - rc = dynsec_groups__process_get(data, cmd, context); + rc = dynsec_groups__process_get(data, cmd); }else if(!strcasecmp(cmd->command_name, "listGroups")){ - rc = dynsec_groups__process_list(data, cmd, context); + rc = dynsec_groups__process_list(data, cmd); }else if(!strcasecmp(cmd->command_name, "modifyGroup")){ - rc = dynsec_groups__process_modify(data, cmd, context); + rc = dynsec_groups__process_modify(data, cmd); }else if(!strcasecmp(cmd->command_name, "removeGroupClient")){ - rc = dynsec_groups__process_remove_client(data, cmd, context); + rc = dynsec_groups__process_remove_client(data, cmd); }else if(!strcasecmp(cmd->command_name, "addGroupRole")){ - rc = dynsec_groups__process_add_role(data, cmd, context); + rc = dynsec_groups__process_add_role(data, cmd); }else if(!strcasecmp(cmd->command_name, "removeGroupRole")){ - rc = dynsec_groups__process_remove_role(data, cmd, context); + rc = dynsec_groups__process_remove_role(data, cmd); }else if(!strcasecmp(cmd->command_name, "setAnonymousGroup")){ - rc = dynsec_groups__process_set_anonymous_group(data, cmd, context); + rc = dynsec_groups__process_set_anonymous_group(data, cmd); }else if(!strcasecmp(cmd->command_name, "getAnonymousGroup")){ - rc = dynsec_groups__process_get_anonymous_group(data, cmd, context); + rc = dynsec_groups__process_get_anonymous_group(data, cmd); /* Roles */ }else if(!strcasecmp(cmd->command_name, "createRole")){ - rc = dynsec_roles__process_create(data, cmd, context); + rc = dynsec_roles__process_create(data, cmd); }else if(!strcasecmp(cmd->command_name, "getRole")){ - rc = dynsec_roles__process_get(data, cmd, context); + rc = dynsec_roles__process_get(data, cmd); }else if(!strcasecmp(cmd->command_name, "listRoles")){ - rc = dynsec_roles__process_list(data, cmd, context); + rc = dynsec_roles__process_list(data, cmd); }else if(!strcasecmp(cmd->command_name, "modifyRole")){ - rc = dynsec_roles__process_modify(data, cmd, context); + rc = dynsec_roles__process_modify(data, cmd); }else if(!strcasecmp(cmd->command_name, "deleteRole")){ - rc = dynsec_roles__process_delete(data, cmd, context); + rc = dynsec_roles__process_delete(data, cmd); }else if(!strcasecmp(cmd->command_name, "addRoleACL")){ - rc = dynsec_roles__process_add_acl(data, cmd, context); + rc = dynsec_roles__process_add_acl(data, cmd); }else if(!strcasecmp(cmd->command_name, "removeRoleACL")){ - rc = dynsec_roles__process_remove_acl(data, cmd, context); + rc = dynsec_roles__process_remove_acl(data, cmd); /* Unknown */ }else{ diff --git a/plugins/dynamic-security/default_acl.c b/plugins/dynamic-security/default_acl.c index 19eb147a..41a3f4f4 100644 --- a/plugins/dynamic-security/default_acl.c +++ b/plugins/dynamic-security/default_acl.c @@ -33,7 +33,7 @@ Contributors: #include "dynamic_security.h" -int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { cJSON *j_actions, *j_action; bool allow; @@ -46,8 +46,8 @@ int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mos return MOSQ_ERR_INVAL; } - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); cJSON_ArrayForEach(j_action, j_actions){ if(json_get_string(j_action, "acltype", &acltype, false) == MOSQ_ERR_SUCCESS @@ -73,7 +73,7 @@ int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mos } -int dynsec__process_get_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec__process_get_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { cJSON *tree, *jtmp, *j_data, *j_acls, *j_acl; const char *admin_clientid, *admin_username; @@ -84,8 +84,8 @@ int dynsec__process_get_default_acl_access(struct dynsec__data *data, struct mos return MOSQ_ERR_NOMEM; } - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | getDefaultACLAccess", admin_clientid, admin_username); diff --git a/plugins/dynamic-security/dynamic_security.h b/plugins/dynamic-security/dynamic_security.h index 8136379b..580051e4 100644 --- a/plugins/dynamic-security/dynamic_security.h +++ b/plugins/dynamic-security/dynamic_security.h @@ -179,8 +179,8 @@ int dynsec_control_callback(int event, void *event_data, void *userdata); * ################################################################ */ int dynsec__acl_check_callback(int event, void *event_data, void *userdata); -int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec__process_get_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); +int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec__process_get_default_acl_access(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); /* ################################################################ @@ -202,17 +202,17 @@ int dynsec_auth__basic_auth_callback(int event, void *event_data, void *userdata void dynsec_clients__cleanup(struct dynsec__data *data); int dynsec_clients__config_load(struct dynsec__data *data, cJSON *tree); int dynsec_clients__config_save(struct dynsec__data *data, cJSON *tree); -int dynsec_clients__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_disable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_enable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_set_id(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_clients__process_set_password(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); +int dynsec_clients__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_disable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_enable(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_set_id(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_clients__process_set_password(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); struct dynsec__client *dynsec_clients__find(struct dynsec__data *data, const char *username); @@ -239,17 +239,17 @@ void dynsec_groups__cleanup(struct dynsec__data *data); int dynsec_groups__config_load(struct dynsec__data *data, cJSON *tree); int dynsec_groups__add_client(struct dynsec__data *data, const char *username, const char *groupname, int priority, bool update_config); int dynsec_groups__config_save(struct dynsec__data *data, cJSON *tree); -int dynsec_groups__process_add_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_remove_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_get_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_groups__process_set_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); +int dynsec_groups__process_add_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_remove_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_get_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_groups__process_set_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); int dynsec_groups__remove_client(struct dynsec__data *data, const char *username, const char *groupname, bool update_config); struct dynsec__group *dynsec_groups__find(struct dynsec__data *data, const char *groupname); @@ -275,13 +275,13 @@ void dynsec_grouplist__remove(struct dynsec__grouplist **base_grouplist, struct void dynsec_roles__cleanup(struct dynsec__data *data); int dynsec_roles__config_load(struct dynsec__data *data, cJSON *tree); int dynsec_roles__config_save(struct dynsec__data *data, cJSON *tree); -int dynsec_roles__process_add_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_roles__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_roles__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_roles__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_roles__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_roles__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); -int dynsec_roles__process_remove_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context); +int dynsec_roles__process_add_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_roles__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_roles__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_roles__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_roles__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_roles__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); +int dynsec_roles__process_remove_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd); struct dynsec__role *dynsec_roles__find(struct dynsec__data *data, const char *rolename); diff --git a/plugins/dynamic-security/groups.c b/plugins/dynamic-security/groups.c index df9fdb1b..bbae4e02 100644 --- a/plugins/dynamic-security/groups.c +++ b/plugins/dynamic-security/groups.c @@ -102,7 +102,7 @@ static void group__free_item(struct dynsec__data *data, struct dynsec__group *gr mosquitto_free(group); } -int dynsec_groups__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname, *rolename; struct dynsec__group *group; @@ -142,8 +142,8 @@ int dynsec_groups__process_add_role(struct dynsec__data *data, struct mosquitto_ return MOSQ_ERR_SUCCESS; } - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); rc = dynsec_rolelist__group_add(group, role, priority); if(rc == MOSQ_ERR_SUCCESS){ @@ -363,7 +363,7 @@ int dynsec_groups__config_save(struct dynsec__data *data, cJSON *tree) } -int dynsec_groups__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname, *text_name, *text_description; struct dynsec__group *group = NULL; @@ -438,8 +438,8 @@ int dynsec_groups__process_create(struct dynsec__data *data, struct mosquitto_co HASH_ADD_INORDER(hh, data->groups, groupname, groupname_len, group, group_cmp); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | createGroup | groupname=%s", admin_clientid, admin_username, groupname); @@ -449,7 +449,7 @@ int dynsec_groups__process_create(struct dynsec__data *data, struct mosquitto_co } -int dynsec_groups__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname; struct dynsec__group *group; @@ -479,8 +479,8 @@ int dynsec_groups__process_delete(struct dynsec__data *data, struct mosquitto_co dynsec__config_batch_save(data); mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | deleteGroup | groupname=%s", admin_clientid, admin_username, groupname); @@ -533,7 +533,7 @@ int dynsec_groups__add_client(struct dynsec__data *data, const char *username, c } -int dynsec_groups__process_add_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_add_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *groupname; int rc; @@ -562,8 +562,8 @@ int dynsec_groups__process_add_client(struct dynsec__data *data, struct mosquitt rc = dynsec_groups__add_client(data, username, groupname, priority, true); if(rc == MOSQ_ERR_SUCCESS){ - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | addGroupClient | groupname=%s | username=%s | priority=%d", admin_clientid, admin_username, groupname, username, priority); @@ -635,7 +635,7 @@ int dynsec_groups__remove_client(struct dynsec__data *data, const char *username return MOSQ_ERR_SUCCESS; } -int dynsec_groups__process_remove_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_remove_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *username, *groupname; int rc; @@ -661,8 +661,8 @@ int dynsec_groups__process_remove_client(struct dynsec__data *data, struct mosqu rc = dynsec_groups__remove_client(data, username, groupname, true); if(rc == MOSQ_ERR_SUCCESS){ - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | removeGroupClient | groupname=%s | username=%s", admin_clientid, admin_username, groupname, username); @@ -729,7 +729,7 @@ static cJSON *add_group_to_json(struct dynsec__group *group) } -int dynsec_groups__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { bool verbose; cJSON *tree, *j_groups, *j_group, *j_data; @@ -794,8 +794,8 @@ int dynsec_groups__process_list(struct dynsec__data *data, struct mosquitto_cont cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | listGroups | verbose=%s | count=%d | offset=%d", admin_clientid, admin_username, verbose?"true":"false", count, offset); @@ -803,7 +803,7 @@ int dynsec_groups__process_list(struct dynsec__data *data, struct mosquitto_cont } -int dynsec_groups__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname; cJSON *tree, *j_group, *j_data; @@ -852,8 +852,8 @@ int dynsec_groups__process_get(struct dynsec__data *data, struct mosquitto_contr cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | getGroup | groupname=%s", admin_clientid, admin_username, groupname); @@ -861,7 +861,7 @@ int dynsec_groups__process_get(struct dynsec__data *data, struct mosquitto_contr } -int dynsec_groups__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_remove_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname, *rolename; struct dynsec__group *group; @@ -905,8 +905,8 @@ int dynsec_groups__process_remove_role(struct dynsec__data *data, struct mosquit /* Enforce any changes */ group__kick_all(data, group); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | removeGroupRole | groupname=%s | rolename=%s", admin_clientid, admin_username, groupname, rolename); @@ -914,7 +914,7 @@ int dynsec_groups__process_remove_role(struct dynsec__data *data, struct mosquit } -int dynsec_groups__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname = NULL; char *text_name = NULL, *text_description = NULL; @@ -1045,8 +1045,8 @@ int dynsec_groups__process_modify(struct dynsec__data *data, struct mosquitto_co /* Enforce any changes - kick any clients in the *new* group */ group__kick_all(data, group); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | modifyGroup | groupname=%s", admin_clientid, admin_username, groupname); @@ -1056,8 +1056,8 @@ error: mosquitto_free(text_description); dynsec_rolelist__cleanup(&rolelist); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | modifyGroup | groupname=%s", admin_clientid, admin_username, groupname); @@ -1065,7 +1065,7 @@ error: } -int dynsec_groups__process_set_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_set_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *groupname; struct dynsec__group *group = NULL; @@ -1094,15 +1094,15 @@ int dynsec_groups__process_set_anonymous_group(struct dynsec__data *data, struct /* Enforce any changes */ dynsec_kicklist__add(data, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | setAnonymousGroup | groupname=%s", admin_clientid, admin_username, groupname); return MOSQ_ERR_SUCCESS; } -int dynsec_groups__process_get_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_groups__process_get_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { cJSON *tree, *j_data, *j_group; const char *groupname; @@ -1134,8 +1134,8 @@ int dynsec_groups__process_get_anonymous_group(struct dynsec__data *data, struct cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | getAnonymousGroup", admin_clientid, admin_username); diff --git a/plugins/dynamic-security/roles.c b/plugins/dynamic-security/roles.c index 4874f963..1fbff3a2 100644 --- a/plugins/dynamic-security/roles.c +++ b/plugins/dynamic-security/roles.c @@ -338,7 +338,7 @@ int dynsec_roles__config_load(struct dynsec__data *data, cJSON *tree) } -int dynsec_roles__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_create(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *rolename; const char *text_name, *text_description; @@ -432,8 +432,8 @@ int dynsec_roles__process_create(struct dynsec__data *data, struct mosquitto_con mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | createRole | rolename=%s", admin_clientid, admin_username, rolename); @@ -471,7 +471,7 @@ static void role__remove_all_groups(struct dynsec__data *data, struct dynsec__ro } } -int dynsec_roles__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_delete(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *rolename; struct dynsec__role *role; @@ -494,8 +494,8 @@ int dynsec_roles__process_delete(struct dynsec__data *data, struct mosquitto_con dynsec__config_batch_save(data); mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | deleteRole | rolename=%s", admin_clientid, admin_username, rolename); @@ -539,7 +539,7 @@ static cJSON *add_role_to_json(struct dynsec__role *role, bool verbose) return j_role; } -int dynsec_roles__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_list(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { bool verbose; struct dynsec__role *role, *role_tmp = NULL; @@ -592,8 +592,8 @@ int dynsec_roles__process_list(struct dynsec__data *data, struct mosquitto_contr cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | listRoles | verbose=%s | count=%d | offset=%d", admin_clientid, admin_username, verbose?"true":"false", count, offset); @@ -601,7 +601,7 @@ int dynsec_roles__process_list(struct dynsec__data *data, struct mosquitto_contr } -int dynsec_roles__process_add_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_add_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *rolename; struct dynsec__role *role; @@ -686,8 +686,8 @@ int dynsec_roles__process_add_acl(struct dynsec__data *data, struct mosquitto_co role__kick_all(data, role); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | addRoleACL | rolename=%s | acltype=%s | topic=%s | priority=%d | allow=%s", admin_clientid, admin_username, rolename, acltype, topic, acl->priority, acl->allow?"true":"false"); @@ -695,7 +695,7 @@ int dynsec_roles__process_add_acl(struct dynsec__data *data, struct mosquitto_co } -int dynsec_roles__process_remove_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_remove_acl(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *rolename; struct dynsec__role *role; @@ -763,8 +763,8 @@ int dynsec_roles__process_remove_acl(struct dynsec__data *data, struct mosquitto role__kick_all(data, role); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | removeRoleACL | rolename=%s | acltype=%s | topic=%s", admin_clientid, admin_username, rolename, acltype, topic); @@ -776,7 +776,7 @@ int dynsec_roles__process_remove_acl(struct dynsec__data *data, struct mosquitto } -int dynsec_roles__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_get(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *rolename; struct dynsec__role *role; @@ -823,8 +823,8 @@ int dynsec_roles__process_get(struct dynsec__data *data, struct mosquitto_contro cJSON_AddItemToObject(j_data, "role", j_role); cJSON_AddItemToArray(cmd->j_responses, tree); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | getRole | rolename=%s", admin_clientid, admin_username, rolename); @@ -832,7 +832,7 @@ int dynsec_roles__process_get(struct dynsec__data *data, struct mosquitto_contro } -int dynsec_roles__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) +int dynsec_roles__process_modify(struct dynsec__data *data, struct mosquitto_control_cmd *cmd) { const char *rolename; const char *text_name, *text_description; @@ -932,8 +932,8 @@ int dynsec_roles__process_modify(struct dynsec__data *data, struct mosquitto_con mosquitto_control_command_reply(cmd, NULL); - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "dynsec: %s/%s | modifyRole | rolename=%s", admin_clientid, admin_username, rolename); diff --git a/src/broker_control.c b/src/broker_control.c index b0397d17..c2c0e053 100644 --- a/src/broker_control.c +++ b/src/broker_control.c @@ -37,7 +37,7 @@ Contributors: static mosquitto_plugin_id_t plg_id; -static int broker__handle_control(struct mosquitto_control_cmd *cmd, struct mosquitto *context, void *userdata); +static int broker__handle_control(struct mosquitto_control_cmd *cmd, void *userdata); static int add_plugin_info(cJSON *j_plugins, mosquitto_plugin_id_t *pid) { @@ -77,7 +77,7 @@ static int add_plugin_info(cJSON *j_plugins, mosquitto_plugin_id_t *pid) } -static int broker__process_list_plugins(struct mosquitto_control_cmd *cmd, struct mosquitto *context) +static int broker__process_list_plugins(struct mosquitto_control_cmd *cmd) { cJSON *tree, *j_data, *j_plugins; const char *admin_clientid, *admin_username; @@ -89,8 +89,8 @@ static int broker__process_list_plugins(struct mosquitto_control_cmd *cmd, struc return MOSQ_ERR_NOMEM; } - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "Broker: %s/%s | listPlugins", admin_clientid, admin_username); @@ -164,7 +164,7 @@ static int add_listener(cJSON *j_listeners, struct mosquitto__listener *listener } -static int broker__process_list_listeners(struct mosquitto_control_cmd *cmd, struct mosquitto *context) +static int broker__process_list_listeners(struct mosquitto_control_cmd *cmd) { cJSON *tree, *j_data, *j_listeners; const char *admin_clientid, *admin_username; @@ -176,8 +176,8 @@ static int broker__process_list_listeners(struct mosquitto_control_cmd *cmd, str return MOSQ_ERR_NOMEM; } - admin_clientid = mosquitto_client_id(context); - admin_username = mosquitto_client_username(context); + admin_clientid = mosquitto_client_id(cmd->client); + admin_username = mosquitto_client_username(cmd->client); mosquitto_log_printf(MOSQ_LOG_INFO, "Broker: %s/%s | listListeners", admin_clientid, admin_username); @@ -250,16 +250,16 @@ void broker_control__reload(void) * # * ################################################################ */ -static int broker__handle_control(struct mosquitto_control_cmd *cmd, struct mosquitto *context, void *userdata) +static int broker__handle_control(struct mosquitto_control_cmd *cmd, void *userdata) { int rc = MOSQ_ERR_SUCCESS; UNUSED(userdata); if(!strcasecmp(cmd->command_name, "listPlugins")){ - rc = broker__process_list_plugins(cmd, context); + rc = broker__process_list_plugins(cmd); }else if(!strcasecmp(cmd->command_name, "listListeners")){ - rc = broker__process_list_listeners(cmd, context); + rc = broker__process_list_listeners(cmd); /* Unknown */ }else{ diff --git a/src/control_common.c b/src/control_common.c index 07d1b255..328013cf 100644 --- a/src/control_common.c +++ b/src/control_common.c @@ -44,7 +44,7 @@ void mosquitto_control_send_response(cJSON *tree, const char *topic) } -static int control__generic_handle_commands(struct mosquitto_control_cmd *cmd, struct mosquitto *context, cJSON *commands, void *userdata, int (*cmd_cb)(struct mosquitto_control_cmd *cmd, struct mosquitto *context, void *userdata)) +static int control__generic_handle_commands(struct mosquitto_control_cmd *cmd, cJSON *commands, void *userdata, int (*cmd_cb)(struct mosquitto_control_cmd *cmd, void *userdata)) { cJSON *aiter, *j_tmp; const char *command; @@ -69,7 +69,7 @@ static int control__generic_handle_commands(struct mosquitto_control_cmd *cmd, s } } - cmd_cb(cmd, context, userdata); + cmd_cb(cmd, userdata); }else{ mosquitto_control_command_reply(cmd, "Missing command"); return MOSQ_ERR_INVAL; @@ -83,7 +83,7 @@ static int control__generic_handle_commands(struct mosquitto_control_cmd *cmd, s } int mosquitto_control_generic_callback(struct mosquitto_evt_control *event_data, const char *response_topic, void *userdata, - int (*cmd_cb)(struct mosquitto_control_cmd *cmd, struct mosquitto *context, void *userdata)) + int (*cmd_cb)(struct mosquitto_control_cmd *cmd, void *userdata)) { struct mosquitto_evt_control *ed = event_data; @@ -97,6 +97,7 @@ int mosquitto_control_generic_callback(struct mosquitto_evt_control *event_data, memset(&cmd, 0, sizeof(cmd)); cmd.command_name = "Unknown command"; + cmd.client = ed->client; /* Create object for responses */ j_response_tree = cJSON_CreateObject(); @@ -132,7 +133,7 @@ int mosquitto_control_generic_callback(struct mosquitto_evt_control *event_data, } /* Handle commands */ - control__generic_handle_commands(&cmd, ed->client, commands, userdata, cmd_cb); + control__generic_handle_commands(&cmd, commands, userdata, cmd_cb); cJSON_Delete(tree); mosquitto_control_send_response(j_response_tree, response_topic);