case LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL:
context_type_string = config_event_context_callstack_kernel;
break;
+ case LTTNG_KERNEL_CONTEXT_CGROUP_NS:
+ context_type_string = config_event_context_cgroup_ns;
+ break;
+ case LTTNG_KERNEL_CONTEXT_IPC_NS:
+ context_type_string = config_event_context_ipc_ns;
+ break;
+ case LTTNG_KERNEL_CONTEXT_MNT_NS:
+ context_type_string = config_event_context_mnt_ns;
+ break;
+ case LTTNG_KERNEL_CONTEXT_NET_NS:
+ context_type_string = config_event_context_net_ns;
+ break;
+ case LTTNG_KERNEL_CONTEXT_PID_NS:
+ context_type_string = config_event_context_pid_ns;
+ break;
+ case LTTNG_KERNEL_CONTEXT_USER_NS:
+ context_type_string = config_event_context_user_ns;
+ break;
+ case LTTNG_KERNEL_CONTEXT_UTS_NS:
+ context_type_string = config_event_context_uts_ns;
+ break;
default:
context_type_string = NULL;
}
struct config_writer *writer = NULL;
size_t session_name_len;
const char *provided_path;
+ int file_open_flags = O_CREAT | O_WRONLY | O_TRUNC;
assert(session);
assert(attr);
len += sizeof(DEFAULT_SESSION_CONFIG_FILE_EXTENSION);
config_file_path[len] = '\0';
- if (!access(config_file_path, F_OK) && !attr->overwrite) {
- /* File exists, notify the user since the overwrite flag is off. */
- ret = LTTNG_ERR_SAVE_FILE_EXIST;
- goto end;
+ if (!attr->overwrite) {
+ file_open_flags |= O_EXCL;
}
- fd = run_as_open(config_file_path, O_CREAT | O_WRONLY | O_TRUNC,
+ fd = run_as_open(config_file_path, file_open_flags,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
LTTNG_SOCK_GET_UID_CRED(creds), LTTNG_SOCK_GET_GID_CRED(creds));
if (fd < 0) {
PERROR("Could not create configuration file");
- ret = LTTNG_ERR_SAVE_IO_FAIL;
+ switch (errno) {
+ case EEXIST:
+ ret = LTTNG_ERR_SAVE_FILE_EXIST;
+ break;
+ case EACCES:
+ ret = LTTNG_ERR_EPERM;
+ break;
+ default:
+ ret = LTTNG_ERR_SAVE_IO_FAIL;
+ break;
+ }
goto end;
}