X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Frunas.c;h=7fbb010115673827f68b0bb8e11fb8a5ed76c5d5;hb=225687bb334e23bdde1061106e4a0d78e7c71d03;hp=f8263793dad72c94dec9180d5feb2f4094b0d112;hpb=fcde531afedaadb5dadad502e42008718d73bd76;p=lttng-tools.git diff --git a/src/common/runas.c b/src/common/runas.c index f8263793d..7fbb01011 100644 --- a/src/common/runas.c +++ b/src/common/runas.c @@ -90,6 +90,7 @@ struct run_as_unlink_data { struct run_as_rmdir_data { int dirfd; char path[LTTNG_PATH_MAX]; + int flags; /* enum lttng_directory_handle_rmdir_recursive_flags */ } LTTNG_PACKED; struct run_as_extract_elf_symbol_offset_data { @@ -471,7 +472,7 @@ int _rmdir_recursive(struct run_as_data *data, struct run_as_ret *ret_value) data->u.rmdir.dirfd = -1; ret_value->u.ret = lttng_directory_handle_remove_subdirectory_recursive( - &handle, data->u.rmdir.path); + &handle, data->u.rmdir.path, data->u.rmdir.flags); ret_value->_errno = errno; ret_value->_error = (ret_value->u.ret) ? true : false; lttng_directory_handle_fini(&handle); @@ -511,15 +512,17 @@ int _extract_elf_symbol_offset(struct run_as_data *data, struct run_as_ret *ret_value) { int ret = 0; + uint64_t offset; ret_value->_error = false; ret = lttng_elf_get_symbol_offset(data->u.extract_elf_symbol_offset.fd, data->u.extract_elf_symbol_offset.function, - &ret_value->u.extract_elf_symbol_offset.offset); + &offset); if (ret) { DBG("Failed to extract ELF function offset"); ret_value->_error = true; } + ret_value->u.extract_elf_symbol_offset.offset = offset; return ret; } @@ -1538,13 +1541,13 @@ error: } LTTNG_HIDDEN -int run_as_rmdir_recursive(const char *path, uid_t uid, gid_t gid) +int run_as_rmdir_recursive(const char *path, uid_t uid, gid_t gid, int flags) { - return run_as_rmdirat_recursive(AT_FDCWD, path, uid, gid); + return run_as_rmdirat_recursive(AT_FDCWD, path, uid, gid, flags); } LTTNG_HIDDEN -int run_as_rmdirat_recursive(int dirfd, const char *path, uid_t uid, gid_t gid) +int run_as_rmdirat_recursive(int dirfd, const char *path, uid_t uid, gid_t gid, int flags) { int ret; struct run_as_data data = {}; @@ -1559,6 +1562,7 @@ int run_as_rmdirat_recursive(int dirfd, const char *path, uid_t uid, gid_t gid) goto error; } data.u.rmdir.dirfd = dirfd; + data.u.rmdir.flags = flags; run_as(dirfd == AT_FDCWD ? RUN_AS_RMDIR_RECURSIVE : RUN_AS_RMDIRAT_RECURSIVE, &data, &run_as_ret, uid, gid); errno = run_as_ret._errno;