[lttng-dev] [RFC PATCH lttng-tools] Allow environment variable LTTNG_HOME to override HOME - for lttng-tools - UPDATED PATCH
David Goulet
dgoulet at efficios.com
Mon Jun 17 15:44:11 EDT 2013
Hi Amit,
There seems to be a problem with this patch, I can't merge it due to some
malformed part of it...
Did you use "git send-email" ? If you don't have that, either attach the "git
format-patch" to the email, the "git log -1" or the diff in a separate file.
Thanks!
David
Amit Margalit:
> Hi,
>
> I've added a paragraph to the man page. Here is the new patch:
> From a72bd9dd6a58ac727280f2f9a85ee80607f1aba9 Mon Sep 17 00:00:00 2001
> From: Amit Margalit <amitm at il.ibm.com>
> Date: Thu, 13 Jun 2013 12:35:13 +0300
> Subject: [PATCH] Using LTTNG_HOME environment variable if exists, with
> fallback to HOME
>
> ---
> doc/man/lttng.1 | 4 ++++
> src/bin/lttng-relayd/utils.c | 10 +---------
> src/bin/lttng-sessiond/main.c | 2 +-
> src/bin/lttng-sessiond/utils.c | 10 ----------
> src/bin/lttng/commands/create.c | 2 +-
> src/bin/lttng/conf.c | 13 +++----------
> src/bin/lttng/conf.h | 1 -
> src/bin/lttng/utils.c | 3 ++-
> src/common/defaults.h | 2 ++
> src/common/utils.c | 15 +++++++++++++++
> src/common/utils.h | 1 +
> src/lib/lttng-ctl/lttng-ctl.c | 5 +++--
> 12 files changed, 33 insertions(+), 35 deletions(-)
>
> diff --git a/doc/man/lttng.1 b/doc/man/lttng.1
> index f472d38..26fd44a 100644
> --- a/doc/man/lttng.1
> +++ b/doc/man/lttng.1
> @@ -214,6 +214,10 @@ automatically created having this form: 'auto-yyyymmdd-hhmmss'.
>
> If no \fB\-o, \-\-output\fP is specified, the traces will be written in
> $HOME/lttng-traces.
> +
> +The $HOME environment variable can be overridden by defining the environment
> +variable LTTNG_HOME. This is useful when the user running the commands has
> +a non-writeable home directory.
> .fi
>
> .B OPTIONS:
> diff --git a/src/bin/lttng-relayd/utils.c b/src/bin/lttng-relayd/utils.c
> index ad13d32..392fab6 100644
> --- a/src/bin/lttng-relayd/utils.c
> +++ b/src/bin/lttng-relayd/utils.c
> @@ -29,14 +29,6 @@
> #include "lttng-relayd.h"
> #include "utils.h"
>
> -/*
> - * Returns the HOME directory path. Caller MUST NOT free(3) the return pointer.
> - */
> -static char *get_default_path(void)
> -{
> - return getenv("HOME");
> -}
> -
> static char *create_output_path_auto(char *path_name)
> {
> int ret;
> @@ -44,7 +36,7 @@ static char *create_output_path_auto(char *path_name)
> char *alloc_path = NULL;
> char *default_path;
>
> - default_path = get_default_path();
> + default_path = utils_get_home_dir();
> if (default_path == NULL) {
> ERR("Home path not found.\n \
> Please specify an output path using -o, --output
> PATH");
> diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
> index 4470afc..256ffba 100644
> --- a/src/bin/lttng-sessiond/main.c
> +++ b/src/bin/lttng-sessiond/main.c
> @@ -4136,7 +4136,7 @@ int main(int argc, char **argv)
> DBG2("Kernel consumer cmd path: %s",
> kconsumer_data.cmd_unix_sock_path);
> } else {
> - home_path = get_home_dir();
> + home_path = utils_get_home_dir();
> if (home_path == NULL) {
> /* TODO: Add --socket PATH option */
> ERR("Can't get HOME directory for sockets creation.");
> diff --git a/src/bin/lttng-sessiond/utils.c b/src/bin/lttng-sessiond/utils.c
> index 5ea3374..af42ad0 100644
> --- a/src/bin/lttng-sessiond/utils.c
> +++ b/src/bin/lttng-sessiond/utils.c
> @@ -45,13 +45,3 @@ int notify_thread_pipe(int wpipe)
>
> return ret;
> }
> -
> -/*
> - * Return pointer to home directory path using the env variable HOME.
> - *
> - * No home, NULL is returned.
> - */
> -const char *get_home_dir(void)
> -{
> - return ((const char *) getenv("HOME"));
> -}
> diff --git a/src/bin/lttng/commands/create.c b/src/bin/lttng/commands/create.c
> index 805cdb1..ddd2983 100644
> --- a/src/bin/lttng/commands/create.c
> +++ b/src/bin/lttng/commands/create.c
> @@ -250,7 +250,7 @@ static int create_session(void)
> print_str_url = url;
> } else {
> /* Auto output path */
> - alloc_path = config_get_default_path();
> + alloc_path = utils_get_home_dir();
> if (alloc_path == NULL) {
> ERR("HOME path not found.\n \
> Please specify an output path using -o,
> --output PATH");
> diff --git a/src/bin/lttng/conf.c b/src/bin/lttng/conf.c
> index b6632fc..5a0da9d 100644
> --- a/src/bin/lttng/conf.c
> +++ b/src/bin/lttng/conf.c
> @@ -25,6 +25,7 @@
> #include <unistd.h>
>
> #include <common/error.h>
> +#include <common/utils.h>
>
> #include "conf.h"
>
> @@ -123,14 +124,6 @@ end:
> }
>
> /*
> - * Returns the HOME directory path. Caller MUST NOT free(3) the return pointer.
> - */
> -char *config_get_default_path(void)
> -{
> - return getenv("HOME");
> -}
> -
> -/*
> * Destroys directory config and file config.
> */
> void config_destroy(char *path)
> @@ -161,7 +154,7 @@ end:
> */
> void config_destroy_default(void)
> {
> - char *path = config_get_default_path();
> + char *path = utils_get_home_dir();
> if (path == NULL) {
> return;
> }
> @@ -277,7 +270,7 @@ int config_init(char *session_name)
> int ret;
> char *path;
>
> - path = config_get_default_path();
> + path = utils_get_home_dir();
> if (path == NULL) {
> ret = -1;
> goto error;
> diff --git a/src/bin/lttng/conf.h b/src/bin/lttng/conf.h
> index 2cb04b0..3bed59c 100644
> --- a/src/bin/lttng/conf.h
> +++ b/src/bin/lttng/conf.h
> @@ -25,7 +25,6 @@ void config_destroy_default(void);
> int config_exists(const char *path);
> int config_init(char *path);
> int config_add_session_name(char *path, char *name);
> -char *config_get_default_path(void);
>
> /* Must free() the return pointer */
> char *config_read_session_name(char *path);
> diff --git a/src/bin/lttng/utils.c b/src/bin/lttng/utils.c
> index 94c4527..6041655 100644
> --- a/src/bin/lttng/utils.c
> +++ b/src/bin/lttng/utils.c
> @@ -21,6 +21,7 @@
> #include <limits.h>
>
> #include <common/error.h>
> +#include <common/utils.h>
>
> #include "conf.h"
> #include "utils.h"
> @@ -36,7 +37,7 @@ char *get_session_name(void)
> char *path, *session_name = NULL;
>
> /* Get path to config file */
> - path = config_get_default_path();
> + path = utils_get_home_dir();
> if (path == NULL) {
> goto error;
> }
> diff --git a/src/common/defaults.h b/src/common/defaults.h
> index 66bb972..c040634 100644
> --- a/src/common/defaults.h
> +++ b/src/common/defaults.h
> @@ -77,6 +77,8 @@
> #define DEFAULT_USTCONSUMERD32_ERR_SOCK_PATH DEFAULT_USTCONSUMERD32_PATH "/error"
>
> /* Default lttng run directory */
> +#define DEFAULT_LTTNG_HOME_ENV_VAR "LTTNG_HOME"
> +#define DEFAULT_LTTNG_FALLBACK_HOME_ENV_VAR "HOME"
> #define DEFAULT_LTTNG_RUNDIR "/var/run/lttng"
> #define DEFAULT_LTTNG_HOME_RUNDIR "%s/.lttng"
> #define DEFAULT_LTTNG_SESSIOND_PIDFILE "lttng-sessiond.pid"
> diff --git a/src/common/utils.c b/src/common/utils.c
> index 38f78a7..436febe 100644
> --- a/src/common/utils.c
> +++ b/src/common/utils.c
> @@ -32,6 +32,7 @@
> #include <common/runas.h>
>
> #include "utils.h"
> +#include "defaults.h"
>
> /*
> * Return the realpath(3) of the path even if the last directory token does not
> @@ -584,3 +585,17 @@ int utils_get_count_order_u32(uint32_t x)
>
> return fls_u32(x - 1);
> }
> +
> +/**
> + * Obtain the value of LTTNG_HOME environment variable, if exists.
> + * Otherwise returns the value of HOME.
> + */
> +char *utils_get_home_dir(void)
> +{
> + char *val = NULL;
> + val = getenv(DEFAULT_LTTNG_HOME_ENV_VAR);
> + if (val != NULL) {
> + return val;
> + }
> + return getenv(DEFAULT_LTTNG_FALLBACK_HOME_ENV_VAR);
> +}
> diff --git a/src/common/utils.h b/src/common/utils.h
> index 083acef..9e6fb37 100644
> --- a/src/common/utils.h
> +++ b/src/common/utils.h
> @@ -40,5 +40,6 @@ int utils_rotate_stream_file(char *path_name, char *file_name,
> uint64_t size,
> uint64_t count, int uid, int gid, int out_fd, uint64_t *new_count);
> int utils_parse_size_suffix(char *str, uint64_t *size);
> int utils_get_count_order_u32(uint32_t x);
> +char *utils_get_home_dir(void);
>
> #endif /* _COMMON_UTILS_H */
> diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
> index a7328eb..9d76f79 100644
> --- a/src/lib/lttng-ctl/lttng-ctl.c
> +++ b/src/lib/lttng-ctl/lttng-ctl.c
> @@ -32,6 +32,7 @@
> #include <common/defaults.h>
> #include <common/sessiond-comm/sessiond-comm.h>
> #include <common/uri.h>
> +#include <common/utils.h>
> #include <lttng/lttng.h>
>
> #include "filter/filter-ast.h"
> @@ -485,7 +486,7 @@ static int set_session_daemon_path(void)
> * With GNU C >= 2.1, snprintf returns the required size
> (excluding closing null)
> */
> ret = snprintf(sessiond_sock_path, sizeof(sessiond_sock_path),
> - DEFAULT_HOME_CLIENT_UNIX_SOCK, getenv("HOME"));
> + DEFAULT_HOME_CLIENT_UNIX_SOCK,
> utils_get_home_dir());
> if ((ret < 0) || (ret >= sizeof(sessiond_sock_path))) {
> goto error;
> }
> @@ -1543,7 +1544,7 @@ static int set_health_socket_path(void)
> * With GNU C < 2.1, snprintf returns -1 if the target buffer
> is too small;
> * With GNU C >= 2.1, snprintf returns the required size
> (excluding closing null)
> */
> - home = getenv("HOME");
> + home = utils_get_home_dir();
> if (home == NULL) {
> /* Fallback in /tmp .. */
> home = "/tmp";
> --
> 1.7.11.7
>
>
> Amit Margalit
> IBM XIV - /Storage Reinvented/
> XIV-NAS Development Team
> Tel. 03-689-7774
> Fax. 03-689-7230
>
>
>
> From: Amit Margalit/Israel/IBM at IBMIL
> To: David Goulet <dgoulet at efficios.com>
> Cc: lttng-dev at lists.lttng.org
> Date: 06/13/2013 12:39 PM
> Subject: Re: [lttng-dev] [RFC PATCH lttng-tools] Allow environment
> variable LTTNG_HOME to override HOME - for lttng-tools
> --------------------------------------------------------------------------------
>
>
>
> I think I've done all that you suggested, for lttng-tools only, though, based on
> cfa9a5a2b4a96e0d6a9eeddd2622a6d7c173b7ac which is the latest master as of right now.
>
> Here is the patch:
> From 5881718a60608d640ac1124c9c1f439a2a084707 Mon Sep 17 00:00:00 2001
> From: Amit Margalit <amitm at il.ibm.com>
> Date: Thu, 13 Jun 2013 12:35:13 +0300
> Subject: [PATCH] Using LTTNG_HOME environment variable if exists, with
> fallback to HOME
>
> ---
> [Old patch deleted]
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
More information about the lttng-dev
mailing list