• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ cgm_dbus_disconnect函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中cgm_dbus_disconnect函数的典型用法代码示例。如果您正苦于以下问题:C++ cgm_dbus_disconnect函数的具体用法?C++ cgm_dbus_disconnect怎么用?C++ cgm_dbus_disconnect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了cgm_dbus_disconnect函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: cgm_dbus_connect

static bool cgm_dbus_connect(void)
{
	DBusError dbus_error;

	dbus_error_init(&dbus_error);

	connection = dbus_connection_open_private(CGMANAGER_DBUS_SOCK, &dbus_error);
	if (!connection) {
		dbus_error_free(&dbus_error);
		return false;
	}
	dbus_connection_set_exit_on_disconnect(connection, FALSE);
	dbus_error_free(&dbus_error);
	cgroup_manager = nih_dbus_proxy_new(NULL, connection,
				NULL /* p2p */,
				"/org/linuxcontainers/cgmanager", NULL, NULL);
	if (!cgroup_manager) {
		NihError *nerr;
		nerr = nih_error_get();
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	// force fd passing negotiation
	if (cgmanager_ping_sync(NULL, cgroup_manager, 0) != 0) {
		NihError *nerr;
		nerr = nih_error_get();
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}
	return true;
}
开发者ID:ar45,项目名称:cgmanager,代码行数:34,代码来源:cgm-concurrent.c


示例2: pam_sm_open_session

int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc,
		const char **argv)
{
	const char *PAM_user = NULL;
	int ret;

	if (!cgm_dbus_connect()) {
		mysyslog(LOG_ERR, "Failed to connect to cgmanager\n");
		return PAM_SESSION_ERR;
	}
	if (argc > 1 && strcmp(argv[0], "-c") == 0)
		ctrl_list = validate_and_dup(argv[1]);
	if (!ctrl_list) 
		get_active_controllers();
	cgm_escape();

	ret = pam_get_user(pamh, &PAM_user, NULL);
	if (ret != PAM_SUCCESS) {
		cgm_dbus_disconnect();
		mysyslog(LOG_ERR, "PAM-CGM: couldn't get user\n");
		return PAM_SESSION_ERR;
	}

	ret = handle_login(PAM_user);
	cgm_dbus_disconnect();
	return ret;
}
开发者ID:hallyn,项目名称:pam-cgm,代码行数:27,代码来源:pam_cgm.c


示例3: chown_cgroup_wrapper

static int chown_cgroup_wrapper(void *data)
{
	struct chown_data *arg = data;
	char **slist = subsystems;
	int i, ret = -1;
	uid_t destuid;

	if (setresgid(0,0,0) < 0)
		SYSERROR("Failed to setgid to 0");
	if (setresuid(0,0,0) < 0)
		SYSERROR("Failed to setuid to 0");
	if (setgroups(0, NULL) < 0)
		SYSERROR("Failed to clear groups");
	cgm_dbus_disconnect();
	if (!cgm_dbus_connect()) {
		ERROR("Error connecting to cgroup manager");
		return -1;
	}
	destuid = get_ns_uid(arg->origuid);

	if (cgm_supports_multiple_controllers)
		slist = subsystems_inone;

	for (i = 0; slist[i]; i++) {
		if (do_chown_cgroup(slist[i], arg->cgroup_path, destuid) < 0) {
			ERROR("Failed to chown %s:%s to container root",
				slist[i], arg->cgroup_path);
			goto fail;
		}
	}
	ret = 0;
fail:
	cgm_dbus_disconnect();
	return ret;
}
开发者ID:StarsoftInformatique,项目名称:lxc,代码行数:35,代码来源:cgmanager.c


示例4: ERROR

static void *cgm_init(const char *name)
{
	struct cgm_data *d;

	if (!cgm_dbus_connect()) {
		ERROR("Error connecting to cgroup manager");
		return NULL;
	}

	check_supports_multiple_controllers(-1);

	d = malloc(sizeof(*d));
	if (!d) {
		cgm_dbus_disconnect();
		return NULL;
	}

	memset(d, 0, sizeof(*d));
	d->name = strdup(name);
	if (!d->name) {
		cgm_dbus_disconnect();
		goto err1;
	}

	d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");

	// cgm_create immediately gets called so keep the connection open
	return d;

err1:
	free(d);
	return NULL;
}
开发者ID:MSylvia,项目名称:koding,代码行数:33,代码来源:cgmanager.c


