int main(int argc, char* argv[]) { //before u64 j,k; u8* addr = beforedawn(); //cmdline termwrite("\n@42@\n", 1); for(j=1;j<argc;j++) { k = arg2utf8(argv[j], addr); say("%.*s\n", k, addr); if(termwrite(addr, k) < 0)goto byebye; } //before mainloop: load file as ui role_create(); //mainloop loop(); //after mainloop: backup world //if(0 == dstctx)dstctx = //if(0 == storectx(dstctx))dump(); openwriteclose("universe.bin",0,addr,0x1000000); byebye: //after afterdusk(); return 0; }
poldiff_t *poldiff_create(apol_policy_t * orig_policy, apol_policy_t * mod_policy, poldiff_handle_fn_t fn, void *callback_arg) { poldiff_t *diff = NULL; int error; if (!orig_policy || !mod_policy) { ERR(NULL, "%s", strerror(EINVAL)); errno = EINVAL; return NULL; } if (!(diff = calloc(1, sizeof(poldiff_t)))) { ERR(NULL, "%s", strerror(ENOMEM)); errno = ENOMEM; return NULL; } diff->orig_pol = orig_policy; diff->mod_pol = mod_policy; diff->orig_qpol = apol_policy_get_qpol(diff->orig_pol); diff->mod_qpol = apol_policy_get_qpol(diff->mod_pol); diff->fn = fn; diff->handle_arg = callback_arg; if ((diff->type_map = type_map_create()) == NULL) { ERR(diff, "%s", strerror(ENOMEM)); poldiff_destroy(&diff); errno = ENOMEM; return NULL; } if (type_map_infer(diff) < 0) { error = errno; poldiff_destroy(&diff); errno = error; return NULL; } if ((diff->attrib_diffs = attrib_summary_create()) == NULL || (diff->avrule_diffs[AVRULE_OFFSET_ALLOW] = avrule_create()) == NULL || (diff->avrule_diffs[AVRULE_OFFSET_AUDITALLOW] = avrule_create()) == NULL || (diff->avrule_diffs[AVRULE_OFFSET_DONTAUDIT] = avrule_create()) == NULL || (diff->avrule_diffs[AVRULE_OFFSET_NEVERALLOW] = avrule_create()) == NULL || (diff->bool_diffs = bool_create()) == NULL || (diff->cat_diffs = cat_create()) == NULL || (diff->class_diffs = class_create()) == NULL || (diff->common_diffs = common_create()) == NULL || (diff->level_diffs = level_create()) == NULL || (diff->range_trans_diffs = range_trans_create()) == NULL || (diff->role_diffs = role_create()) == NULL || (diff->role_allow_diffs = role_allow_create()) == NULL || (diff->role_trans_diffs = role_trans_create()) == NULL || (diff->terule_diffs[TERULE_OFFSET_CHANGE] = terule_create()) == NULL || (diff->terule_diffs[TERULE_OFFSET_MEMBER] = terule_create()) == NULL || (diff->terule_diffs[TERULE_OFFSET_TRANS] = terule_create()) == NULL || (diff->type_diffs = type_summary_create()) == NULL || (diff->user_diffs = user_create()) == NULL) { ERR(diff, "%s", strerror(ENOMEM)); poldiff_destroy(&diff); errno = ENOMEM; return NULL; } diff->policy_opts = QPOL_POLICY_OPTION_NO_RULES | QPOL_POLICY_OPTION_NO_NEVERALLOWS; return diff; }