Free up plugin info structs after converting to plugin containers.

This commit is contained in:
Todd C. Miller
2014-10-24 15:09:35 -06:00
parent b91a91d289
commit 4c8573ac2b

View File

@@ -270,11 +270,24 @@ sudo_load_plugin(struct plugin_container *policy_plugin,
}
}
/* Zero out info strings that we now own (see above). */
info->symbol_name = NULL;
info->options = NULL;
rval = true;
done:
debug_return_bool(rval);
}
static void
free_plugin_info(struct plugin_info *info)
{
sudo_efree(info->path);
sudo_efree(info->options);
sudo_efree(info->symbol_name);
sudo_efree(info);
}
/*
* Load the plugins listed in sudo.conf.
*/
@@ -284,17 +297,19 @@ sudo_load_plugins(struct plugin_container *policy_plugin,
{
struct plugin_container *container;
struct plugin_info_list *plugins;
struct plugin_info *info;
struct plugin_info *info, *next;
bool rval = false;
debug_decl(sudo_load_plugins, SUDO_DEBUG_PLUGIN, sudo_debug_instance)
/* Walk the plugin list from sudo.conf, if any. */
/* Walk the plugin list from sudo.conf, if any and free it. */
plugins = sudo_conf_plugins();
TAILQ_FOREACH(info, plugins, entries) {
TAILQ_FOREACH_SAFE(info, plugins, entries, next) {
rval = sudo_load_plugin(policy_plugin, io_plugins, info);
if (!rval)
goto done;
free_plugin_info(info);
}
TAILQ_INIT(plugins);
/*
* If no policy plugin, fall back to the default (sudoers).