示例5: cgm_attach

/*
 * TODO: this should be re-written to use the get_config_item("lxc.id_map")
 * cmd api instead of getting the idmap from c->lxc_conf.  The reason is
 * that the id_maps may be different if the container was started with a
 * -f or -s argument.
 * The reason I'm punting on that is because we'll need to parse the
 * idmap results.
 */
static bool cgm_attach(const char *name, const char *lxcpath, pid_t pid)
{
    bool pass;
    char *cgroup = NULL;

    if (!cgm_dbus_connect()) {
        ERROR("Error connecting to cgroup manager");
        return false;
    }
    // cgm_create makes sure that we have the same cgroup name for all
    // subsystems, so since this is a slow command over the cmd socket,
    // just get the cgroup name for the first one.
    cgroup = try_get_abs_cgroup(name, lxcpath, subsystems[0]);
    if (!cgroup) {
        ERROR("Failed to get cgroup for controller %s", subsystems[0]);
        cgm_dbus_disconnect();
        return false;
    }

    pass = do_cgm_enter(pid, cgroup, abs_cgroup_supported());
    cgm_dbus_disconnect();
    if (!pass)
        ERROR("Failed to enter group %s", cgroup);

    free_abs_cgroup(cgroup);
    return pass;
}
开发者ID:JedMeister,项目名称:jessie-lxc-dev,代码行数:35,代码来源:cgmanager.c


示例6: cgm_create

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);
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:34,代码来源:cgmanager.c


示例7: cgm_dbus_connect

static bool cgm_dbus_connect(void)
{
	DBusError dbus_error;
	static DBusConnection *connection;

	cgm_lock();
	if (!dbus_threads_initialized) {
		// tell dbus to do struct locking for thread safety
		dbus_threads_init_default();
		dbus_threads_initialized = true;
	}

	dbus_error_init(&dbus_error);

	connection = dbus_connection_open_private(CGMANAGER_DBUS_SOCK, &dbus_error);
	if (!connection) {
		DEBUG("Failed opening dbus connection: %s: %s",
				dbus_error.name, dbus_error.message);
		dbus_error_free(&dbus_error);
		cgm_unlock();
		return false;
	}
	dbus_connection_set_exit_on_disconnect(connection, FALSE);
	dbus_error_free(&dbus_error);
	cgroup_manager = nih_dbus_proxy_new(NULL, connection,
				NULL /* p2p */,
				"/org/linuxcontainers/cgmanager", NULL, NULL);
	dbus_connection_unref(connection);
	if (!cgroup_manager) {
		NihError *nerr;
		nerr = nih_error_get();
		ERROR("Error opening cgmanager proxy: %s", nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	// get the api version
	if (cgmanager_get_api_version_sync(NULL, cgroup_manager, &api_version) != 0) {
		NihError *nerr;
		nerr = nih_error_get();
		ERROR("Error cgroup manager api version: %s", nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}
	if (api_version < CGM_SUPPORTS_NAMED)
		cull_user_controllers();
	return true;
}
开发者ID:StarsoftInformatique,项目名称:lxc,代码行数:50,代码来源:cgmanager.c


示例8: cgm_enter

static inline bool cgm_enter(void *hdata, pid_t pid)
{
	struct cgm_data *d = hdata;
	char **slist = subsystems;
	bool ret = false;
	int i;

	if (!d || !d->cgroup_path)
		return false;

	if (!cgm_dbus_connect()) {
		ERROR("Error connecting to cgroup manager");
		return false;
	}

	if (cgm_all_controllers_same)
		slist = subsystems_inone;

	for (i = 0; slist[i]; i++) {
		if (!lxc_cgmanager_enter(pid, slist[i], d->cgroup_path, false))
			goto out;
	}
	ret = true;
out:
	cgm_dbus_disconnect();
	return ret;
}
开发者ID:StarsoftInformatique,项目名称:lxc,代码行数:27,代码来源:cgmanager.c


示例9: cgm_get_nrtasks

/*
 * nrtasks is called by the utmp helper by the container monitor.
 * cgmanager socket was closed after cgroup setup was complete, so we need
 * to reopen here.
 *
 * Return -1 on error.
 */
static int cgm_get_nrtasks(void *hdata)
{
	struct cgm_data *d = hdata;
	int32_t *pids;
	size_t pids_len;

	if (!d || !d->cgroup_path)
		return -1;

	if (!cgm_dbus_connect()) {
		ERROR("Error connecting to cgroup manager");
		return -1;
	}
	if (cgmanager_get_tasks_sync(NULL, cgroup_manager, subsystems[0],
				     d->cgroup_path, &pids, &pids_len) != 0) {
		NihError *nerr;
		nerr = nih_error_get();
		ERROR("call to cgmanager_get_tasks_sync failed: %s", nerr->message);
		nih_free(nerr);
		pids_len = -1;
		goto out;
	}
	nih_free(pids);
out:
	cgm_dbus_disconnect();
	return pids_len;
}
开发者ID:StarsoftInformatique,项目名称:lxc,代码行数:34,代码来源:cgmanager.c


示例10: cgm_list_children

bool cgm_list_children(const char *controller, const char *cgroup, char ***list)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_list_children_sync(NULL, cgroup_manager, controller, cgroup, list) != 0 ) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to list_children (%s:%s) failed: %s\n", controller, cgroup, nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:18,代码来源:cgmanager.c


示例11: cgm_get_controllers

bool cgm_get_controllers(char ***contrls)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_list_controllers_sync(NULL, cgroup_manager, contrls) != 0 ) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to list_controllers failed: %s\n", nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:18,代码来源:cgmanager.c


示例12: cgm_escape_cgroup

bool cgm_escape_cgroup(void)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_move_pid_abs_sync(NULL, cgroup_manager, "all", "/", (int32_t) getpid()) != 0 ) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to move_pid_abs (all:/) failed: %s\n", nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:18,代码来源:cgmanager.c


