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; }
void sechk_lib_destroy(sechk_lib_t ** lib) { if (lib == NULL || *lib == NULL) return; apol_vector_destroy(&((*lib)->modules)); apol_policy_destroy(&((*lib)->policy)); apol_vector_destroy(&((*lib)->fc_entries)); free((*lib)->fc_path); sefs_fclist_destroy(&((*lib)->fc_file)); free((*lib)->selinux_config_path); apol_policy_path_destroy(&((*lib)->policy_path)); free(*lib); *lib = NULL; }
int sechk_lib_load_policy(apol_policy_path_t * policy_mods, sechk_lib_t * lib) { char *default_policy_path = NULL; int retv = -1; if (!lib) return -1; /* if no policy is given, attempt to find default */ if (!policy_mods) { retv = qpol_default_policy_find(&default_policy_path); if (retv < 0) { fprintf(stderr, "Default policy search failed: %s\n", strerror(errno)); return -1; } else if (retv != 0) { fprintf(stderr, "No default policy found.\n"); return -1; } policy_mods = apol_policy_path_create(APOL_POLICY_PATH_TYPE_MONOLITHIC, default_policy_path, NULL); lib->policy = apol_policy_create_from_policy_path(policy_mods, QPOL_POLICY_OPTION_MATCH_SYSTEM, NULL, NULL); if (lib->policy == NULL) { fprintf(stderr, "Error: failed opening default policy\n"); return -1; } lib->policy_path = policy_mods; if (!(lib->outputformat & SECHK_OUT_QUIET)) { fprintf(stderr, "Using policy: %s\n", apol_policy_path_get_primary(lib->policy_path)); } } else { lib->policy_path = policy_mods; lib->policy = apol_policy_create_from_policy_path(policy_mods, 0, NULL, NULL); if (lib->policy == NULL) { fprintf(stderr, "Error: failed opening policy %s\n", apol_policy_path_to_string(lib->policy_path)); goto err; } } return 0; err: apol_policy_destroy(&lib->policy); return -1; }
int terule_cleanup() { apol_policy_destroy(&bp); apol_policy_destroy(&sp); return 0; }