예제 #1
0
파일: log.c 프로젝트: 0xroot/setools3
void seaudit_log_destroy(seaudit_log_t ** log)
{
	size_t i;
	if (log == NULL || *log == NULL) {
		return;
	}
	for (i = 0; i < apol_vector_get_size((*log)->models); i++) {
		seaudit_model_t *m = apol_vector_get_element((*log)->models, i);
		model_remove_log(m, *log);
	}
	apol_vector_destroy(&(*log)->messages);
	apol_vector_destroy(&(*log)->malformed_msgs);
	apol_vector_destroy(&(*log)->models);
	apol_bst_destroy(&(*log)->types);
	apol_bst_destroy(&(*log)->classes);
	apol_bst_destroy(&(*log)->roles);
	apol_bst_destroy(&(*log)->users);
	apol_bst_destroy(&(*log)->perms);
	apol_bst_destroy(&(*log)->hosts);
	apol_bst_destroy(&(*log)->bools);
	apol_bst_destroy(&(*log)->managers);
	apol_bst_destroy(&(*log)->mls_lvl);
	apol_bst_destroy(&(*log)->mls_clr);
	free(*log);
	*log = NULL;
}
예제 #2
0
void poldiff_destroy(poldiff_t ** diff)
{
	if (!diff || !(*diff))
		return;
	apol_policy_destroy(&(*diff)->orig_pol);
	apol_policy_destroy(&(*diff)->mod_pol);
	apol_bst_destroy(&(*diff)->class_bst);
	apol_bst_destroy(&(*diff)->perm_bst);
	apol_bst_destroy(&(*diff)->bool_bst);

	type_map_destroy(&(*diff)->type_map);
	attrib_summary_destroy(&(*diff)->attrib_diffs);
	poldiff_avrule_destroy(&(*diff)->avrule_diffs[AVRULE_OFFSET_ALLOW]);
	poldiff_avrule_destroy(&(*diff)->avrule_diffs[AVRULE_OFFSET_AUDITALLOW]);
	poldiff_avrule_destroy(&(*diff)->avrule_diffs[AVRULE_OFFSET_DONTAUDIT]);
	poldiff_avrule_destroy(&(*diff)->avrule_diffs[AVRULE_OFFSET_NEVERALLOW]);
	bool_destroy(&(*diff)->bool_diffs);
	cat_destroy(&(*diff)->cat_diffs);
	class_destroy(&(*diff)->class_diffs);
	common_destroy(&(*diff)->common_diffs);
	level_destroy(&(*diff)->level_diffs);
	range_trans_destroy(&(*diff)->range_trans_diffs);
	role_destroy(&(*diff)->role_diffs);
	role_allow_destroy(&(*diff)->role_allow_diffs);
	role_trans_destroy(&(*diff)->role_trans_diffs);
	user_destroy(&(*diff)->user_diffs);
	terule_destroy(&(*diff)->terule_diffs[TERULE_OFFSET_CHANGE]);
	terule_destroy(&(*diff)->terule_diffs[TERULE_OFFSET_MEMBER]);
	terule_destroy(&(*diff)->terule_diffs[TERULE_OFFSET_TRANS]);
	type_summary_destroy(&(*diff)->type_diffs);
	free(*diff);
	*diff = NULL;
}
예제 #3
0
파일: log.c 프로젝트: 0xroot/setools3
void seaudit_log_clear(seaudit_log_t * log)
{
	if (log == NULL) {
		errno = EINVAL;
		return;
	}
	apol_vector_destroy(&log->messages);
	apol_vector_destroy(&log->malformed_msgs);
	apol_bst_destroy(&log->types);
	apol_bst_destroy(&log->classes);
	apol_bst_destroy(&log->roles);
	apol_bst_destroy(&log->users);
	apol_bst_destroy(&log->perms);
	apol_bst_destroy(&log->hosts);
	apol_bst_destroy(&log->bools);
	apol_bst_destroy(&log->managers);
	apol_bst_destroy(&log->mls_lvl);
	apol_bst_destroy(&log->mls_clr);
	if ((log->messages = apol_vector_create(message_free)) == NULL ||
	    (log->malformed_msgs = apol_vector_create(free)) == NULL ||
	    (log->types = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->classes = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->roles = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->users = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->perms = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->mls_lvl = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->mls_clr = apol_bst_create(apol_str_strcmp, free)) == NULL ||
	    (log->hosts = apol_bst_create(apol_str_strcmp, free)) == NULL
	    || (log->bools = apol_bst_create(apol_str_strcmp, free)) == NULL
	    || (log->managers = apol_bst_create(apol_str_strcmp, free)) == NULL) {
		/* hopefully will never get here... */
		return;
	}
	for (size_t i = 0; i < apol_vector_get_size(log->models); i++) {
		seaudit_model_t *m = apol_vector_get_element(log->models, i);
		model_notify_log_changed(m, log);
	}
}