Cleanup compiler warnings
[lttng-tools.git] / ltt-sessiond / main.c
index 1139df8b94fd26e256d10be10b6dda15965616b0..567742ebb783bc1a4bfdf9f6ff89ddc8193f1604 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * 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,22 @@ static int modprobe_remove_kernel_modules(void);
  */
 static struct ltt_session_list *session_list_ptr;
 
+static gid_t allowed_group(void)
+{
+       struct group *grp;
+
+       if (opt_tracing_group) {
+               grp = getgrnam(opt_tracing_group);
+       } else {
+               grp = getgrnam(default_tracing_group);
+       }
+       if (!grp) {
+               return -1;
+       } else {
+               return grp->gr_gid;
+       }
+}
+
 /*
  * Init quit pipe.
  *
@@ -1045,7 +1062,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 +1243,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;
                }
@@ -2418,18 +2436,19 @@ end:
 }
 
 /*
- * Check if the global socket is available.  If yes, error is returned.
+ * Check if the global socket is available, and if a daemon is answering
+ * at the other side. If yes, error is returned.
  */
 static int check_existing_daemon(void)
 {
-       int ret;
-
-       ret = access(client_unix_sock_path, F_OK);
-       if (ret == 0) {
-               ret = access(apps_unix_sock_path, F_OK);
-       }
-
-       return ret;
+       if (access(client_unix_sock_path, F_OK) < 0 &&
+           access(apps_unix_sock_path, F_OK) < 0)
+               return 0;
+       /* Is there anybody out there ? */
+       if (lttng_session_daemon_alive())
+               return -EEXIST;
+       else
+               return 0;
 }
 
 /*
@@ -2441,14 +2460,10 @@ static int check_existing_daemon(void)
 static int set_permissions(void)
 {
        int ret;
-       struct group *grp;
-
-       /* Decide which group name to use */
-       (opt_tracing_group != NULL) ?
-               (grp = getgrnam(opt_tracing_group)) :
-               (grp = getgrnam(default_tracing_group));
+       gid_t gid;
 
-       if (grp == NULL) {
+       gid = allowed_group();
+       if (gid < 0) {
                if (is_root) {
                        WARN("No tracing group detected");
                        ret = 0;
@@ -2460,21 +2475,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");
@@ -2714,11 +2729,9 @@ int main(int argc, char **argv)
        DBG("Application socket path %s", apps_unix_sock_path);
 
        /*
-        * See if daemon already exist. If any of the two socket needed by the
-        * daemon are present, this test fails. However, if the daemon is killed
-        * with a SIGKILL, those unix socket must be unlinked by hand.
+        * See if daemon already exist.
         */
-       if ((ret = check_existing_daemon()) == 0) {
+       if ((ret = check_existing_daemon()) < 0) {
                ERR("Already running daemon.\n");
                /*
                 * We do not goto exit because we must not cleanup()
This page took 0.025148 seconds and 4 git commands to generate.