X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Futils.c;h=803fb3363c8148ecbe17d769d59b534cb1afa6d4;hb=77b1882c1ae0302be8102ca115812694e4411fc5;hp=664ba3e8e82abbdcf3a0c15614ba9b5858fbea93;hpb=84a93c0895b299b5bbca122a0cf399b12b8a8e63;p=lttng-tools.git diff --git a/src/common/utils.c b/src/common/utils.c index 664ba3e8e..803fb3363 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -71,7 +71,7 @@ * to specify the size of the resolved_path argument if given, or the size to * allocate. */ -LTTNG_HIDDEN +static char *utils_partial_realpath(const char *path, char *resolved_path, size_t size) { char *cut_path = NULL, *try_path = NULL, *try_path_prev = NULL; @@ -300,7 +300,7 @@ int expand_double_slashes_dot_and_dotdot(char *path) * Copy the current token which is neither a '.' nor a '..'. */ path[expanded_path_len++] = '/'; - memcpy(&path[expanded_path_len], curr_char, curr_token_len); + memmove(&path[expanded_path_len], curr_char, curr_token_len); expanded_path_len += curr_token_len; } @@ -379,6 +379,9 @@ char *_utils_expand_path(const char *path, bool keep_symlink) /* Resolve partially our path */ absolute_path = utils_partial_realpath(absolute_path, absolute_path, LTTNG_PATH_MAX); + if (!absolute_path) { + goto error; + } } ret = expand_double_slashes_dot_and_dotdot(absolute_path); @@ -544,6 +547,7 @@ void utils_close_pipe(int *src) if (ret) { PERROR("close pipe"); } + src[i] = -1; } } @@ -739,7 +743,8 @@ int utils_stream_file_path(const char *path_name, const char *file_name, char count_str[MAX_INT_DEC_LEN(count) + 1] = {}; const char *path_separator; - if (path_name && path_name[strlen(path_name) - 1] == '/') { + if (path_name && (path_name[0] == '\0' || + path_name[strlen(path_name) - 1] == '/')) { path_separator = ""; } else { path_separator = "/"; @@ -765,74 +770,6 @@ int utils_stream_file_path(const char *path_name, const char *file_name, return ret; } -/* - * Create the stream file on disk. - * - * Return 0 on success or else a negative value. - */ -LTTNG_HIDDEN -int utils_create_stream_file(const char *path_name, char *file_name, uint64_t size, - uint64_t count, int uid, int gid, char *suffix) -{ - int ret, flags, mode; - char path[LTTNG_PATH_MAX]; - - ret = utils_stream_file_path(path_name, file_name, - size, count, suffix, path, sizeof(path)); - if (ret < 0) { - goto error; - } - - /* - * With the session rotation feature on the relay, we might need to seek - * and truncate a tracefile, so we need read and write access. - */ - flags = O_RDWR | O_CREAT | O_TRUNC; - /* Open with 660 mode */ - mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP; - - if (uid < 0 || gid < 0) { - ret = open(path, flags, mode); - } else { - ret = run_as_open(path, flags, mode, uid, gid); - } - if (ret < 0) { - PERROR("open stream path %s", path); - } -error: - return ret; -} - -/* - * Unlink the stream tracefile from disk. - * - * Return 0 on success or else a negative value. - */ -LTTNG_HIDDEN -int utils_unlink_stream_file(const char *path_name, char *file_name, uint64_t size, - uint64_t count, int uid, int gid, char *suffix) -{ - int ret; - char path[LTTNG_PATH_MAX]; - - ret = utils_stream_file_path(path_name, file_name, size, count, suffix, - path, sizeof(path)); - if (ret < 0) { - goto error; - } - if (uid < 0 || gid < 0) { - ret = unlink(path); - } else { - ret = run_as_unlink(path, uid, gid); - } - if (ret < 0) { - goto error; - } -error: - DBG("utils_unlink_stream_file %s returns %d", path, ret); - return ret; -} - /** * Parse a string that represents a size in human readable format. It * supports decimal integers suffixed by 'k', 'K', 'M' or 'G'. @@ -1197,7 +1134,7 @@ int utils_get_count_order_u64(uint64_t x) * Otherwise returns the value of HOME. */ LTTNG_HIDDEN -char *utils_get_home_dir(void) +const char *utils_get_home_dir(void) { char *val = NULL; struct passwd *pwd; @@ -1341,8 +1278,14 @@ int utils_get_group_id(const char *name, bool warn, gid_t *gid) } } if (ret) { - PERROR("Failed to get group file entry for group name \"%s\"", - name); + if (ret == ESRCH) { + DBG("Could not find group file entry for group name '%s'", + name); + } else { + PERROR("Failed to get group file entry for group name '%s'", + name); + } + ret = -1; goto error; }