X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Frunas.c;h=3ae2e4c38d35e5d943f8ca9f3e49213d14472ed4;hb=7ce3675685dbbc7be9536eb9c2b5ff8d677dc0b5;hp=d75eb21027ce0ae2b7df768698d8c913bb4297ea;hpb=3fd15a7429ca3f5307a783e264155ae0218511ec;p=lttng-tools.git diff --git a/src/common/runas.c b/src/common/runas.c index d75eb2102..3ae2e4c38 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include #include @@ -96,8 +96,15 @@ int _mkdir_recursive(void *_data) static int _mkdir(void *_data) { + int ret; struct run_as_mkdir_data *data = _data; - return mkdir(data->path, data->mode); + + ret = mkdir(data->path, data->mode); + if (ret < 0) { + ret = -errno; + } + + return ret; } static @@ -130,14 +137,16 @@ int child_run_as(void *_data) ret = setegid(data->gid); if (ret < 0) { PERROR("setegid"); - return EXIT_FAILURE; + sendret.i = -1; + goto write_return; } } if (data->uid != geteuid()) { ret = seteuid(data->uid); if (ret < 0) { PERROR("seteuid"); - return EXIT_FAILURE; + sendret.i = -1; + goto write_return; } } /* @@ -145,6 +154,8 @@ int child_run_as(void *_data) */ umask(0); sendret.i = (*data->cmd)(data->data); + +write_return: /* send back return value */ writeleft = sizeof(sendret); index = 0; @@ -297,7 +308,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) } } -__attribute__((visibility("hidden"))) +LTTNG_HIDDEN int run_as_mkdir_recursive(const char *path, mode_t mode, uid_t uid, gid_t gid) { struct run_as_mkdir_data data; @@ -309,7 +320,7 @@ int run_as_mkdir_recursive(const char *path, mode_t mode, uid_t uid, gid_t gid) return run_as(_mkdir_recursive, &data, uid, gid); } -__attribute__((visibility("hidden"))) +LTTNG_HIDDEN int run_as_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid) { struct run_as_mkdir_data data; @@ -325,7 +336,7 @@ int run_as_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid) * Note: open_run_as is currently not working. We'd need to pass the fd * opened in the child to the parent. */ -__attribute__((visibility("hidden"))) +LTTNG_HIDDEN int run_as_open(const char *path, int flags, mode_t mode, uid_t uid, gid_t gid) { struct run_as_open_data data;