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; }
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 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); } }