void TestExpandPromise(const ReportContext *report_context) { Promise pp = { 0 }, *pcopy; printf("%d. Testing promise duplication and expansion\n", ++NR); pp.promiser = "the originator"; pp.promisee = (Rval) { "the recipient", CF_SCALAR }; pp.classes = "upper classes"; pp.offset.line = 12; pp.audit = NULL; pp.conlist = NULL; pp.bundletype = "bundle_type"; pp.bundle = "test_bundle"; pp.ref = "commentary"; pp.agentsubtype = NULL; pp.done = false; pp.next = NULL; pp.cache = NULL; pp.inode_cache = NULL; pp.this_server = NULL; pp.donep = &(pp.done); pp.conn = NULL; ConstraintAppendToPromise(&pp, "lval1", (Rval) { xstrdup("rval1"), CF_SCALAR }, "lower classes1", false); ConstraintAppendToPromise(&pp, "lval2", (Rval) { xstrdup("rval2"), CF_SCALAR }, "lower classes2", false); //getuid ConstraintAppendToPromise(&pp,"lval2",,CF_SCALAR,"lower classes2"); /* Now copy promise and delete */ pcopy = DeRefCopyPromise("diagnostic-scope", &pp); if (VERBOSE || DEBUG) { printf("-----------------------------------------------------------\n"); printf("Raw test promises\n\n"); ShowPromise(report_context, REPORT_OUTPUT_TYPE_TEXT, &pp, 4); ShowPromise(report_context, REPORT_OUTPUT_TYPE_HTML, &pp, 4); ShowPromise(report_context, REPORT_OUTPUT_TYPE_TEXT, pcopy, 6); ShowPromise(report_context, REPORT_OUTPUT_TYPE_HTML, pcopy, 6); } DeletePromise(pcopy); }
PromiseResult CommonEvalPromise(EvalContext *ctx, const Promise *pp, ARG_UNUSED void *param) { assert(param == NULL); if (SHOWREPORTS) { ShowPromise(pp); } PromiseRecheckAllConstraints(ctx, pp); return PROMISE_RESULT_NOOP; }
void ShowPromisesInReport(Bundle *bundles, Body *bodies) { Rval retval; char *v; char vbuff[CF_BUFSIZE]; Bundle *bp; Rlist *rp; SubType *sp; Promise *pp; Body *bdp; if (GetVariable("control_common", "version", &retval) != cf_notype) { v = (char *) retval.item; } else { v = "not specified"; } ReportBanner("Promises"); snprintf(vbuff, CF_BUFSIZE - 1, "Cfengine Site Policy Summary (version %s)", v); CfHtmlHeader(FREPORT_HTML, vbuff, STYLESHEET, WEBDRIVER, BANNER); fprintf(FREPORT_HTML, "<p>"); for (bp = bundles; bp != NULL; bp = bp->next) { fprintf(FREPORT_HTML, "%s Bundle %s%s%s %s%s%s\n", CFH[cfx_bundle][cfb], CFH[cfx_blocktype][cfb], bp->type, CFH[cfx_blocktype][cfe], CFH[cfx_blockid][cfb], bp->name, CFH[cfx_blockid][cfe]); fprintf(FREPORT_HTML, " %s ARGS:%s\n\n", CFH[cfx_line][cfb], CFH[cfx_line][cfe]); fprintf(FREPORT_TXT, "Bundle %s in the context of %s\n\n", bp->name, bp->type); fprintf(FREPORT_TXT, " ARGS:\n\n"); for (rp = bp->args; rp != NULL; rp = rp->next) { fprintf(FREPORT_HTML, "%s", CFH[cfx_line][cfb]); fprintf(FREPORT_HTML, " scalar arg %s%s%s\n", CFH[cfx_args][cfb], (char *) rp->item, CFH[cfx_args][cfe]); fprintf(FREPORT_HTML, "%s", CFH[cfx_line][cfe]); fprintf(FREPORT_TXT, " scalar arg %s\n\n", (char *) rp->item); } fprintf(FREPORT_TXT, " {\n"); fprintf(FREPORT_HTML, "%s", CFH[cfx_promise][cfb]); for (sp = bp->subtypes; sp != NULL; sp = sp->next) { fprintf(FREPORT_HTML, "%s", CFH[cfx_line][cfb]); fprintf(FREPORT_HTML, "%s", CFH[cfx_line][cfe]); fprintf(FREPORT_TXT, " TYPE: %s\n\n", sp->name); for (pp = sp->promiselist; pp != NULL; pp = pp->next) { ShowPromise(pp, 6); } } fprintf(FREPORT_TXT, " }\n"); fprintf(FREPORT_TXT, "\n\n"); fprintf(FREPORT_HTML, "%s\n", CFH[cfx_promise][cfe]); fprintf(FREPORT_HTML, "%s\n", CFH[cfx_line][cfe]); fprintf(FREPORT_HTML, "%s\n", CFH[cfx_bundle][cfe]); } /* Now summarize the remaining bodies */ fprintf(FREPORT_HTML, "<h1>All Bodies</h1>"); fprintf(FREPORT_TXT, "\n\nAll Bodies\n\n"); for (bdp = bodies; bdp != NULL; bdp = bdp->next) { fprintf(FREPORT_HTML, "%s%s\n", CFH[cfx_line][cfb], CFH[cfx_block][cfb]); fprintf(FREPORT_HTML, "%s\n", CFH[cfx_promise][cfb]); ShowBody(bdp, 3); fprintf(FREPORT_TXT, "\n"); fprintf(FREPORT_HTML, "%s\n", CFH[cfx_promise][cfe]); fprintf(FREPORT_HTML, "%s%s \n ", CFH[cfx_block][cfe], CFH[cfx_line][cfe]); fprintf(FREPORT_HTML, "</p>"); } CfHtmlFooter(FREPORT_HTML, FOOTER); }