示例#1
0
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);
}
示例#2
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;
}
示例#3
0
文件: cgmanager.c 项目: skizhak/lxc
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;
}
示例#4
0
/*
 * 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;
}
示例#5
0
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);
	}
}