diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-01-19 12:27:56 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-01-19 12:37:42 +0100 |
commit | f1ba06c1c6eff3e7c6a5666bcb68d3f3e2e8a373 (patch) | |
tree | cf82f97e848a47f9d45ca1db048ca81c082d2c95 /src | |
parent | fdf1f239ef33d9bb69a49138956c6fd52c74a053 (diff) | |
download | strongswan-f1ba06c1c6eff3e7c6a5666bcb68d3f3e2e8a373.tar.bz2 strongswan-f1ba06c1c6eff3e7c6a5666bcb68d3f3e2e8a373.tar.xz |
Cache list of plugin names to further simplify its usage.
Also helpful for ipsec statusall to avoid having to enumerate plugins.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/daemon.c | 16 | ||||
-rw-r--r-- | src/libcharon/plugins/stroke/stroke_list.c | 8 | ||||
-rw-r--r-- | src/libstrongswan/plugins/plugin_loader.c | 65 | ||||
-rw-r--r-- | src/libstrongswan/plugins/plugin_loader.h | 4 | ||||
-rw-r--r-- | src/pki/command.c | 5 | ||||
-rw-r--r-- | src/pluto/log.c | 7 | ||||
-rw-r--r-- | src/pluto/plutomain.c | 15 | ||||
-rw-r--r-- | src/scepclient/scepclient.c | 15 |
8 files changed, 62 insertions, 73 deletions
diff --git a/src/libcharon/daemon.c b/src/libcharon/daemon.c index f175826d5..3fb49d475 100644 --- a/src/libcharon/daemon.c +++ b/src/libcharon/daemon.c @@ -201,18 +201,6 @@ METHOD(daemon_t, start, void, DEFAULT_THREADS)); } -/** - * Log loaded plugins - */ -static void print_plugins() -{ - char *plugins; - - plugins = lib->plugins->loaded_plugins(lib->plugins); - DBG1(DBG_DMN, "loaded plugins: %s", plugins); - free(plugins); -} - METHOD(daemon_t, initialize, bool, private_daemon_t *this) { @@ -233,8 +221,8 @@ METHOD(daemon_t, initialize, bool, { return FALSE; } - - print_plugins(); + DBG1(DBG_DMN, "loaded plugins: %s", + lib->plugins->loaded_plugins(lib->plugins)); this->public.ike_sa_manager = ike_sa_manager_create(); if (this->public.ike_sa_manager == NULL) diff --git a/src/libcharon/plugins/stroke/stroke_list.c b/src/libcharon/plugins/stroke/stroke_list.c index 8125d37bf..c056dce23 100644 --- a/src/libcharon/plugins/stroke/stroke_list.c +++ b/src/libcharon/plugins/stroke/stroke_list.c @@ -414,8 +414,7 @@ METHOD(stroke_list_t, status, void, if (all) { peer_cfg_t *peer_cfg; - plugin_t *plugin; - char *pool, *plugins; + char *pool; host_t *host; u_int32_t dpd; time_t since, now; @@ -449,9 +448,8 @@ METHOD(stroke_list_t, status, void, } fprintf(out, ", scheduled: %d\n", lib->scheduler->get_job_load(lib->scheduler)); - plugins = lib->plugins->loaded_plugins(lib->plugins); - fprintf(out, " loaded plugins: %s\n", plugins); - free(plugins); + fprintf(out, " loaded plugins: %s\n", + lib->plugins->loaded_plugins(lib->plugins)); first = TRUE; enumerator = this->attribute->create_pool_enumerator(this->attribute); diff --git a/src/libstrongswan/plugins/plugin_loader.c b/src/libstrongswan/plugins/plugin_loader.c index 1747cba6e..164b68e60 100644 --- a/src/libstrongswan/plugins/plugin_loader.c +++ b/src/libstrongswan/plugins/plugin_loader.c @@ -45,6 +45,11 @@ struct private_plugin_loader_t { * List of plugins, as plugin_entry_t */ linked_list_t *plugins; + + /** + * List of names of loaded plugins + */ + char *loaded_plugins; }; /** @@ -204,6 +209,38 @@ METHOD(plugin_loader_t, create_plugin_enumerator, enumerator_t*, } /** + * Create a list of the names of all loaded plugins + */ +static char* loaded_plugins_list(private_plugin_loader_t *this) +{ + int buf_len = 128, len = 0; + char *buf, *name; + enumerator_t *enumerator; + plugin_t *plugin; + + buf = malloc(buf_len); + buf[0] = '\0'; + enumerator = create_plugin_enumerator(this); + while (enumerator->enumerate(enumerator, &plugin, NULL)) + { + name = plugin->get_name(plugin); + if (len + (strlen(name) + 1) >= buf_len) + { + buf_len <<= 1; + buf = realloc(buf, buf_len); + } + len += snprintf(&buf[len], buf_len - len, "%s ", name); + } + enumerator->destroy(enumerator); + if (len > 0 && buf[len - 1] == ' ') + { + buf[len - 1] = '\0'; + } + return buf; +} + + +/** * Check if a plugin is already loaded */ static bool plugin_loaded(private_plugin_loader_t *this, char *name) @@ -516,6 +553,11 @@ METHOD(plugin_loader_t, load_plugins, bool, /* unload plugins that we were not able to load any features for */ purge_plugins(this); } + if (!critical_failed) + { + free(this->loaded_plugins); + this->loaded_plugins = loaded_plugins_list(this); + } return !critical_failed; } @@ -558,6 +600,8 @@ METHOD(plugin_loader_t, unload, void, } enumerator->destroy(enumerator); } + free(this->loaded_plugins); + this->loaded_plugins = NULL; } /** @@ -609,25 +653,7 @@ METHOD(plugin_loader_t, reload, u_int, METHOD(plugin_loader_t, loaded_plugins, char*, private_plugin_loader_t *this) { -#define BUF_LEN 512 - char *buf = malloc(BUF_LEN); - int len = 0; - enumerator_t *enumerator; - plugin_t *plugin; - - buf[0] = '\0'; - enumerator = create_plugin_enumerator(this); - while (len < BUF_LEN && enumerator->enumerate(enumerator, &plugin, NULL)) - { - len += snprintf(&buf[len], BUF_LEN - len, "%s ", - plugin->get_name(plugin)); - } - enumerator->destroy(enumerator); - if (len > 0 && buf[len - 1] == ' ') - { - buf[len - 1] = '\0'; - } - return buf; + return this->loaded_plugins ?: ""; } METHOD(plugin_loader_t, destroy, void, @@ -635,6 +661,7 @@ METHOD(plugin_loader_t, destroy, void, { unload(this); this->plugins->destroy(this->plugins); + free(this->loaded_plugins); free(this); } diff --git a/src/libstrongswan/plugins/plugin_loader.h b/src/libstrongswan/plugins/plugin_loader.h index 0f677c2fe..7fd07044d 100644 --- a/src/libstrongswan/plugins/plugin_loader.h +++ b/src/libstrongswan/plugins/plugin_loader.h @@ -71,7 +71,9 @@ struct plugin_loader_t { /** * Get a simple list the names of all loaded plugins. * - * @return list of the names of all loaded plugins (allocated) + * The function returns internal data, do not free. + * + * @return list of the names of all loaded plugins */ char* (*loaded_plugins)(plugin_loader_t *this); diff --git a/src/pki/command.c b/src/pki/command.c index e74072f9e..07ba5bb1d 100644 --- a/src/pki/command.c +++ b/src/pki/command.c @@ -179,9 +179,8 @@ int command_usage(char *error) if (active == help_idx) { - char *plugins = lib->plugins->loaded_plugins(lib->plugins); - fprintf(out, "loaded plugins: %s\n", plugins); - free(plugins); + fprintf(out, "loaded plugins: %s\n", + lib->plugins->loaded_plugins(lib->plugins)); } fprintf(out, "usage:\n"); diff --git a/src/pluto/log.c b/src/pluto/log.c index 91bc57e1a..f6fa226d5 100644 --- a/src/pluto/log.c +++ b/src/pluto/log.c @@ -868,11 +868,8 @@ DBG_dump(const char *label, const void *p, size_t len) static void show_loaded_plugins() { - char *plugins; - - plugins = lib->plugins->loaded_plugins(lib->plugins); - whack_log(RC_COMMENT, "loaded plugins: %s", plugins); - free(plugins); + whack_log(RC_COMMENT, "loaded plugins: %s", + lib->plugins->loaded_plugins(lib->plugins)); } void show_status(bool all, const char *name) diff --git a/src/pluto/plutomain.c b/src/pluto/plutomain.c index 904ed82c1..dbc857ce2 100644 --- a/src/pluto/plutomain.c +++ b/src/pluto/plutomain.c @@ -264,18 +264,6 @@ static const char *pkcs11_init_args = NULL; /* options read by optionsfrom */ options_t *options; -/** - * Log loaded plugins - */ -static void print_plugins() -{ - char *plugins; - - plugins = lib->plugins->loaded_plugins(lib->plugins); - DBG1(DBG_DMN, "loaded plugins: %s", plugins); - free(plugins); -} - int main(int argc, char **argv) { bool fork_desired = TRUE; @@ -693,7 +681,8 @@ int main(int argc, char **argv) { exit(SS_RC_INITIALIZATION_FAILED); } - print_plugins(); + DBG1(DBG_DMN, "loaded plugins: %s", + lib->plugins->loaded_plugins(lib->plugins)); init_builder(); if (!init_secret() || !init_crypto()) diff --git a/src/scepclient/scepclient.c b/src/scepclient/scepclient.c index efe13c264..0b54eeee3 100644 --- a/src/scepclient/scepclient.c +++ b/src/scepclient/scepclient.c @@ -276,18 +276,6 @@ usage(const char *message) } /** - * Log loaded plugins - */ -static void print_plugins() -{ - char *plugins; - - plugins = lib->plugins->loaded_plugins(lib->plugins); - DBG1(DBG_LIB, " loaded plugins: %s", plugins); - free(plugins); -} - -/** * @brief main of scepclient * * @param argc number of arguments @@ -752,7 +740,8 @@ int main(int argc, char **argv) { exit_scepclient("plugin loading failed"); } - print_plugins(); + DBG1(DBG_LIB, " loaded plugins: %s", + lib->plugins->loaded_plugins(lib->plugins)); if ((filetype_out == 0) && (!request_ca_certificate)) { |