*/
int cgroup_config_unload_config(const char *pathname, int flags);
+/**
+ * Sets default permissions of groups created by subsequent
+ * cgroup_config_load_config() calls. If a config file contains a 'default {}'
+ * section, the default permissions from the config file is then used.
+ *
+ * Use cgroup_new_cgroup() to create a dummy group and cgroup_set_uid_gid() and
+ * cgroup_set_permissions() to set its permissions. Use NO_UID_GID instead of
+ * GID/UID and NO_PERMS instead of file/directory permissions to let kernel
+ * decide the default permissions where you don't want specific user and/or
+ * permissions. Kernel then uses current user/group and permissions from umask
+ * then.
+ *
+ * @param new_default New default permissions from this group are copied to
+ * libcgroup internal structures. I.e., this group can be freed immediatelly
+ * after this function returns.
+ */
+int cgroup_config_set_default(struct cgroup *new_default);
+
/**
* @}
* @}
extern int yyparse(void);
static struct cgroup default_group;
+static int default_group_set = 0;
/*
* The basic global data structures.
config_table_index = 0;
namespace_table_index = 0;
cgroup_table_index = 0;
- /* init the default cgroup */
- init_cgroup_table(&default_group, 1);
+
+ if (!default_group_set) {
+ /* init the default cgroup */
+ init_cgroup_table(&default_group, 1);
+ }
/*
* Parser calls longjmp() on really fatal error (like out-of-memory).
init_cgroup_table(config_cgroup, 1);
return 0;
}
+
+int cgroup_config_set_default(struct cgroup *new_default)
+{
+ if (!new_default)
+ return ECGINVAL;
+
+ init_cgroup_table(&default_group, 1);
+
+ default_group.control_dperm = new_default->control_dperm;
+ default_group.control_fperm = new_default->control_fperm;
+ default_group.control_gid = new_default->control_gid;
+ default_group.control_uid = new_default->control_uid;
+ default_group.task_fperm = new_default->task_fperm;
+ default_group.tasks_gid = new_default->tasks_gid;
+ default_group.tasks_uid = new_default->tasks_uid;
+ default_group_set = 1;
+
+ return 0;
+}