/* * Set sessiond socket path by putting it in the global sessiond_sock_path * variable. * * Returns 0 on success, negative value on failure (the sessiond socket path * is somehow too long or ENOMEM). */ static int set_session_daemon_path(void) { int in_tgroup = 0; /* In tracing group */ uid_t uid; uid = getuid(); if (uid != 0) { /* Are we in the tracing group ? */ in_tgroup = check_tracing_group(tracing_group); } if ((uid == 0) || in_tgroup) { copy_string(sessiond_sock_path, DEFAULT_GLOBAL_CLIENT_UNIX_SOCK, sizeof(sessiond_sock_path)); } if (uid != 0) { int ret; if (in_tgroup) { /* Tracing group */ ret = try_connect_sessiond(sessiond_sock_path); if (ret >= 0) { goto end; } /* Global session daemon not available... */ } /* ...or not in tracing group (and not root), default */ /* * 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) */ ret = snprintf(sessiond_sock_path, sizeof(sessiond_sock_path), DEFAULT_HOME_CLIENT_UNIX_SOCK, getenv("HOME")); if ((ret < 0) || (ret >= sizeof(sessiond_sock_path))) { goto error; } } end: return 0; error: return -1; }
/* * Set health socket path by putting it in the global health_sock_path * variable. * * Returns 0 on success or assert(0) on ENOMEM. */ static int set_health_socket_path(void) { int in_tgroup = 0; /* In tracing group */ uid_t uid; const char *home; uid = getuid(); if (uid != 0) { /* Are we in the tracing group ? */ in_tgroup = check_tracing_group(tracing_group); } if ((uid == 0) || in_tgroup) { copy_string(health_sock_path, DEFAULT_GLOBAL_HEALTH_UNIX_SOCK, sizeof(health_sock_path)); } if (uid != 0) { int ret; /* * 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"); if (home == NULL) { /* Fallback in /tmp .. */ home = "/tmp"; } ret = snprintf(health_sock_path, sizeof(health_sock_path), DEFAULT_HOME_HEALTH_UNIX_SOCK, home); if ((ret < 0) || (ret >= sizeof(health_sock_path))) { /* ENOMEM at this point... just kill the control lib. */ assert(0); } } return 0; }
static int check_requirements(int *sudo) { int ret; ret = check_or_start_sessiond(); if (ret < 0) goto end; ret = check_or_start_relayd(); if (ret < 0) goto end; ret = check_tracing_group(); if (ret < 0) goto end; else if (ret == 1) *sudo = 1; ret = check_lttng_modules(*sudo); if (ret < 0) goto end; end: return ret; }