This commit changes a few things at once:
* Cleanups the help message (orders long options alphabetically,
adds metavars where missing, etc.).
* Removes is_setuid_setgid() to use the common bt_is_setuid_setgid().
* Makes the CLI load plugins *non-recursively*, which is more in line
with typical lists of paths such as PATH, LD_LIBRARY_PATH, PYTHONPATH,
etc., from the following directories, in this order:
1. BABELTRACE_PLUGIN_PATH environment variable
2. --plugin-path option
3. ~/.local/lib/babeltrace/plugins
4. System path (/usr/lib/babeltrace/plugins)
For the in-tree version (conveter/babeltrace), Makefile.am passes all
the in-tree plugin paths so that it can find everything that is known
within the tree.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
+PLUGINS_PATH = $(abs_top_builddir)/plugins
AM_CFLAGS = $(PACKAGE_CFLAGS) -I$(top_srcdir)/include \
AM_CFLAGS = $(PACKAGE_CFLAGS) -I$(top_srcdir)/include \
- -DINSTALL_LIBDIR=\"$(libdir)\" \
- -DCONFIG_IN_TREE_PLUGIN_DIR=\"$(abs_top_builddir)/plugins/\"
+ -DCONFIG_IN_TREE_PLUGIN_PATH=\"$(PLUGINS_PATH)/ctf:$(PLUGINS_PATH)/text:$(PLUGINS_PATH)/muxer:$(PLUGINS_PATH)/trimmer:$(PLUGINS_PATH)/writer\"
AM_LDFLAGS = -lpopt
bin_PROGRAMS = babeltrace.bin babeltrace-log
AM_LDFLAGS = -lpopt
bin_PROGRAMS = babeltrace.bin babeltrace-log
fprintf(fp, " of the following source and sink component\n");
fprintf(fp, " instances (see the exact format of PARAMS\n");
fprintf(fp, " below)\n");
fprintf(fp, " of the following source and sink component\n");
fprintf(fp, " instances (see the exact format of PARAMS\n");
fprintf(fp, " below)\n");
+ fprintf(fp, " --begin=BEGIN Set beginning time to BEGIN\n");
+ fprintf(fp, " (format: [YYYY-MM-DD [hh:mm:]]ss[.nnnnnnnnn])\n");
fprintf(fp, " -d, --debug Enable debug mode\n");
fprintf(fp, " -d, --debug Enable debug mode\n");
+ fprintf(fp, " --end=END Set end time to END\n");
+ fprintf(fp, " (format: [YYYY-MM-DD [hh:mm:]]ss[.nnnnnnnnn])\n");
fprintf(fp, " -l, --list List available plugins and their components\n");
fprintf(fp, " -l, --list List available plugins and their components\n");
- fprintf(fp, " -P, --path=PATH Set the `path` parameter of the latest source\n");
- fprintf(fp, " or sink component to PATH\n");
+ fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n");
+ fprintf(fp, " (~/.local/lib/babeltrace/plugins)\n");
+ fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n");
fprintf(fp, " -p, --params=PARAMS Set the parameters of the latest source or\n");
fprintf(fp, " sink component instance (in command-line \n");
fprintf(fp, " order) to PARAMS (see the exact format of\n");
fprintf(fp, " PARAMS below)\n");
fprintf(fp, " -p, --params=PARAMS Set the parameters of the latest source or\n");
fprintf(fp, " sink component instance (in command-line \n");
fprintf(fp, " order) to PARAMS (see the exact format of\n");
fprintf(fp, " PARAMS below)\n");
- fprintf(fp, " --plugin-path=PATH[:PATH]... Set paths from which dynamic plugins can be\n");
- fprintf(fp, " loaded to PATH\n");
+ fprintf(fp, " -P, --path=PATH Set the `path` parameter of the latest source\n");
+ fprintf(fp, " or sink component to PATH\n");
+ fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which dynamic\n");
+ fprintf(fp, " plugins can be loaded\n");
fprintf(fp, " -r, --reset-base-params Reset the current base parameters of the\n");
fprintf(fp, " following source and sink component\n");
fprintf(fp, " instances to an empty map\n");
fprintf(fp, " -r, --reset-base-params Reset the current base parameters of the\n");
fprintf(fp, " following source and sink component\n");
fprintf(fp, " instances to an empty map\n");
fprintf(fp, " -i, --source=PLUGIN.COMPCLS Instantiate a source component from plugin\n");
fprintf(fp, " PLUGIN and component class COMPCLS (may be\n");
fprintf(fp, " repeated)\n");
fprintf(fp, " -i, --source=PLUGIN.COMPCLS Instantiate a source component from plugin\n");
fprintf(fp, " PLUGIN and component class COMPCLS (may be\n");
fprintf(fp, " repeated)\n");
- fprintf(fp, " --begin Start time: [YYYY-MM-DD [hh:mm:]]ss[.nnnnnnnnn]\n");
- fprintf(fp, " --end End time: [YYYY-MM-DD [hh:mm:]]ss[.nnnnnnnnn]\n");
- fprintf(fp, " --timerange Time range: begin,end or [begin,end] (where [] are actual brackets)\n");
- fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n");
- fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n");
+ fprintf(fp, " --timerange=TIMERANGE Set time range to TIMERANGE: BEGIN,END or\n");
+ fprintf(fp, " [BEGIN,END] (where [ and ] are actual brackets)\n");
fprintf(fp, " -h --help Show this help\n");
fprintf(fp, " --help-legacy Show Babeltrace 1.x legacy options\n");
fprintf(fp, " -v, --verbose Enable verbose output\n");
fprintf(fp, " -h --help Show this help\n");
fprintf(fp, " --help-legacy Show Babeltrace 1.x legacy options\n");
fprintf(fp, " -v, --verbose Enable verbose output\n");
-static
-bool is_setuid_setgid(void)
-{
- return (geteuid() != getuid() || getegid() != getgid());
-}
-
static void destroy_gstring(void *data)
{
g_string_free(data, TRUE);
static void destroy_gstring(void *data)
{
g_string_free(data, TRUE);
/*
* Extracts the various paths from the string arg, delimited by ':',
/*
* Extracts the various paths from the string arg, delimited by ':',
- * and converts them to an array value object.
- *
- * Returned array value object is empty if arg is empty.
- *
- * Return value is owned by the caller.
+ * and appends them to the array value object plugin_paths.
-static
-enum bt_value_status plugin_paths_from_arg(struct bt_value *plugin_paths,
- const char *arg)
+enum bt_value_status bt_config_append_plugin_paths(
+ struct bt_value *plugin_paths, const char *arg)
{
enum bt_value_status status = BT_VALUE_STATUS_OK;
GPtrArray *dirs = g_ptr_array_new_with_free_func(destroy_gstring);
{
enum bt_value_status status = BT_VALUE_STATUS_OK;
GPtrArray *dirs = g_ptr_array_new_with_free_func(destroy_gstring);
-static int add_internal_plugin_paths(struct bt_config *cfg)
+static int add_env_var_plugin_paths(struct bt_config *cfg)
+{
+ int ret = 0;
+ const char *envvar;
+
+ if (bt_common_is_setuid_setgid()) {
+ printf_debug("Skipping non-system plugin paths for setuid/setgid binary\n");
+ goto end;
+ }
+
+ envvar = getenv("BABELTRACE_PLUGIN_PATH");
+ if (!envvar) {
+ goto end;
+ }
+
+ ret = bt_config_append_plugin_paths(cfg->plugin_paths, envvar);
+
+end:
+ return ret;
+}
+
+static int append_home_and_system_plugin_paths(struct bt_config *cfg)
{
int ret;
if (!cfg->omit_home_plugin_path) {
if (bt_common_is_setuid_setgid()) {
{
int ret;
if (!cfg->omit_home_plugin_path) {
if (bt_common_is_setuid_setgid()) {
- printf_debug("Skipping non-system plugin paths for setuid/setgid binary.");
+ printf_debug("Skipping non-system plugin paths for setuid/setgid binary\n");
} else {
char *home_plugin_dir =
bt_common_get_home_plugin_path();
if (home_plugin_dir) {
} else {
char *home_plugin_dir =
bt_common_get_home_plugin_path();
if (home_plugin_dir) {
- ret = plugin_paths_from_arg(cfg->plugin_paths,
+ ret = bt_config_append_plugin_paths(cfg->plugin_paths,
home_plugin_dir);
free(home_plugin_dir);
home_plugin_dir);
free(home_plugin_dir);
}
if (!cfg->omit_system_plugin_path) {
}
if (!cfg->omit_system_plugin_path) {
- if (plugin_paths_from_arg(cfg->plugin_paths,
+ if (bt_config_append_plugin_paths(cfg->plugin_paths,
bt_common_get_system_plugin_path())) {
printf_err("Invalid system plugin path\n");
goto error;
bt_common_get_system_plugin_path())) {
printf_err("Invalid system plugin path\n");
goto error;
- * Returns a Babeltrace configuration, out of command-line arguments,
- * containing everything that is needed to instanciate specific
- * components with given parameters.
+ * Initializes a created Babeltrace config object according to the
+ * command-line arguments found in argv.
*
* Return value is set to the appropriate exit code to use.
*/
*
* Return value is set to the appropriate exit code to use.
*/
+ ret = add_env_var_plugin_paths(cfg);
+ if (ret) {
+ printf_err("Cannot append plugin paths from BABELTRACE_PLUGIN_PATH\n");
+ goto error;
+ }
+
/* Note: implicit source never gets positional base params. */
implicit_source_comp = bt_config_component_from_arg(DEFAULT_SOURCE_COMPONENT_NAME);
if (implicit_source_comp) {
/* Note: implicit source never gets positional base params. */
implicit_source_comp = bt_config_component_from_arg(DEFAULT_SOURCE_COMPONENT_NAME);
if (implicit_source_comp) {
switch (opt) {
case OPT_PLUGIN_PATH:
switch (opt) {
case OPT_PLUGIN_PATH:
- if (is_setuid_setgid()) {
- printf_debug("Skipping non-system plugin paths for setuid/setgid binary.");
+ if (bt_common_is_setuid_setgid()) {
+ printf_debug("Skipping non-system plugin paths for setuid/setgid binary\n");
- if (plugin_paths_from_arg(cfg->plugin_paths, arg)) {
+ if (bt_config_append_plugin_paths(cfg->plugin_paths, arg)) {
printf_err("Invalid --plugin-path option's argument\n");
goto error;
}
printf_err("Invalid --plugin-path option's argument\n");
goto error;
}
- if (add_internal_plugin_paths(cfg)) {
+ if (append_home_and_system_plugin_paths(cfg)) {
int bt_config_init_from_args(struct bt_config *cfg, int argc,
const char *argv[]);
int bt_config_init_from_args(struct bt_config *cfg, int argc,
const char *argv[]);
+enum bt_value_status bt_config_append_plugin_paths(
+ struct bt_value *plugin_paths, const char *arg);
+
#endif /* BABELTRACE_CONVERTER_CFG_H */
#endif /* BABELTRACE_CONVERTER_CFG_H */
- plugins = bt_plugin_create_all_from_dir(plugin_path, true);
+ plugins = bt_plugin_create_all_from_dir(plugin_path, false);
if (!plugins) {
printf_debug("Unable to dynamically load plugins from path %s.\n",
plugin_path);
if (!plugins) {
printf_debug("Unable to dynamically load plugins from path %s.\n",
plugin_path);
*/
#include <babeltrace/values.h>
*/
#include <babeltrace/values.h>
+#include "babeltrace-cfg.h"
#include "default-cfg.h"
#include "config.h"
#include "default-cfg.h"
#include "config.h"
cfg->omit_system_plugin_path = true;
cfg->omit_home_plugin_path = true;
cfg->omit_system_plugin_path = true;
cfg->omit_home_plugin_path = true;
- ret = bt_value_array_append_string(cfg->plugin_paths,
- CONFIG_IN_TREE_PLUGIN_DIR);
+ ret = bt_config_append_plugin_paths(cfg->plugin_paths,
+ CONFIG_IN_TREE_PLUGIN_PATH);