示例13: lxc_list_controllers

static bool lxc_list_controllers(char ***list)
{
	if (!cgm_dbus_connect()) {
		ERROR("Error connecting to cgroup manager");
		return false;
	}
	if (cgmanager_list_controllers_sync(NULL, cgroup_manager, list) != 0) {
		NihError *nerr;
		nerr = nih_error_get();
		ERROR("call to cgmanager_list_controllers_sync failed: %s", nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:StarsoftInformatique,项目名称:lxc,代码行数:18,代码来源:cgmanager.c


示例14: cgm_chown_file

bool cgm_chown_file(const char *controller, const char *cg, uid_t uid, gid_t gid)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_chown_sync(NULL, cgroup_manager, controller, cg, uid, gid) != 0) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to chown (%s:%s, %d, %d) failed: %s\n", controller, cg, uid, gid, nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:18,代码来源:cgmanager.c


示例15: cgm_chmod_file

bool cgm_chmod_file(const char *controller, const char *file, mode_t mode)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_chmod_sync(NULL, cgroup_manager, controller, file, "", mode) != 0) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to chmod (%s:%s, %d) failed: %s\n", controller, file, mode, nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:18,代码来源:cgmanager.c


示例16: verify_final_subsystems

/*
 * Make sure that all the controllers are writeable.
 * If any are not, then
 *   - if they are listed in lxc.cgroup.use, refuse to start
 *   - else if they are crucial subsystems, refuse to start
 *   - else warn and do not use them
 */
static bool verify_final_subsystems(const char *cgroup_use)
{
	int i;
	bool dropped_any = false;
	bool bret = false;
	const char *cgroup_pattern;
	char tmpnam[50], *probe;

	if (!cgm_dbus_connect()) {
		ERROR("Error connecting to cgroup manager");
		return false;
	}

	cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");
	i = snprintf(tmpnam, 50, "lxcprobe-%d", getpid());
	if (i < 0 || i >= 50) {
		ERROR("Attack - format string modified?");
		return false;
	}
	probe = lxc_string_replace("%n", tmpnam, cgroup_pattern);
	if (!probe)
		goto out;

	i = 0;
	while (i < nr_subsystems) {
		char *p = get_last_controller_in_list(subsystems[i]);

		if (!subsys_is_writeable(p, probe)) {
			if (is_crucial_subsys(p)) {
				ERROR("Cannot write to crucial subsystem %s\n",
					subsystems[i]);
				goto out;
			}
			if (cgroup_use && any_in_comma_list(subsystems[i], cgroup_use)) {
				ERROR("Cannot write to subsystem %s which is requested in lxc.cgroup.use\n",
					subsystems[i]);
				goto out;
			}
			WARN("Cannot write to subsystem %s, continuing with out it\n",
				subsystems[i]);
			dropped_any = true;
			drop_subsystem(i);
		} else {
			cgm_remove_cgroup(subsystems[i], probe);
			i++;
		}
	}

	if (dropped_any)
		cgm_all_controllers_same = false;
	bret = true;

out:
	free(probe);
	cgm_dbus_disconnect();
	return bret;
}
开发者ID:bhanug,项目名称:lxc,代码行数:64,代码来源:cgmanager.c


示例17: cg_create

int cg_create(const char *controller, const char *path, const char *suffix) {
    _cleanup_free_ char *fs = NULL;
    int r;

#ifdef HAVE_CGMANAGER
    /* CGManager support */
    int existed;
    if (cgm_dbus_connect()) {
        if (!controller) {
            cgm_dbus_disconnect();
            return -1;
        }

        r = cgm_create(normalize_controller(controller),
                       path, &existed);

        cgm_dbus_disconnect();

        if (!r)
            return -1;

        return 1;
    }
#endif

    r = cg_get_path_and_check(controller, path, suffix, &fs);
    if (r < 0)
        return r;

    r = mkdir_parents_label(fs, 0755);
    if (r < 0)
        return r;

    if (mkdir(fs, 0755) < 0) {

        if (errno == EEXIST)
            return 0;

        return -errno;
    }

    return 1;
}
开发者ID:linuxmint,项目名称:systemd-rosa,代码行数:43,代码来源:cgroup-label.c


示例18: cgm_move_pid

bool cgm_move_pid(const char *controller, const char *cgroup, pid_t pid)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_move_pid_sync(NULL, cgroup_manager, controller, cgroup,
				(int32_t) pid) != 0 ) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to move_pid (%s:%s, %d) failed: %s\n", controller, cgroup, pid, nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:19,代码来源:cgmanager.c


