diff --git a/apps/mosquitto_ctrl/broker.c b/apps/mosquitto_ctrl/broker.c index 7fea7b64..805c7509 100644 --- a/apps/mosquitto_ctrl/broker.c +++ b/apps/mosquitto_ctrl/broker.c @@ -44,7 +44,7 @@ void broker__print_usage(void) static void print_listeners(cJSON *j_response) { cJSON *j_data, *j_listeners, *j_listener, *jtmp; - char *stmp; + const char *stmp; int i=1; j_data = cJSON_GetObjectItem(j_response, "data"); @@ -89,7 +89,7 @@ static void print_listeners(cJSON *j_response) static void print_plugin_info(cJSON *j_response) { cJSON *j_data, *j_plugins, *j_plugin, *jtmp, *j_eps; - char *stmp; + const char *stmp; bool first; j_data = cJSON_GetObjectItem(j_response, "data"); @@ -171,7 +171,7 @@ static void broker__payload_callback(struct mosq_ctrl *ctrl, long payloadlen, co return; } - char *error; + const char *error; if(json_get_string(j_response, "error", &error, false) == MOSQ_ERR_SUCCESS){ fprintf(stderr, "%s: Error: %s.\n", j_command->valuestring, error); }else{ diff --git a/apps/mosquitto_ctrl/dynsec.c b/apps/mosquitto_ctrl/dynsec.c index 151b5c74..91efb0d4 100644 --- a/apps/mosquitto_ctrl/dynsec.c +++ b/apps/mosquitto_ctrl/dynsec.c @@ -116,7 +116,7 @@ static void print_list(cJSON *j_response, const char *arrayname, const char *key } cJSON_ArrayForEach(j_elem, j_array){ - char *stmp; + const char *stmp; if(cJSON_IsObject(j_elem)){ if(json_get_string(j_elem, keyname, &stmp, false) == MOSQ_ERR_SUCCESS){ @@ -152,7 +152,7 @@ static void print_json_array(cJSON *j_list, int slen, const char *label, const c if(j_list && cJSON_IsArray(j_list)){ cJSON_ArrayForEach(j_elem, j_list){ if(cJSON_IsObject(j_elem)){ - char *stmp; + const char *stmp; if(json_get_string(j_elem, element_name, &stmp, false) != MOSQ_ERR_SUCCESS){ continue; @@ -179,7 +179,7 @@ static void print_client(cJSON *j_response) { cJSON *j_data, *j_client, *jtmp; const int label_width = strlen( "Connections:"); - char *stmp; + const char *stmp; j_data = cJSON_GetObjectItem(j_response, "data"); if(j_data == NULL || !cJSON_IsObject(j_data)){ @@ -220,7 +220,7 @@ static void print_group(cJSON *j_response) { cJSON *j_data, *j_group; int label_width = strlen("Groupname:"); - char *groupname; + const char *groupname; j_data = cJSON_GetObjectItem(j_response, "data"); if(j_data == NULL || !cJSON_IsObject(j_data)){ @@ -249,7 +249,7 @@ static void print_role(cJSON *j_response) { cJSON *j_data, *j_role, *j_array, *j_elem, *jtmp; bool first; - char *stmp; + const char *stmp; j_data = cJSON_GetObjectItem(j_response, "data"); if(j_data == NULL || !cJSON_IsObject(j_data)){ @@ -273,7 +273,7 @@ static void print_role(cJSON *j_response) if(j_array && cJSON_IsArray(j_array)){ first = true; cJSON_ArrayForEach(j_elem, j_array){ - char *stmp; + const char *stmp; if(json_get_string(j_role, "rolename", &stmp, false) == MOSQ_ERR_SUCCESS){ if(first){ @@ -306,7 +306,7 @@ static void print_role(cJSON *j_response) static void print_anonymous_group(cJSON *j_response) { cJSON *j_data, *j_group; - char *groupname; + const char *groupname; j_data = cJSON_GetObjectItem(j_response, "data"); if(j_data == NULL || !cJSON_IsObject(j_data)){ @@ -344,7 +344,7 @@ static void print_default_acl_access(cJSON *j_response) } cJSON_ArrayForEach(j_acl, j_acls){ - char *acltype; + const char *acltype; bool allow; if(json_get_string(j_acl, "acltype", &acltype, false) != MOSQ_ERR_SUCCESS @@ -360,7 +360,7 @@ static void print_default_acl_access(cJSON *j_response) static void dynsec__payload_callback(struct mosq_ctrl *ctrl, long payloadlen, const void *payload) { cJSON *tree, *j_responses, *j_response; - char *command, *error; + const char *command, *error; UNUSED(ctrl); diff --git a/apps/mosquitto_ctrl/dynsec_client.c b/apps/mosquitto_ctrl/dynsec_client.c index d1498b05..68486702 100644 --- a/apps/mosquitto_ctrl/dynsec_client.c +++ b/apps/mosquitto_ctrl/dynsec_client.c @@ -231,7 +231,7 @@ int dynsec_client__file_set_password(int argc, char *argv[], const char *file) cJSON_ArrayForEach(j_client, j_clients){ if(cJSON_IsObject(j_client) == true){ - char *username_json; + const char *username_json; if(json_get_string(j_client, "username", &username_json, false) == MOSQ_ERR_SUCCESS){ if(!strcmp(username_json, username)){ if(dynsec_auth__pw_hash(&client, password, client.pw.password_hash, sizeof(client.pw.password_hash), true) != MOSQ_ERR_SUCCESS){ diff --git a/common/base64_mosq.c b/common/base64_mosq.c index 8aff1473..461e9107 100644 --- a/common/base64_mosq.c +++ b/common/base64_mosq.c @@ -36,7 +36,7 @@ Contributors: #include "memory_mosq.h" #ifdef WITH_TLS -int base64__encode(unsigned char *in, size_t in_len, char **encoded) +int base64__encode(const unsigned char *in, size_t in_len, char **encoded) { BIO *bmem, *b64; BUF_MEM *bptr = NULL; @@ -70,7 +70,7 @@ int base64__encode(unsigned char *in, size_t in_len, char **encoded) } -int base64__decode(char *in, unsigned char **decoded, unsigned int *decoded_len) +int base64__decode(const char *in, unsigned char **decoded, unsigned int *decoded_len) { BIO *bmem, *b64; size_t slen; diff --git a/common/base64_mosq.h b/common/base64_mosq.h index 04a35422..c52273a2 100644 --- a/common/base64_mosq.h +++ b/common/base64_mosq.h @@ -18,7 +18,7 @@ Contributors: #ifndef BASE64_MOSQ_H #define BASE64_MOSQ_H -int base64__encode(unsigned char *in, size_t in_len, char **encoded); -int base64__decode(char *in, unsigned char **decoded, unsigned int *decoded_len); +int base64__encode(const unsigned char *in, size_t in_len, char **encoded); +int base64__decode(const char *in, unsigned char **decoded, unsigned int *decoded_len); #endif diff --git a/common/json_help.c b/common/json_help.c index 2ca35729..b8986b4f 100644 --- a/common/json_help.c +++ b/common/json_help.c @@ -73,7 +73,7 @@ int json_get_int(cJSON *json, const char *name, int *value, bool optional, int d } -int json_get_string(cJSON *json, const char *name, char **value, bool optional) +int json_get_string(cJSON *json, const char *name, const char **value, bool optional) { cJSON *jtmp; @@ -84,7 +84,11 @@ int json_get_string(cJSON *json, const char *name, char **value, bool optional) if(cJSON_IsString(jtmp) == false){ return MOSQ_ERR_INVAL; } - *value = jtmp->valuestring; + if(jtmp->valuestring){ + *value = jtmp->valuestring; + }else{ + *value = ""; + } }else{ if(optional == false){ return MOSQ_ERR_INVAL; diff --git a/common/json_help.h b/common/json_help.h index 86226853..9d28c7e3 100644 --- a/common/json_help.h +++ b/common/json_help.h @@ -23,7 +23,7 @@ Contributors: /* "optional==false" can also be taken to mean "only return success if the key exists and is valid" */ int json_get_bool(cJSON *json, const char *name, bool *value, bool optional, bool default_value); int json_get_int(cJSON *json, const char *name, int *value, bool optional, int default_value); -int json_get_string(cJSON *json, const char *name, char **value, bool optional); +int json_get_string(cJSON *json, const char *name, const char **value, bool optional); cJSON *cJSON_AddIntToObject(cJSON * const object, const char * const name, long long number); cJSON *cJSON_CreateInt(int num); diff --git a/plugins/dynamic-security/clients.c b/plugins/dynamic-security/clients.c index b2df0fae..9fab903a 100644 --- a/plugins/dynamic-security/clients.c +++ b/plugins/dynamic-security/clients.c @@ -114,10 +114,10 @@ int dynsec_clients__config_load(struct dynsec__data *data, cJSON *tree) unsigned int buf_len; int priority; int iterations; - char *username; + const char *username; size_t username_len; - char *salt; - char *password; + const char *salt; + const char *password; j_clients = cJSON_GetObjectItem(tree, "clients"); if(j_clients == NULL){ @@ -185,7 +185,7 @@ int dynsec_clients__config_load(struct dynsec__data *data, cJSON *tree) } /* Client id */ - char *clientid; + const char *clientid; if(json_get_string(j_client, "clientid", &clientid, false) == MOSQ_ERR_SUCCESS){ client->clientid = mosquitto_strdup(clientid); if(client->clientid == NULL){ @@ -195,7 +195,7 @@ int dynsec_clients__config_load(struct dynsec__data *data, cJSON *tree) } /* Text name */ - char *textname; + const char *textname; if(json_get_string(j_client, "textname", &textname, false) == MOSQ_ERR_SUCCESS){ client->text_name = mosquitto_strdup(textname); if(client->text_name == NULL){ @@ -206,7 +206,7 @@ int dynsec_clients__config_load(struct dynsec__data *data, cJSON *tree) } /* Text description */ - char *textdescription; + const char *textdescription; if(json_get_string(j_client, "textdescription", &textdescription, false) == MOSQ_ERR_SUCCESS){ client->text_description = mosquitto_strdup(textdescription); if(client->text_description == NULL){ @@ -222,7 +222,7 @@ int dynsec_clients__config_load(struct dynsec__data *data, cJSON *tree) if(j_roles && cJSON_IsArray(j_roles)){ cJSON_ArrayForEach(j_role, j_roles){ if(cJSON_IsObject(j_role)){ - char *rolename; + const char *rolename; if(json_get_string(j_role, "rolename", &rolename, false) == MOSQ_ERR_SUCCESS){ json_get_int(j_role, "priority", &priority, true, -1); role = dynsec_roles__find(data, rolename); @@ -313,8 +313,8 @@ 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) { - char *username, *password, *clientid = NULL; - char *text_name, *text_description; + const char *username, *password, *clientid = NULL; + const char *text_name, *text_description; struct dynsec__client *client; int rc; cJSON *j_groups, *j_group; @@ -431,7 +431,7 @@ int dynsec_clients__process_create(struct dynsec__data *data, struct mosquitto_c if(j_groups && cJSON_IsArray(j_groups)){ cJSON_ArrayForEach(j_group, j_groups){ if(cJSON_IsObject(j_group)){ - char *groupname; + const char *groupname; if(json_get_string(j_group, "groupname", &groupname, false) == MOSQ_ERR_SUCCESS){ json_get_int(j_group, "priority", &priority, true, -1); rc = dynsec_groups__add_client(data, username, groupname, priority, false); @@ -464,7 +464,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) { - char *username; + const char *username; struct dynsec__client *client; const char *admin_clientid, *admin_username; @@ -498,7 +498,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) { - char *username; + const char *username; struct dynsec__client *client; const char *admin_clientid, *admin_username; @@ -535,7 +535,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) { - char *username; + const char *username; struct dynsec__client *client; const char *admin_clientid, *admin_username; @@ -570,7 +570,8 @@ 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) { - char *username, *clientid, *clientid_heap = NULL; + const char *username, *clientid; + char *clientid_heap = NULL; struct dynsec__client *client; size_t slen; const char *admin_clientid, *admin_username; @@ -645,7 +646,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) { - char *username, *password; + const char *username, *password; struct dynsec__client *client; int rc; const char *admin_clientid, *admin_username; @@ -712,15 +713,15 @@ 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) { - char *username; + const char *username; char *clientid = NULL; - char *password = NULL; + const char *password = NULL; char *text_name = NULL, *text_description = NULL; bool have_clientid = false, have_text_name = false, have_text_description = false, have_rolelist = false, have_password = false; struct dynsec__client *client; struct dynsec__group *group; struct dynsec__rolelist *rolelist = NULL; - char *str; + const char *str; int rc; int priority; cJSON *j_group, *j_groups; @@ -805,7 +806,7 @@ int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_c /* Iterate through list to check all groups are valid */ cJSON_ArrayForEach(j_group, j_groups){ if(cJSON_IsObject(j_group)){ - char *groupname; + const char *groupname; if(json_get_string(j_group, "groupname", &groupname, false) == MOSQ_ERR_SUCCESS){ group = dynsec_groups__find(data, groupname); if(group == NULL){ @@ -824,7 +825,7 @@ int dynsec_clients__process_modify(struct dynsec__data *data, struct mosquitto_c dynsec__remove_client_from_all_groups(data, username); cJSON_ArrayForEach(j_group, j_groups){ if(cJSON_IsObject(j_group)){ - char *groupname; + const char *groupname; if(json_get_string(j_group, "groupname", &groupname, false) == MOSQ_ERR_SUCCESS){ json_get_int(j_group, "priority", &priority, true, -1); dynsec_groups__add_client(data, username, groupname, priority, false); @@ -1009,7 +1010,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) { - char *username; + const char *username; struct dynsec__client *client; cJSON *tree, *j_client, *j_data; const char *admin_clientid, *admin_username; @@ -1126,7 +1127,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) { - char *username, *rolename; + const char *username, *rolename; struct dynsec__client *client; struct dynsec__role *role; int priority; @@ -1184,7 +1185,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) { - char *username, *rolename; + const char *username, *rolename; struct dynsec__client *client; struct dynsec__role *role; const char *admin_clientid, *admin_username; diff --git a/plugins/dynamic-security/default_acl.c b/plugins/dynamic-security/default_acl.c index e806ece2..19eb147a 100644 --- a/plugins/dynamic-security/default_acl.c +++ b/plugins/dynamic-security/default_acl.c @@ -38,7 +38,7 @@ int dynsec__process_set_default_acl_access(struct dynsec__data *data, struct mos cJSON *j_actions, *j_action; bool allow; const char *admin_clientid, *admin_username; - char *acltype; + const char *acltype; j_actions = cJSON_GetObjectItem(cmd->j_command, "acls"); if(j_actions == NULL || !cJSON_IsArray(j_actions)){ diff --git a/plugins/dynamic-security/groups.c b/plugins/dynamic-security/groups.c index 12e0315f..ec5986ec 100644 --- a/plugins/dynamic-security/groups.c +++ b/plugins/dynamic-security/groups.c @@ -104,7 +104,7 @@ static void group__free_item(struct dynsec__data *data, struct dynsec__group *gr int dynsec_groups__process_add_role(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) { - char *groupname, *rolename; + const char *groupname, *rolename; struct dynsec__group *group; struct dynsec__role *role; int priority; @@ -195,8 +195,8 @@ int dynsec_groups__config_load(struct dynsec__data *data, cJSON *tree) struct dynsec__group *group; struct dynsec__role *role; int priority; - char *textname, *textdescription; - char *groupname; + const char *textname, *textdescription; + const char *groupname; size_t groupname_len; j_groups = cJSON_GetObjectItem(tree, "groups"); @@ -258,7 +258,7 @@ int dynsec_groups__config_load(struct dynsec__data *data, cJSON *tree) cJSON_ArrayForEach(j_role, j_roles){ if(cJSON_IsObject(j_role)){ - char *rolename; + const char *rolename; if(json_get_string(j_role, "rolename", &rolename, false) == MOSQ_ERR_SUCCESS){ json_get_int(j_role, "priority", &priority, true, -1); role = dynsec_roles__find(data, rolename); @@ -277,7 +277,7 @@ int dynsec_groups__config_load(struct dynsec__data *data, cJSON *tree) cJSON *j_client; cJSON_ArrayForEach(j_client, j_clientlist){ if(cJSON_IsObject(j_client)){ - char *username; + const char *username; if(json_get_string(j_client, "username", &username, false) == MOSQ_ERR_SUCCESS){ json_get_int(j_client, "priority", &priority, true, -1); dynsec_groups__add_client(data, username, group->groupname, priority, false); @@ -364,7 +364,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) { - char *groupname, *text_name, *text_description; + const char *groupname, *text_name, *text_description; struct dynsec__group *group = NULL; int rc = MOSQ_ERR_SUCCESS; const char *admin_clientid, *admin_username; @@ -450,7 +450,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) { - char *groupname; + const char *groupname; struct dynsec__group *group; const char *admin_clientid, *admin_username; @@ -534,7 +534,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) { - char *username, *groupname; + const char *username, *groupname; int rc; int priority; const char *admin_clientid, *admin_username; @@ -636,7 +636,7 @@ int dynsec_groups__remove_client(struct dynsec__data *data, const char *username int dynsec_groups__process_remove_client(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) { - char *username, *groupname; + const char *username, *groupname; int rc; const char *admin_clientid, *admin_username; @@ -804,7 +804,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) { - char *groupname; + const char *groupname; cJSON *tree, *j_group, *j_data; struct dynsec__group *group; const char *admin_clientid, *admin_username; @@ -862,7 +862,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) { - char *groupname, *rolename; + const char *groupname, *rolename; struct dynsec__group *group; struct dynsec__role *role; const char *admin_clientid, *admin_username; @@ -915,18 +915,17 @@ 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) { - char *groupname = NULL; + const char *groupname = NULL; char *text_name = NULL, *text_description = NULL; struct dynsec__client *client = NULL; struct dynsec__group *group = NULL; struct dynsec__rolelist *rolelist = NULL; bool have_text_name = false, have_text_description = false, have_rolelist = false; - char *str; + const char *str; int rc; int priority; cJSON *j_client, *j_clients; const char *admin_clientid, *admin_username; - char *username; if(json_get_string(cmd->j_command, "groupname", &groupname, false) != MOSQ_ERR_SUCCESS){ mosquitto_control_command_reply(cmd, "Invalid/missing groupname"); @@ -986,6 +985,7 @@ int dynsec_groups__process_modify(struct dynsec__data *data, struct mosquitto_co j_clients = cJSON_GetObjectItem(cmd->j_command, "clients"); if(j_clients && cJSON_IsArray(j_clients)){ + const char *username; /* Iterate over array to check clients are valid before proceeding */ cJSON_ArrayForEach(j_client, j_clients){ if(cJSON_IsObject(j_client)){ @@ -1065,7 +1065,7 @@ error: int dynsec_groups__process_set_anonymous_group(struct dynsec__data *data, struct mosquitto_control_cmd *cmd, struct mosquitto *context) { - char *groupname; + const char *groupname; struct dynsec__group *group = NULL; const char *admin_clientid, *admin_username; diff --git a/plugins/dynamic-security/rolelist.c b/plugins/dynamic-security/rolelist.c index 1965eac4..71cc0389 100644 --- a/plugins/dynamic-security/rolelist.c +++ b/plugins/dynamic-security/rolelist.c @@ -174,7 +174,7 @@ int dynsec_rolelist__load_from_json(struct dynsec__data *data, cJSON *command, s cJSON *j_roles, *j_role; int priority; struct dynsec__role *role; - char *rolename; + const char *rolename; j_roles = cJSON_GetObjectItem(command, "roles"); if(j_roles){ diff --git a/plugins/dynamic-security/roles.c b/plugins/dynamic-security/roles.c index 12168ba0..98b3976f 100644 --- a/plugins/dynamic-security/roles.c +++ b/plugins/dynamic-security/roles.c @@ -207,8 +207,8 @@ static int dynsec_roles__acl_load(cJSON *j_acls, const char *key, struct dynsec_ cJSON *j_acl, *jtmp; struct dynsec__acl *acl; size_t topic_len; - char *acltype; - char *topic; + const char *acltype; + const char *topic; cJSON_ArrayForEach(j_acl, j_acls){ if(json_get_string(j_acl, "acltype", &acltype, false) != MOSQ_ERR_SUCCESS){ @@ -265,7 +265,7 @@ int dynsec_roles__config_load(struct dynsec__data *data, cJSON *tree) cJSON_ArrayForEach(j_role, j_roles){ if(cJSON_IsObject(j_role) == true){ /* Role name */ - char *rolename; + const char *rolename; if(json_get_string(j_role, "rolename", &rolename, false) != MOSQ_ERR_SUCCESS){ continue; } @@ -284,7 +284,7 @@ int dynsec_roles__config_load(struct dynsec__data *data, cJSON *tree) strncpy(role->rolename, rolename, rolename_len+1); /* Text name */ - char *textname; + const char *textname; if(json_get_string(j_role, "textname", &textname, false) == MOSQ_ERR_SUCCESS){ role->text_name = mosquitto_strdup(textname); if(role->text_name == NULL){ @@ -294,7 +294,7 @@ int dynsec_roles__config_load(struct dynsec__data *data, cJSON *tree) } /* Text description */ - char *textdescription; + const char *textdescription; if(json_get_string(j_role, "textdescription", &textdescription, false) == MOSQ_ERR_SUCCESS){ role->text_description = mosquitto_strdup(textdescription); if(role->text_description == NULL){ @@ -339,8 +339,8 @@ 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) { - char *rolename; - char *text_name, *text_description; + const char *rolename; + const char *text_name, *text_description; bool allow_wildcard_subs; struct dynsec__role *role; int rc = MOSQ_ERR_SUCCESS; @@ -472,7 +472,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) { - char *rolename; + const char *rolename; struct dynsec__role *role; const char *admin_clientid, *admin_username; @@ -602,14 +602,14 @@ 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) { - char *rolename; + const char *rolename; struct dynsec__role *role; struct dynsec__acl **acllist, *acl; int rc; const char *admin_clientid, *admin_username; - char *topic; + const char *topic; size_t topic_len; - char *acltype; + const char *acltype; if(json_get_string(cmd->j_command, "rolename", &rolename, false) != MOSQ_ERR_SUCCESS){ mosquitto_control_command_reply(cmd, "Invalid/missing rolename"); @@ -696,13 +696,13 @@ 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) { - char *rolename; + const char *rolename; struct dynsec__role *role; struct dynsec__acl **acllist, *acl; - char *topic; + const char *topic; int rc; const char *admin_clientid, *admin_username; - char *acltype; + const char *acltype; if(json_get_string(cmd->j_command, "rolename", &rolename, false) != MOSQ_ERR_SUCCESS){ mosquitto_control_command_reply(cmd, "Invalid/missing rolename"); @@ -777,7 +777,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) { - char *rolename; + const char *rolename; struct dynsec__role *role; cJSON *tree, *j_role, *j_data; const char *admin_clientid, *admin_username; @@ -833,8 +833,8 @@ 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) { - char *rolename; - char *text_name, *text_description; + const char *rolename; + const char *text_name, *text_description; struct dynsec__role *role; char *str; cJSON *j_acls; diff --git a/plugins/persist-sqlite/CMakeLists.txt b/plugins/persist-sqlite/CMakeLists.txt index 043bde32..46034293 100644 --- a/plugins/persist-sqlite/CMakeLists.txt +++ b/plugins/persist-sqlite/CMakeLists.txt @@ -10,6 +10,7 @@ if(SQLITE3_FOUND AND CJSON_FOUND) clients.c client_msgs.c init.c + ../../common/json_help.c ../../common/json_help.h plugin.c restore.c retain_msgs.c diff --git a/plugins/persist-sqlite/Makefile b/plugins/persist-sqlite/Makefile index ecc8e8b7..9465df8b 100644 --- a/plugins/persist-sqlite/Makefile +++ b/plugins/persist-sqlite/Makefile @@ -11,6 +11,7 @@ OBJS= \ clients.o \ client_msgs.o \ init.o \ + json_help.o \ plugin.o \ restore.o \ retain_msgs.o \ @@ -38,6 +39,9 @@ client_msgs.o : client_msgs.c persist_sqlite.h init.o : init.c persist_sqlite.h ${CROSS_COMPILE}${CC} $(LOCAL_CPPFLAGS) $(PLUGIN_CPPFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@ +json_help.o : ${R}/common/json_help.c ${R}/common/json_help.h + ${CROSS_COMPILE}${CC} $(LOCAL_CPPFLAGS) $(PLUGIN_CPPFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@ + base_msgs.o : base_msgs.c persist_sqlite.h ${CROSS_COMPILE}${CC} $(LOCAL_CPPFLAGS) $(PLUGIN_CPPFLAGS) $(PLUGIN_CFLAGS) -c $< -o $@ diff --git a/plugins/persist-sqlite/restore.c b/plugins/persist-sqlite/restore.c index 03f82ec8..d8fcaefa 100644 --- a/plugins/persist-sqlite/restore.c +++ b/plugins/persist-sqlite/restore.c @@ -73,7 +73,7 @@ static mosquitto_property *json_to_properties(const char *json) } cJSON_ArrayForEach(obj, array){ - char *identifier; + const char *identifier; json_get_string(obj, "identifier", &identifier, true); j_value = cJSON_GetObjectItem(obj, "value"); @@ -164,7 +164,7 @@ static mosquitto_property *json_to_properties(const char *json) break; case MQTT_PROP_TYPE_STRING_PAIR: { - char *prop_name; + const char *prop_name; if(!cJSON_IsString(j_value)){ mosquitto_log_printf(MOSQ_LOG_WARNING, "Sqlite persistence: Ignoring %s property whilst restoring, value is incorrect type", "string pair");