X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Frunas.c;h=5bd43e65b7c072b5ea40e1f6e16807f594986fe4;hb=4d86847e8786d4902dceeb1dff91791112d2c396;hp=2c2015aa2d5b8206bca9052320553f8da78d431d;hpb=9ef70f8738b524b8ea4f266c526de9d5a4fdc29c;p=lttng-tools.git diff --git a/src/common/runas.c b/src/common/runas.c index 2c2015aa2..5bd43e65b 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -153,13 +153,14 @@ int _open(void *_data) static int child_run_as(void *_data) { + int ret; struct run_as_data *data = _data; - size_t writelen, writeleft, index; + ssize_t writelen; + size_t writeleft, index; union { int i; char c[sizeof(int)]; } sendret; - int ret; /* * Child: it is safe to drop egid and euid while sharing the @@ -191,8 +192,10 @@ int child_run_as(void *_data) writeleft = sizeof(sendret); index = 0; do { - writelen = write(data->retval_pipe, &sendret.c[index], - writeleft); + do { + writelen = write(data->retval_pipe, &sendret.c[index], + writeleft); + } while (writelen < 0 && errno == EINTR); if (writelen < 0) { PERROR("write"); return EXIT_FAILURE; @@ -310,7 +313,14 @@ end: static int run_as_noclone(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) { - return cmd(data); + int ret; + mode_t old_mask; + + old_mask = umask(0); + ret = cmd(data); + umask(old_mask); + + return ret; } static @@ -330,6 +340,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid) } } +__attribute__((visibility("hidden"))) int run_as_mkdir_recursive(const char *path, mode_t mode, uid_t uid, gid_t gid) { struct run_as_mkdir_data data; @@ -341,6 +352,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"))) int run_as_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid) { struct run_as_mkdir_data data; @@ -356,6 +368,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"))) int run_as_open(const char *path, int flags, mode_t mode, uid_t uid, gid_t gid) { struct run_as_open_data data;