示例19: cgm_list_keys

bool cgm_list_keys(const char *controller, const char *cgroup, struct cgm_keys ***keys)
{
	if (!cgm_dbus_connect()) {
		return false;
	}

	if ( cgmanager_list_keys_sync(NULL, cgroup_manager, controller, cgroup,
				(CgmanagerListKeysOutputElement ***)keys) != 0 ) {
		NihError *nerr;
		nerr = nih_error_get();
		fprintf(stderr, "call to list_keys (%s:%s) failed: %s\n", controller, cgroup, nerr->message);
		nih_free(nerr);
		cgm_dbus_disconnect();
		return false;
	}

	cgm_dbus_disconnect();
	return true;
}
开发者ID:RobinSystems,项目名称:lxcfs,代码行数:19,代码来源:cgmanager.c


示例20: cgm_dbus_disconnect

/*
 * called during cgroup.c:cgroup_ops_init(), at startup.  No threads.
 * We check whether we can talk to cgmanager, escape to root cgroup if
 * we are root, then close the connection.
 */
struct cgroup_ops *cgm_ops_init(void)
{
	if (!collect_subsytems())
		return NULL;
	if (!cgm_dbus_connect())
		goto err1;

	// root;  try to escape to root cgroup
	if (geteuid() == 0 && !lxc_cgmanager_escape())
		goto err2;
	cgm_dbus_disconnect();

	return &cgmanager_ops;

err2:
	cgm_dbus_disconnect();
err1:
	free_subsystems();
	return NULL;
}
开发者ID:MSylvia,项目名称:koding,代码行数:25,代码来源:cgmanager.c



注:本文中的cgm_dbus_disconnect函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ cgocall函数代码示例发布时间:2022-05-30
下一篇:
C++ cgiSpoof函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap