コード例 #1
0
int security_compute_relabel(const char * scon,
			     const char * tcon,
			     security_class_t tclass,
			     char ** newcon)
{
	int ret;
	char * rscon;
	char * rtcon;
	char * rnewcon;

	if (selinux_trans_to_raw_context(scon, &rscon))
		return -1;
	if (selinux_trans_to_raw_context(tcon, &rtcon)) {
		freecon(rscon);
		return -1;
	}

	ret = security_compute_relabel_raw(rscon, rtcon, tclass, &rnewcon);

	freecon(rscon);
	freecon(rtcon);
	if (!ret) {
		ret = selinux_raw_to_trans_context(rnewcon, newcon);
		freecon(rnewcon);
	}

	return ret;
}
コード例 #2
0
int security_compute_relabel(security_context_t scon,
                             security_context_t tcon,
                             security_class_t tclass,
                             security_context_t *newcon)
{
	int ret;
	security_context_t rscon = scon;
	security_context_t rtcon = tcon;
	security_context_t rnewcon;

	if (context_translations) {
		if (trans_to_raw_context(scon, &rscon))
			return -1;
		if (trans_to_raw_context(tcon, &rtcon)) {
			freecon(rscon);
			return -1;
		}
	}

 	ret = security_compute_relabel_raw(rscon, rtcon, tclass, &rnewcon);

	if (context_translations) {
		freecon(rscon);
		freecon(rtcon);
		if (!ret) {
			if (raw_to_trans_context(rnewcon, newcon)) {
				*newcon = NULL;
				ret = -1;
			}
			freecon(rnewcon);
		}
	} else if (!ret)
		*newcon = rnewcon;

	return ret;
}