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;
+ case LTTNG_KERNEL_CONTEXT_UID:
+ context_type_string = config_event_context_uid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_EUID:
+ context_type_string = config_event_context_euid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_SUID:
+ context_type_string = config_event_context_suid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_GID:
+ context_type_string = config_event_context_gid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_EGID:
+ context_type_string = config_event_context_egid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_SGID:
+ context_type_string = config_event_context_sgid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_VUID:
+ context_type_string = config_event_context_vuid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_VEUID:
+ context_type_string = config_event_context_veuid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_VSUID:
+ context_type_string = config_event_context_vsuid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_VGID:
+ context_type_string = config_event_context_vgid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_VEGID:
+ context_type_string = config_event_context_vegid;
+ break;
+ case LTTNG_KERNEL_CONTEXT_VSGID:
+ context_type_string = config_event_context_vsgid;
+ break;
default:
context_type_string = NULL;
}
case LTTNG_UST_CONTEXT_APP_CONTEXT:
context_type_string = config_event_context_app;
break;
+ case LTTNG_UST_CONTEXT_CGROUP_NS:
+ context_type_string = config_event_context_cgroup_ns;
+ break;
+ case LTTNG_UST_CONTEXT_IPC_NS:
+ context_type_string = config_event_context_ipc_ns;
+ break;
+ case LTTNG_UST_CONTEXT_MNT_NS:
+ context_type_string = config_event_context_mnt_ns;
+ break;
+ case LTTNG_UST_CONTEXT_NET_NS:
+ context_type_string = config_event_context_net_ns;
+ break;
+ case LTTNG_UST_CONTEXT_PID_NS:
+ context_type_string = config_event_context_pid_ns;
+ break;
+ case LTTNG_UST_CONTEXT_USER_NS:
+ context_type_string = config_event_context_user_ns;
+ break;
+ case LTTNG_UST_CONTEXT_UTS_NS:
+ context_type_string = config_event_context_uts_ns;
+ break;
+ case LTTNG_UST_CONTEXT_VUID:
+ context_type_string = config_event_context_vuid;
+ break;
+ case LTTNG_UST_CONTEXT_VEUID:
+ context_type_string = config_event_context_veuid;
+ break;
+ case LTTNG_UST_CONTEXT_VSUID:
+ context_type_string = config_event_context_vsuid;
+ break;
+ case LTTNG_UST_CONTEXT_VGID:
+ context_type_string = config_event_context_vgid;
+ break;
+ case LTTNG_UST_CONTEXT_VEGID:
+ context_type_string = config_event_context_vegid;
+ break;
+ case LTTNG_UST_CONTEXT_VSGID:
+ context_type_string = config_event_context_vsgid;
+ break;
case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER:
/*
* Error, should not be stored in the XML, perf contexts
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;
}