X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=lttng-sessiond%2Fsession.c;h=1a79fd564b40da5d7d26d29c1ba276003cedeac0;hp=bf16f76cba40a9cfeb7a71ef7e6c8cbaa30ec439;hb=e11d277bc11aafd396faebe83734971c814214e7;hpb=44e96653751b3d75c823abc6275d8e732738c789 diff --git a/lttng-sessiond/session.c b/lttng-sessiond/session.c index bf16f76cb..1a79fd564 100644 --- a/lttng-sessiond/session.c +++ b/lttng-sessiond/session.c @@ -21,16 +21,16 @@ #include #include #include +#include +#include #include #include #include -#include "hashtable.h" +#include "common/runas.h" #include "session.h" -#include "../hashtable/hash.h" - /* * NOTES: * @@ -164,7 +164,7 @@ int session_destroy(struct ltt_session *session) /* * Create a brand new session and add it to the session list. */ -int session_create(char *name, char *path) +int session_create(char *name, char *path, uid_t uid, gid_t gid) { int ret; struct ltt_session *new_session; @@ -214,12 +214,27 @@ int session_create(char *name, char *path) /* Init lock */ pthread_mutex_init(&new_session->lock, NULL); + new_session->uid = uid; + new_session->gid = gid; + + ret = run_as_mkdir_recursive(new_session->path, S_IRWXU | S_IRWXG, + new_session->uid, new_session->gid); + if (ret < 0) { + if (ret != -EEXIST) { + ERR("Trace directory creation error"); + ret = LTTCOMM_CREATE_FAIL; + goto error; + } + } + /* Add new session to the session list */ session_lock_list(); - new_session->uid = add_session_list(new_session); + new_session->id = add_session_list(new_session); session_unlock_list(); - DBG("Tracing session %s created in %s with UID %d", name, path, new_session->uid); + DBG("Tracing session %s created in %s with ID %d by UID %d GID %d", + name, path, new_session->id, + new_session->uid, new_session->gid); return LTTCOMM_OK;