X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Fmain.c;h=d104830667dd6cf9efc040584a5c18c4293381c9;hp=1e2a0831dc80187b4b581e72ef97a037762a3fa4;hb=996b65c843a7ef76769e4f6cf66055c7c4acf3d0;hpb=7d8234d9e6f162ee642cdbec911f46c29b012c3d diff --git a/ltt-sessiond/main.c b/ltt-sessiond/main.c index 1e2a0831d..d10483066 100644 --- a/ltt-sessiond/main.c +++ b/ltt-sessiond/main.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011 - David Goulet + * Copyright (C) 2011 - Mathieu Desnoyers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -114,6 +115,20 @@ static int modprobe_remove_kernel_modules(void); */ static struct ltt_session_list *session_list_ptr; +static gid_t allowed_group(void) +{ + struct group *grp; + + grp = (opt_tracing_group != NULL) ? + (grp = getgrnam(opt_tracing_group)) : + (grp = getgrnam(default_tracing_group)); + if (!grp) { + return -1; + } else { + return grp->gr_gid; + } +} + /* * Init quit pipe. * @@ -1045,7 +1060,7 @@ static int mount_debugfs(char *path) int ret; char *type = "debugfs"; - ret = mkdir_recursive(path, S_IRWXU | S_IRWXG); + ret = mkdir_recursive(path, S_IRWXU | S_IRWXG, geteuid(), getegid()); if (ret < 0) { goto error; } @@ -1226,9 +1241,10 @@ static int create_kernel_session(struct ltt_session *session) goto error; } - ret = mkdir_recursive(session->path, S_IRWXU | S_IRWXG ); + ret = mkdir_recursive(session->path, S_IRWXU | S_IRWXG, + geteuid(), allowed_group()); if (ret < 0) { - if (ret != EEXIST) { + if (ret != -EEXIST) { ERR("Trace directory creation error"); goto error; } @@ -2445,13 +2461,10 @@ static int set_permissions(void) { int ret; struct group *grp; + gid_t gid; - /* Decide which group name to use */ - (opt_tracing_group != NULL) ? - (grp = getgrnam(opt_tracing_group)) : - (grp = getgrnam(default_tracing_group)); - - if (grp == NULL) { + gid = allowed_group(); + if (gid < 0) { if (is_root) { WARN("No tracing group detected"); ret = 0; @@ -2463,21 +2476,21 @@ static int set_permissions(void) } /* Set lttng run dir */ - ret = chown(LTTNG_RUNDIR, 0, grp->gr_gid); + ret = chown(LTTNG_RUNDIR, 0, gid); if (ret < 0) { ERR("Unable to set group on " LTTNG_RUNDIR); perror("chown"); } /* lttng client socket path */ - ret = chown(client_unix_sock_path, 0, grp->gr_gid); + ret = chown(client_unix_sock_path, 0, gid); if (ret < 0) { ERR("Unable to set group on %s", client_unix_sock_path); perror("chown"); } /* kconsumerd error socket path */ - ret = chown(kconsumerd_err_unix_sock_path, 0, grp->gr_gid); + ret = chown(kconsumerd_err_unix_sock_path, 0, gid); if (ret < 0) { ERR("Unable to set group on %s", kconsumerd_err_unix_sock_path); perror("chown");