Plugin configs as an array of pointers.

pull/2438/head
Roger Light 4 years ago
parent 65d20271a7
commit e9713cca5a

@ -149,7 +149,7 @@ static int broker__process_get_plugin_info(cJSON *j_responses, struct mosquitto
}
for(i=0; i<db.config->security_options.plugin_config_count; i++){
if(add_plugin_info(j_plugins, db.config->security_options.plugin_configs[i].plugin.identifier)){
if(add_plugin_info(j_plugins, db.config->security_options.plugin_configs[i]->plugin.identifier)){
goto internal_error;
}
}

@ -226,7 +226,7 @@ static void config__cleanup_plugins(struct mosquitto__config *config)
if(config->security_options.plugin_configs){
for(i=0; i<config->security_options.plugin_config_count; i++){
plug = &config->security_options.plugin_configs[i];
plug = config->security_options.plugin_configs[i];
mosquitto__free(plug->path);
plug->path = NULL;
@ -239,6 +239,7 @@ static void config__cleanup_plugins(struct mosquitto__config *config)
plug->options = NULL;
plug->option_count = 0;
}
mosquitto__free(plug);
}
mosquitto__free(config->security_options.plugin_configs);
config->security_options.plugin_configs = NULL;
@ -985,13 +986,19 @@ static int config__read_file_core(struct mosquitto__config *config, bool reload,
conf__set_cur_security_options(config, cur_listener, &cur_security_options);
}
cur_security_options->plugin_configs = mosquitto__realloc(cur_security_options->plugin_configs, (size_t)(cur_security_options->plugin_config_count+1)*sizeof(struct mosquitto__plugin_config));
cur_plugin_config = mosquitto__calloc(1, sizeof(struct mosquitto__plugin_config));
if(!cur_plugin_config){
log__printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory.");
return MOSQ_ERR_NOMEM;
}
cur_security_options->plugin_configs = mosquitto__realloc(cur_security_options->plugin_configs, (size_t)(cur_security_options->plugin_config_count+1)*sizeof(struct mosquitto__plugin_config *));
if(!cur_security_options->plugin_configs){
mosquitto__free(cur_plugin_config);
log__printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory.");
return MOSQ_ERR_NOMEM;
}
cur_plugin_config = &cur_security_options->plugin_configs[cur_security_options->plugin_config_count];
memset(cur_plugin_config, 0, sizeof(struct mosquitto__plugin_config));
cur_security_options->plugin_configs[cur_security_options->plugin_config_count] = cur_plugin_config;
cur_plugin_config->path = NULL;
cur_plugin_config->options = NULL;
cur_plugin_config->option_count = 0;

@ -178,7 +178,7 @@ struct mosquitto__security_options {
char *password_file;
char *psk_file;
char *acl_file;
struct mosquitto__plugin_config *plugin_configs;
struct mosquitto__plugin_config **plugin_configs;
int plugin_config_count;
int8_t allow_anonymous;
bool allow_zero_length_clientid;

@ -63,20 +63,20 @@ static int security__module_init_single(struct mosquitto__listener *listener, st
}
for(i=0; i<opts->plugin_config_count; i++){
if(opts->plugin_configs[i].path){
memset(&opts->plugin_configs[i].plugin, 0, sizeof(struct mosquitto__plugin));
if(opts->plugin_configs[i]->path){
memset(&opts->plugin_configs[i]->plugin, 0, sizeof(struct mosquitto__plugin));
log__printf(NULL, MOSQ_LOG_INFO, "Loading plugin: %s", opts->plugin_configs[i].path);
log__printf(NULL, MOSQ_LOG_INFO, "Loading plugin: %s", opts->plugin_configs[i]->path);
lib = LIB_LOAD(opts->plugin_configs[i].path);
lib = LIB_LOAD(opts->plugin_configs[i]->path);
if(!lib){
log__printf(NULL, MOSQ_LOG_ERR,
"Error: Unable to load plugin \"%s\".", opts->plugin_configs[i].path);
"Error: Unable to load plugin \"%s\".", opts->plugin_configs[i]->path);
LIB_ERROR();
return MOSQ_ERR_UNKNOWN;
}
opts->plugin_configs[i].plugin.lib = NULL;
opts->plugin_configs[i]->plugin.lib = NULL;
if((plugin_version = (FUNC_plugin_version)LIB_SYM(lib, "mosquitto_plugin_version"))){
version = plugin_version(plugin_version_count, plugin_versions);
}else if((plugin_auth_version = (FUNC_auth_plugin_version)LIB_SYM(lib, "mosquitto_auth_plugin_version"))){
@ -88,26 +88,26 @@ static int security__module_init_single(struct mosquitto__listener *listener, st
LIB_CLOSE(lib);
return MOSQ_ERR_UNKNOWN;
}
opts->plugin_configs[i].plugin.version = version;
opts->plugin_configs[i]->plugin.version = version;
if(version == 5){
rc = plugin__load_v5(
listener,
&opts->plugin_configs[i].plugin,
opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
&opts->plugin_configs[i]->plugin,
opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
lib);
if(rc){
return rc;
}
}else if(version == 4){
rc = plugin__load_v4(listener, &opts->plugin_configs[i], lib);
rc = plugin__load_v4(listener, opts->plugin_configs[i], lib);
if(rc) return rc;
}else if(version == 3){
rc = plugin__load_v3(listener, &opts->plugin_configs[i], lib);
rc = plugin__load_v3(listener, opts->plugin_configs[i], lib);
if(rc) return rc;
}else if(version == 2){
rc = plugin__load_v2(listener, &opts->plugin_configs[i], lib);
rc = plugin__load_v2(listener, opts->plugin_configs[i], lib);
if(rc) return rc;
}else{
log__printf(NULL, MOSQ_LOG_ERR,
@ -148,7 +148,7 @@ static void security__module_cleanup_single(struct mosquitto__security_options *
struct mosquitto__plugin_config *conf;
for(i=0; i<opts->plugin_config_count; i++){
conf = &opts->plugin_configs[i];
conf = opts->plugin_configs[i];
/* Run plugin cleanup function */
if(conf->plugin.version == 5){
@ -231,27 +231,27 @@ static int security__init_single(struct mosquitto__security_options *opts, bool
}
for(i=0; i<opts->plugin_config_count; i++){
if(opts->plugin_configs[i].plugin.version == 5){
if(opts->plugin_configs[i]->plugin.version == 5){
continue;
}else if(opts->plugin_configs[i].plugin.version == 4){
rc = opts->plugin_configs[i].plugin.security_init_v4(
opts->plugin_configs[i].plugin.user_data,
opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
}else if(opts->plugin_configs[i]->plugin.version == 4){
rc = opts->plugin_configs[i]->plugin.security_init_v4(
opts->plugin_configs[i]->plugin.user_data,
opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
reload);
}else if(opts->plugin_configs[i].plugin.version == 3){
rc = opts->plugin_configs[i].plugin.security_init_v3(
opts->plugin_configs[i].plugin.user_data,
opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
}else if(opts->plugin_configs[i]->plugin.version == 3){
rc = opts->plugin_configs[i]->plugin.security_init_v3(
opts->plugin_configs[i]->plugin.user_data,
opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
reload);
}else if(opts->plugin_configs[i].plugin.version == 2){
rc = opts->plugin_configs[i].plugin.security_init_v2(
opts->plugin_configs[i].plugin.user_data,
(struct mosquitto_auth_opt *)opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
}else if(opts->plugin_configs[i]->plugin.version == 2){
rc = opts->plugin_configs[i]->plugin.security_init_v2(
opts->plugin_configs[i]->plugin.user_data,
(struct mosquitto_auth_opt *)opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
reload);
}else{
rc = MOSQ_ERR_INVAL;
@ -300,27 +300,27 @@ static int security__cleanup_single(struct mosquitto__security_options *opts, bo
int rc;
for(i=0; i<opts->plugin_config_count; i++){
if(opts->plugin_configs[i].plugin.version == 5){
if(opts->plugin_configs[i]->plugin.version == 5){
rc = MOSQ_ERR_SUCCESS;
}else if(opts->plugin_configs[i].plugin.version == 4){
rc = opts->plugin_configs[i].plugin.security_cleanup_v4(
opts->plugin_configs[i].plugin.user_data,
opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
}else if(opts->plugin_configs[i]->plugin.version == 4){
rc = opts->plugin_configs[i]->plugin.security_cleanup_v4(
opts->plugin_configs[i]->plugin.user_data,
opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
reload);
}else if(opts->plugin_configs[i].plugin.version == 3){
rc = opts->plugin_configs[i].plugin.security_cleanup_v3(
opts->plugin_configs[i].plugin.user_data,
opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
}else if(opts->plugin_configs[i]->plugin.version == 3){
rc = opts->plugin_configs[i]->plugin.security_cleanup_v3(
opts->plugin_configs[i]->plugin.user_data,
opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
reload);
}else if(opts->plugin_configs[i].plugin.version == 2){
rc = opts->plugin_configs[i].plugin.security_cleanup_v2(
opts->plugin_configs[i].plugin.user_data,
(struct mosquitto_auth_opt *)opts->plugin_configs[i].options,
opts->plugin_configs[i].option_count,
}else if(opts->plugin_configs[i]->plugin.version == 2){
rc = opts->plugin_configs[i]->plugin.security_cleanup_v2(
opts->plugin_configs[i]->plugin.user_data,
(struct mosquitto_auth_opt *)opts->plugin_configs[i]->options,
opts->plugin_configs[i]->option_count,
reload);
}else{
rc = MOSQ_ERR_INVAL;

Loading…
Cancel
Save