static void KeepServerPromise(Promise *pp) { char *sp = NULL; if (!IsDefinedClass(pp->classes)) { CfOut(cf_verbose, "", "Skipping whole promise, as context is %s\n", pp->classes); return; } if (VarClassExcluded(pp, &sp)) { CfOut(cf_verbose, "", "\n"); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); CfOut(cf_verbose, "", "Skipping whole next promise (%s), as var-context %s is not relevant\n", pp->promiser, sp); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); return; } if (strcmp(pp->agentsubtype, "classes") == 0) { KeepClassContextPromise(pp); return; } sp = (char *) GetConstraintValue("resource_type", pp, CF_SCALAR); if (strcmp(pp->agentsubtype, "access") == 0 && sp && strcmp(sp, "literal") == 0) { KeepLiteralAccessPromise(pp, "literal"); return; } if (strcmp(pp->agentsubtype, "access") == 0 && sp && strcmp(sp, "query") == 0) { KeepQueryAccessPromise(pp, "query"); return; } if (strcmp(pp->agentsubtype, "access") == 0 && sp && strcmp(sp, "context") == 0) { KeepLiteralAccessPromise(pp, "context"); return; } /* Default behaviour is file access */ if (strcmp(pp->agentsubtype, "access") == 0) { KeepFileAccessPromise(pp); return; } if (strcmp(pp->agentsubtype, "roles") == 0) { KeepServerRolePromise(pp); return; } }
static void KeepServerPromise(EvalContext *ctx, Promise *pp, const ReportContext *report_context) { char *sp = NULL; if (!IsDefinedClass(ctx, pp->classes, PromiseGetNamespace(pp))) { CfOut(OUTPUT_LEVEL_VERBOSE, "", "Skipping whole promise, as context is %s\n", pp->classes); return; } if (VarClassExcluded(ctx, pp, &sp)) { CfOut(OUTPUT_LEVEL_VERBOSE, "", "\n"); CfOut(OUTPUT_LEVEL_VERBOSE, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); CfOut(OUTPUT_LEVEL_VERBOSE, "", "Skipping whole next promise (%s), as var-context %s is not relevant\n", pp->promiser, sp); CfOut(OUTPUT_LEVEL_VERBOSE, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); return; } if (strcmp(pp->parent_promise_type->name, "classes") == 0) { KeepClassContextPromise(ctx, pp, report_context); return; } sp = (char *) ConstraintGetRvalValue(ctx, "resource_type", pp, RVAL_TYPE_SCALAR); if ((strcmp(pp->parent_promise_type->name, "access") == 0) && sp && (strcmp(sp, "literal") == 0)) { KeepLiteralAccessPromise(ctx, pp, "literal"); return; } if ((strcmp(pp->parent_promise_type->name, "access") == 0) && sp && (strcmp(sp, "variable") == 0)) { KeepLiteralAccessPromise(ctx, pp, "variable"); return; } if ((strcmp(pp->parent_promise_type->name, "access") == 0) && sp && (strcmp(sp, "query") == 0)) { KeepQueryAccessPromise(ctx, pp, "query"); return; } if ((strcmp(pp->parent_promise_type->name, "access") == 0) && sp && (strcmp(sp, "context") == 0)) { KeepLiteralAccessPromise(ctx, pp, "context"); return; } /* Default behaviour is file access */ if (strcmp(pp->parent_promise_type->name, "access") == 0) { KeepFileAccessPromise(ctx, pp); return; } if (strcmp(pp->parent_promise_type->name, "roles") == 0) { KeepServerRolePromise(ctx, pp); return; } }
static void KeepAgentPromise(Promise *pp, const ReportContext *report_context) { char *sp = NULL; struct timespec start = BeginMeasure(); if (!IsDefinedClass(pp->classes, pp->ns)) { CfOut(cf_verbose, "", "\n"); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); CfOut(cf_verbose, "", "Skipping whole next promise (%s), as context %s is not relevant\n", pp->promiser, pp->classes); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); return; } if (pp->done) { return; } if (VarClassExcluded(pp, &sp)) { CfOut(cf_verbose, "", "\n"); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); CfOut(cf_verbose, "", "Skipping whole next promise (%s), as var-context %s is not relevant\n", pp->promiser, sp); CfOut(cf_verbose, "", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . \n"); return; } if (MissingDependencies(pp)) { return; } // Record promises examined for efficiency calc if (strcmp("meta", pp->agentsubtype) == 0) { char ns[CF_BUFSIZE]; snprintf(ns,CF_BUFSIZE,"%s_meta",pp->bundle); NewScope(ns); ConvergeVarHashPromise(ns, pp, true); return; } if (strcmp("vars", pp->agentsubtype) == 0) { ConvergeVarHashPromise(pp->bundle, pp, true); return; } if (strcmp("defaults", pp->agentsubtype) == 0) { DefaultVarPromise(pp); return; } if (strcmp("classes", pp->agentsubtype) == 0) { KeepClassContextPromise(pp); return; } if (strcmp("outputs", pp->agentsubtype) == 0) { VerifyOutputsPromise(pp); return; } SetPromiseOutputs(pp); if (strcmp("interfaces", pp->agentsubtype) == 0) { VerifyInterfacesPromise(pp); return; } if (strcmp("processes", pp->agentsubtype) == 0) { VerifyProcessesPromise(pp); return; } if (strcmp("storage", pp->agentsubtype) == 0) { FindAndVerifyStoragePromises(pp, report_context); EndMeasurePromise(start, pp); return; } if (strcmp("packages", pp->agentsubtype) == 0) { VerifyPackagesPromise(pp); EndMeasurePromise(start, pp); return; } if (strcmp("files", pp->agentsubtype) == 0) { if (GetBooleanConstraint("background", pp)) { ParallelFindAndVerifyFilesPromises(pp, report_context); } else { FindAndVerifyFilesPromises(pp, report_context); } EndMeasurePromise(start, pp); return; } if (strcmp("commands", pp->agentsubtype) == 0) { VerifyExecPromise(pp); EndMeasurePromise(start, pp); return; } if (strcmp("databases", pp->agentsubtype) == 0) { VerifyDatabasePromises(pp); EndMeasurePromise(start, pp); return; } if (strcmp("methods", pp->agentsubtype) == 0) { VerifyMethodsPromise(pp, report_context); EndMeasurePromise(start, pp); return; } if (strcmp("services", pp->agentsubtype) == 0) { VerifyServicesPromise(pp, report_context); EndMeasurePromise(start, pp); return; } if (strcmp("guest_environments", pp->agentsubtype) == 0) { VerifyEnvironmentsPromise(pp); EndMeasurePromise(start, pp); return; } if (strcmp("reports", pp->agentsubtype) == 0) { VerifyReportPromise(pp); return; } }