bool cgm_create(const char *controller, const char *cg, uid_t uid, gid_t gid) { int32_t e; pid_t pid = fork(); if (pid) { if (wait_for_pid(pid) != 0) return false; return true; } if (setgroups(0, NULL)) _exit(1); if (setresgid(gid, gid, gid)) _exit(1); if (setresuid(uid, uid, uid)) _exit(1); if (!cgm_dbus_connect()) { _exit(1); } if ( cgmanager_create_sync(NULL, cgroup_manager, controller, cg, &e) != 0) { NihError *nerr; nerr = nih_error_get(); fprintf(stderr, "call to create failed (%s:%s): %s\n", controller, cg, nerr->message); nih_free(nerr); cgm_dbus_disconnect(); _exit(1); } cgm_dbus_disconnect(); _exit(0); }
bool cgm_create(const char *cg, int32_t *existed) { if ( cgmanager_create_sync(NULL, cgroup_manager, ctrl_list, cg, existed) != 0) { NihError *nerr; nerr = nih_error_get(); fprintf(stderr, "call to create failed (%s:%s): %s\n", ctrl_list, cg, nerr->message); nih_free(nerr); return false; } return true; }
static bool lxc_cgmanager_create(const char *controller, const char *cgroup_path, int32_t *existed) { if ( cgmanager_create_sync(NULL, cgroup_manager, controller, cgroup_path, existed) != 0) { NihError *nerr; nerr = nih_error_get(); ERROR("call to cgmanager_create_sync failed: %s", nerr->message); nih_free(nerr); ERROR("Failed to create %s:%s", controller, cgroup_path); return false; } return true; }
/* * Check whether we can create the cgroups we would want */ static bool subsys_is_writeable(const char *controller, const char *probe) { int32_t existed; bool ret = true; if ( cgmanager_create_sync(NULL, cgroup_manager, controller, probe, &existed) != 0) { NihError *nerr; nerr = nih_error_get(); ERROR("call to cgmanager_create_sync failed: %s", nerr->message); nih_free(nerr); ERROR("Failed to create %s:%s", controller, probe); ret = false; } return ret; }
static void do_function(void *arguments) { char path[100]; int existed; char *value; bool err = false; if (!cgm_dbus_connect()) { fprintf(stderr, "Error connecting to dbus\n"); return; } sprintf(path, "cgmtest-%d", gettid()); if (connect_only) { if (cgmanager_create_sync(NULL, cgroup_manager, "freezer", path, &existed) != 0) { NihError *nerr = nih_error_get(); fprintf(stderr, "Error creating freezer cgroup: %s\n", nerr->message); nih_free(nerr); err = true; } if (cgmanager_get_value_sync(NULL, cgroup_manager, "freezer", path, "freezer.state", &value) != 0) { NihError *nerr = nih_error_get(); fprintf(stderr, "Error querying freezer cgroup: %s\n", nerr->message); nih_free(nerr); err = true; } if (cgmanager_remove_sync(NULL, cgroup_manager, "freezer", path, 1, &existed) != 0) { NihError *nerr = nih_error_get(); fprintf(stderr, "Error removing freezer cgroup: %s\n", nerr->message); nih_free(nerr); err = true; } } cgm_dbus_disconnect(); if (err) { fflush(stderr); exit(1); } }