int ScheduleAgentOperations(struct Bundle *bp) { struct SubType *sp; struct Promise *pp; enum typesequence type; int pass; if (PROCESSREFRESH == NULL || (PROCESSREFRESH && IsRegexItemIn(PROCESSREFRESH,bp->name))) { DeleteItemList(PROCESSTABLE); PROCESSTABLE = NULL; } for (pass = 1; pass < CF_DONEPASSES; pass++) { for (type = 0; TYPESEQUENCE[type] != NULL; type++) { ClassBanner(type); if ((sp = GetSubTypeForBundle(TYPESEQUENCE[type],bp)) == NULL) { continue; } BannerSubType(bp->name,sp->name,pass); SetScope(bp->name); if (!NewTypeContext(type)) { continue; } for (pp = sp->promiselist; pp != NULL; pp=pp->next) { SaveClassEnvironment(); ExpandPromise(cf_agent,bp->name,pp,KeepAgentPromise); if (Abort()) { NoteClassUsage(VADDCLASSES); DeleteTypeContext(type); return false; } } DeleteTypeContext(type); } } NoteClassUsage(VADDCLASSES); return true; }
int ScheduleAgentOperations(Bundle *bp, const ReportContext *report_context) // NB - this function can be called recursively through "methods" { SubType *sp; enum typesequence type; int pass; int save_pr_kept = PR_KEPT; int save_pr_repaired = PR_REPAIRED; int save_pr_notkept = PR_NOTKEPT; if (PROCESSREFRESH == NULL || (PROCESSREFRESH && IsRegexItemIn(PROCESSREFRESH, bp->name))) { DeleteItemList(PROCESSTABLE); PROCESSTABLE = NULL; } for (pass = 1; pass < CF_DONEPASSES; pass++) { for (type = 0; AGENT_TYPESEQUENCE[type] != NULL; type++) { ClassBanner(type); if ((sp = BundleGetSubType(bp, AGENT_TYPESEQUENCE[type])) == NULL) { continue; } BannerSubType(bp->name, sp->name, pass); SetScope(bp->name); if (!NewTypeContext(type)) { continue; } for (size_t ppi = 0; ppi < SeqLength(sp->promises); ppi++) { Promise *pp = SeqAt(sp->promises, ppi); if (ALLCLASSESREPORT) { SaveClassEnvironment(); } if (pass == 1) // Count the number of promises modelled for efficiency { CF_TOPICS++; } ExpandPromise(AGENT_TYPE_AGENT, bp->name, pp, KeepAgentPromise, report_context); if (Abort()) { NoteClassUsage(VADDCLASSES, false); DeleteTypeContext(bp->parent_policy, type, report_context); NoteBundleCompliance(bp, save_pr_kept, save_pr_repaired, save_pr_notkept); return false; } } DeleteTypeContext(bp->parent_policy, type, report_context); } } NoteClassUsage(VADDCLASSES, false); return NoteBundleCompliance(bp, save_pr_kept, save_pr_repaired, save_pr_notkept); }