void TestExpandVariables() { Promise pp = { 0 }, *pcopy; Rlist *args, *listvars = NULL, *scalarvars = NULL; Constraint *cp; FnCall *fp; strcpy(CFWORKDIR, GetWorkDir()); MapName(CFWORKDIR); /* Still have diagnostic scope */ NewScope("control_common"); printf("%d. Testing variable expansion\n", ++NR); pp.promiser = "the originator"; pp.promisee = (Rval) {"the recipient with $(two)", CF_SCALAR}; pp.classes = "proletariat"; pp.offset.line = 12; pp.audit = NULL; pp.conlist = NULL; pp.agentsubtype = "none"; pp.bundletype = "bundle_type"; pp.bundle = "test_bundle"; pp.ref = "commentary"; pp.agentsubtype = xstrdup("files"); pp.done = false; pp.next = NULL; pp.cache = NULL; pp.inode_cache = NULL; pp.this_server = NULL; pp.donep = &(pp.done); pp.conn = NULL; args = SplitStringAsRList("$(administrator)", ','); fp = NewFnCall("getuid", args); AppendConstraint(&(pp.conlist), "lval1", (Rval) {xstrdup("@(one)"), CF_SCALAR}, "lower classes1", false); AppendConstraint(&(pp.conlist), "lval2", (Rval) {xstrdup("$(four)"), CF_SCALAR}, "upper classes1", false); AppendConstraint(&(pp.conlist), "lval3", (Rval) {fp, CF_FNCALL}, "upper classes2", false); /* Now copy promise and delete */ pcopy = DeRefCopyPromise("diagnostic", &pp); MapIteratorsFromRval("diagnostic", &scalarvars, &listvars, (Rval) {pcopy->promiser, CF_SCALAR}, NULL); if (pcopy->promisee.item != NULL) { MapIteratorsFromRval("diagnostic", &scalarvars, &listvars, pp.promisee, NULL); } for (cp = pcopy->conlist; cp != NULL; cp = cp->next) { MapIteratorsFromRval("diagnostic", &scalarvars, &listvars, cp->rval, NULL); } ExpandPromiseAndDo(cf_common, "diagnostic", pcopy, scalarvars, listvars, NULL); /* No cleanup */ }
//-------------------------------------------------------------------------- // Name SymTab_Init // // //-------------------------------------------------------------------------- void SymTab_Init ( void ) { StructDefHeap_Init(); SymbolHeap_Init(); ScopeHeap_Init(); MainScope = NewScope( FILE_SCOPE, NULL ); CurScope = MainScope; EllipsisSym = NewSymbol( NULL ); };
/**** Begin legacy API ****/ void FFeedbackContext::BeginSlowTask( const FText& Task, bool ShowProgressDialog, bool bShowCancelButton ) { ensure(IsInGameThread()); TUniquePtr<FSlowTask> NewScope(new FSlowTask(0, Task, true, *this)); if (ShowProgressDialog) { NewScope->MakeDialog(bShowCancelButton); } NewScope->Initialize(); LegacyAPIScopes.Add(MoveTemp(NewScope)); }
bool ST_Push(STStack stack, SymbolTable SymbolTable) { if(stack->stacktop == stack->stacksize - 1) return false; stack->stacktop++; //stack->sts[stack->stacktop] = SymbolTable; if(stack->stacktop == 0) stack->sts[stack->stacktop] = SymbolTable; else { SS_Push(stack->sts[0]->ss, NewScope()); stack->sts[stack->stacktop] = stack->sts[0]; stack->sts[stack->stacktop]->type = SymbolTable->type; } return true; }
void CheckFileChanges(Policy **policy, GenericAgentConfig *config, const ReportContext *report_context) { if (EnterpriseExpiry()) { CfOut(cf_error, "", "!! This enterprise license is invalid."); } CfDebug("Checking file updates on %s\n", config->input_file); if (NewPromiseProposals(config->input_file, InputFiles(*policy))) { CfOut(cf_verbose, "", " -> New promises detected...\n"); if (CheckPromises(config->input_file, report_context)) { CfOut(cf_inform, "", "Rereading config files %s..\n", config->input_file); /* Free & reload -- lock this to avoid access errors during reload */ DeleteItemList(VNEGHEAP); DeleteAlphaList(&VHEAP); InitAlphaList(&VHEAP); DeleteAlphaList(&VHARDHEAP); InitAlphaList(&VHARDHEAP); DeleteAlphaList(&VADDCLASSES); InitAlphaList(&VADDCLASSES); DeleteItemList(IPADDRESSES); IPADDRESSES = NULL; DeleteItemList(SV.trustkeylist); DeleteItemList(SV.skipverify); DeleteItemList(SV.attackerlist); DeleteItemList(SV.nonattackerlist); DeleteItemList(SV.multiconnlist); DeleteAuthList(VADMIT); DeleteAuthList(VDENY); DeleteAuthList(VARADMIT); DeleteAuthList(VARDENY); DeleteAuthList(ROLES); //DeleteRlist(VINPUTLIST); This is just a pointer, cannot free it DeleteAllScope(); strcpy(VDOMAIN, "undefined.domain"); POLICY_SERVER[0] = '\0'; VADMIT = VADMITTOP = NULL; VDENY = VDENYTOP = NULL; VARADMIT = VARADMITTOP = NULL; VARDENY = VARDENYTOP = NULL; ROLES = ROLESTOP = NULL; VNEGHEAP = NULL; SV.trustkeylist = NULL; SV.skipverify = NULL; SV.attackerlist = NULL; SV.nonattackerlist = NULL; SV.multiconnlist = NULL; PolicyDestroy(*policy); *policy = NULL; ERRORCOUNT = 0; NewScope("sys"); SetPolicyServer(POLICY_SERVER); NewScalar("sys", "policy_hub", POLICY_SERVER, DATA_TYPE_STRING); if (EnterpriseExpiry()) { CfOut(cf_error, "", "Cfengine - autonomous configuration engine. This enterprise license is invalid.\n"); } NewScope("const"); NewScope("this"); NewScope("control_server"); NewScope("control_common"); NewScope("mon"); NewScope("remote_access"); GetNameInfo3(); GetInterfacesInfo(AGENT_TYPE_SERVER); Get3Environment(); BuiltinClasses(); OSClasses(); KeepHardClasses(); HardClass(CF_AGENTTYPES[THIS_AGENT_TYPE]); SetReferenceTime(true); *policy = ReadPromises(AGENT_TYPE_SERVER, config, report_context); KeepPromises(*policy, config, report_context); Summarize(); } else { CfOut(cf_inform, "", " !! File changes contain errors -- ignoring"); PROMISETIME = time(NULL); } } else { CfDebug(" -> No new promises found\n"); } }
void ThisAgentInit(void) { NewScope("remote_access"); umask(077); }
CBioseq_Handle CSimpleOM::GetBioseqHandle(const CSeq_id_Handle& id) { return NewScope()->GetBioseqHandle(id); }
CSeqVector CSimpleOM::GetSeqVector(const CSeq_loc& loc, ENa_strand strand) { return CSeqVector(loc, *NewScope(), CBioseq_Handle::eCoding_Ncbi, strand); }
static void KeepPromiseBundles(Policy *policy, GenericAgentConfig *config, const ReportContext *report_context) { Bundle *bp; Rlist *rp, *params; FnCall *fp; char *name; Rval retval; int ok = true; if (config->bundlesequence) { CfOut(cf_inform, "", " >> Using command line specified bundlesequence"); retval = (Rval) { config->bundlesequence, RVAL_TYPE_LIST }; } else if (GetVariable("control_common", "bundlesequence", &retval) == DATA_TYPE_NONE) { // TODO: somewhat frenzied way of telling user about an error CfOut(cf_error, "", " !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); CfOut(cf_error, "", " !! No bundlesequence in the common control body"); CfOut(cf_error, "", " !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); exit(1); } // TODO: should've been checked a long time ago, remove? if (retval.type != RVAL_TYPE_LIST) { FatalError("Promised bundlesequence was not a list"); } for (rp = (Rlist *) retval.item; rp != NULL; rp = rp->next) { switch (rp->type) { case RVAL_TYPE_SCALAR: name = (char *) rp->item; params = NULL; if (strcmp(name, CF_NULL_VALUE) == 0) { continue; } break; case RVAL_TYPE_FNCALL: fp = (FnCall *) rp->item; name = (char *) fp->name; params = (Rlist *) fp->args; break; default: name = NULL; params = NULL; CfOut(cf_error, "", "Illegal item found in bundlesequence: "); ShowRval(stdout, (Rval) {rp->item, rp->type}); printf(" = %c\n", rp->type); ok = false; break; } if (!config->ignore_missing_bundles) { if (!(PolicyGetBundle(policy, NULL, "agent", name) || (PolicyGetBundle(policy, NULL, "common", name)))) { CfOut(cf_error, "", "Bundle \"%s\" listed in the bundlesequence was not found\n", name); ok = false; } } } if (!ok) { FatalError("Errors in agent bundles"); } if (VERBOSE || DEBUG) { printf("%s> -> Bundlesequence => ", VPREFIX); ShowRval(stdout, retval); printf("\n"); } /* If all is okay, go ahead and evaluate */ for (rp = (Rlist *) retval.item; rp != NULL; rp = rp->next) { switch (rp->type) { case RVAL_TYPE_FNCALL: fp = (FnCall *) rp->item; name = (char *) fp->name; params = (Rlist *) fp->args; break; default: name = (char *) rp->item; params = NULL; break; } if ((bp = PolicyGetBundle(policy, NULL, "agent", name)) || (bp = PolicyGetBundle(policy, NULL, "common", name))) { char ns[CF_BUFSIZE]; snprintf(ns,CF_BUFSIZE,"%s_meta", name); NewScope(ns); SetBundleOutputs(bp->name); AugmentScope(bp->name, bp->ns, bp->args, params); BannerBundle(bp, params); THIS_BUNDLE = bp->name; DeletePrivateClassContext(); // Each time we change bundle ScheduleAgentOperations(bp, report_context); ResetBundleOutputs(bp->name); } } }
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; } }
static void KeepKeyPromises(void) { unsigned long err; RSA *pair; FILE *fp; struct stat statbuf; int fd; static char *passphrase = "Cfengine passphrase"; const EVP_CIPHER *cipher; char vbuff[CF_BUFSIZE]; NewScope("common"); cipher = EVP_des_ede3_cbc(); if (cfstat(CFPUBKEYFILE, &statbuf) != -1) { CfOut(cf_cmdout, "", "A key file already exists at %s\n", CFPUBKEYFILE); return; } if (cfstat(CFPRIVKEYFILE, &statbuf) != -1) { CfOut(cf_cmdout, "", "A key file already exists at %s\n", CFPRIVKEYFILE); return; } printf("Making a key pair for cfengine, please wait, this could take a minute...\n"); pair = RSA_generate_key(2048, 35, NULL, NULL); if (pair == NULL) { err = ERR_get_error(); CfOut(cf_error, "", "Unable to generate key: %s\n", ERR_reason_error_string(err)); return; } if (DEBUG) { RSA_print_fp(stdout, pair, 0); } fd = open(CFPRIVKEYFILE, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd < 0) { CfOut(cf_error, "open", "Open %s failed: %s.", CFPRIVKEYFILE, strerror(errno)); return; } if ((fp = fdopen(fd, "w")) == NULL) { CfOut(cf_error, "fdopen", "Couldn't open private key %s.", CFPRIVKEYFILE); close(fd); return; } CfOut(cf_verbose, "", "Writing private key to %s\n", CFPRIVKEYFILE); if (!PEM_write_RSAPrivateKey(fp, pair, cipher, passphrase, strlen(passphrase), NULL, NULL)) { err = ERR_get_error(); CfOut(cf_error, "", "Couldn't write private key: %s\n", ERR_reason_error_string(err)); return; } fclose(fp); fd = open(CFPUBKEYFILE, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (fd < 0) { CfOut(cf_error, "open", "Unable to open public key %s.", CFPUBKEYFILE); return; } if ((fp = fdopen(fd, "w")) == NULL) { CfOut(cf_error, "fdopen", "Open %s failed.", CFPUBKEYFILE); close(fd); return; } CfOut(cf_verbose, "", "Writing public key to %s\n", CFPUBKEYFILE); if (!PEM_write_RSAPublicKey(fp, pair)) { err = ERR_get_error(); CfOut(cf_error, "", "Unable to write public key: %s\n", ERR_reason_error_string(err)); return; } fclose(fp); snprintf(vbuff, CF_BUFSIZE, "%s/randseed", CFWORKDIR); RAND_write_file(vbuff); cf_chmod(vbuff, 0644); }
void GenericInitialize(int argc,char **argv,char *agents) { enum cfagenttype ag = Agent2Type(agents); char vbuff[CF_BUFSIZE]; int ok = false; #ifdef HAVE_NOVA CF_DEFAULT_DIGEST = cf_sha256; CF_DEFAULT_DIGEST_LEN = CF_SHA256_LEN; #else CF_DEFAULT_DIGEST = cf_md5; CF_DEFAULT_DIGEST_LEN = CF_MD5_LEN; #endif InitializeGA(argc,argv); SetReferenceTime(true); SetStartTime(false); SetSignals(); SanitizeEnvironment(); strcpy(THIS_AGENT,CF_AGENTTYPES[ag]); NewClass(THIS_AGENT); THIS_AGENT_TYPE = ag; // need scope sys to set vars in expiry function SetNewScope("sys"); if (EnterpriseExpiry()) { CfOut(cf_error,"","Cfengine - autonomous configuration engine. This enterprise license is invalid.\n"); exit(1); } if (AM_NOVA) { CfOut(cf_verbose,""," -> This is CFE Nova\n"); } if (AM_CONSTELLATION) { CfOut(cf_verbose,""," -> This is CFE Constellation\n"); } NewScope("const"); NewScope("match"); NewScope("mon"); GetNameInfo3(); CfGetInterfaceInfo(ag); if (ag != cf_know) { Get3Environment(); BuiltinClasses(); OSClasses(); } LoadPersistentContext(); LoadSystemConstants(); snprintf(vbuff,CF_BUFSIZE,"control_%s",THIS_AGENT); SetNewScope(vbuff); NewScope("this"); NewScope("match"); if (BOOTSTRAP) { CheckAutoBootstrap(); } else { if (strlen(POLICY_SERVER) > 0) { CfOut(cf_verbose,""," -> Found a policy server (hub) on %s",POLICY_SERVER); } else { CfOut(cf_verbose,""," -> No policy server (hub) watch yet registered"); } } SetPolicyServer(POLICY_SERVER); if (ag != cf_keygen) { if (!MissingInputFile()) { bool check_promises = false; if (SHOWREPORTS) { check_promises = true; CfOut(cf_verbose, "", " -> Reports mode is enabled, force-validating policy"); } if (IsFileOutsideDefaultRepository(VINPUTFILE)) { check_promises = true; CfOut(cf_verbose, "", " -> Input file is outside default repository, validating it"); } if (NewPromiseProposals()) { check_promises = true; CfOut(cf_verbose, "", " -> Input file is changed since last validation, validating it"); } if (check_promises) { ok = CheckPromises(ag); if (BOOTSTRAP && !ok) { CfOut(cf_verbose, "", " -> Policy is not valid, but proceeding with bootstrap"); ok = true; } } else { CfOut(cf_verbose, "", " -> Policy is already validated"); ok = true; } } if (ok) { ReadPromises(ag,agents); } else { CfOut(cf_error,"","cf-agent was not able to get confirmation of promises from cf-promises, so going to failsafe\n"); snprintf(VINPUTFILE,CF_BUFSIZE-1,"failsafe.cf"); ReadPromises(ag,agents); } if (SHOWREPORTS) { CompilationReport(VINPUTFILE); } CheckLicenses(); } XML = 0; }
void SetNewScope(char *id) { NewScope(id); SetScope(id); }
static bool ScheduleRun(Policy **policy, ExecConfig *exec_config, const ReportContext *report_context) { Item *ip; CfOut(cf_verbose, "", "Sleeping...\n"); sleep(CFPULSETIME); /* 1 Minute resolution is enough */ // recheck license (in case of license updates or expiry) if (EnterpriseExpiry()) { CfOut(cf_error, "", "Cfengine - autonomous configuration engine. This enterprise license is invalid.\n"); exit(1); } /* * FIXME: this logic duplicates the one from cf-serverd.c. Unify ASAP. */ if (CheckNewPromises(report_context) == RELOAD_FULL) { /* Full reload */ CfOut(cf_inform, "", "Re-reading promise file %s..\n", VINPUTFILE); DeleteAlphaList(&VHEAP); InitAlphaList(&VHEAP); DeleteAlphaList(&VHARDHEAP); InitAlphaList(&VHARDHEAP); DeleteAlphaList(&VADDCLASSES); InitAlphaList(&VADDCLASSES); DeleteItemList(IPADDRESSES); IPADDRESSES = NULL; DeleteItemList(VNEGHEAP); DeleteAllScope(); strcpy(VDOMAIN, "undefinded.domain"); POLICY_SERVER[0] = '\0'; VNEGHEAP = NULL; VINPUTLIST = NULL; PolicyDestroy(*policy); *policy = NULL; ERRORCOUNT = 0; NewScope("sys"); SetPolicyServer(POLICY_SERVER); NewScalar("sys", "policy_hub", POLICY_SERVER, cf_str); NewScope("const"); NewScope("this"); NewScope("mon"); NewScope("control_server"); NewScope("control_common"); NewScope("remote_access"); GetNameInfo3(); GetInterfacesInfo(AGENT_TYPE_EXECUTOR); Get3Environment(); BuiltinClasses(); OSClasses(); HardClass(CF_AGENTTYPES[THIS_AGENT_TYPE]); SetReferenceTime(true); GenericAgentConfig config = { .bundlesequence = NULL }; *policy = ReadPromises(AGENT_TYPE_EXECUTOR, CF_EXECC, config, report_context); KeepPromises(*policy, exec_config); }
int VerifyMethod(char *attrname, Attributes a, Promise *pp) { Bundle *bp; void *vp; FnCall *fp; char method_name[CF_EXPANDSIZE]; Rlist *params = NULL; int retval = false; CfLock thislock; char lockname[CF_BUFSIZE]; if (a.havebundle) { if ((vp = GetConstraintValue(attrname, pp, CF_FNCALL))) { fp = (FnCall *) vp; ExpandScalar(fp->name, method_name); params = fp->args; } else if ((vp = GetConstraintValue(attrname, pp, CF_SCALAR))) { ExpandScalar((char *) vp, method_name); params = NULL; } else { return false; } } GetLockName(lockname, "method", pp->promiser, params); thislock = AcquireLock(lockname, VUQNAME, CFSTARTTIME, a, pp, false); if (thislock.lock == NULL) { return false; } PromiseBanner(pp); if ((bp = GetBundle(method_name, "agent"))) { char *bp_stack = THIS_BUNDLE; BannerSubBundle(bp, params); DeleteScope(bp->name); NewScope(bp->name); HashVariables(bp->name); AugmentScope(bp->name, bp->args, params); THIS_BUNDLE = bp->name; PushPrivateClassContext(); retval = ScheduleAgentOperations(bp); PopPrivateClassContext(); THIS_BUNDLE = bp_stack; if (retval) { cfPS(cf_verbose, CF_NOP, "", pp, a, " -> Method invoked successfully\n"); } else { cfPS(cf_inform, CF_FAIL, "", pp, a, " !! Method could not be invoked successfully\n"); } DeleteFromScope(bp->name, bp->args); } else { if (IsCf3VarString(method_name)) { CfOut(cf_error, "", " !! A variable seems to have been used for the name of the method. In this case, the promiser also needs to contain the uique name of the method"); } if (bp && bp->name) { cfPS(cf_error, CF_FAIL, "", pp, a, " !! Method \"%s\" was used but was not defined!\n", bp->name); } else { cfPS(cf_error, CF_FAIL, "", pp, a, " !! A method attempted to use a bundle \"%s\" that was apparently not defined!\n", method_name); } } YieldCurrentLock(thislock); return retval; }
void TexinfoManual(const char *source_dir, const char *output_file) { char filename[CF_BUFSIZE]; const SubTypeSyntax *st; Item *done = NULL; FILE *fout; int i; if ((fout = fopen(output_file, "w")) == NULL) { CfOut(OUTPUT_LEVEL_ERROR, "fopen", "Unable to open %s for writing\n", filename); return; } TexinfoHeader(fout); /* General background */ fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@c * CHAPTER \n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@node Getting started\n@chapter CFEngine %s -- Getting started\n\n", Version()); IncludeManualFile(source_dir, fout, "reference_basics.texinfo"); /* Control promises */ fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@c * CHAPTER \n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@node Control Promises\n@chapter Control promises\n\n"); IncludeManualFile(source_dir, fout, "reference_control_intro.texinfo"); fprintf(fout, "@menu\n"); for (i = 0; CF_ALL_BODIES[i].bundle_type != NULL; ++i) { fprintf(fout, "* control %s::\n", CF_ALL_BODIES[i].bundle_type); } fprintf(fout, "@end menu\n"); for (i = 0; CF_ALL_BODIES[i].bundle_type != NULL; i++) { fprintf(fout, "@node control %s\n@section @code{%s} control promises\n\n", CF_ALL_BODIES[i].bundle_type, CF_ALL_BODIES[i].bundle_type); snprintf(filename, CF_BUFSIZE - 1, "control/%s_example.texinfo", CF_ALL_BODIES[i].bundle_type); IncludeManualFile(source_dir, fout, filename); snprintf(filename, CF_BUFSIZE - 1, "control/%s_notes.texinfo", CF_ALL_BODIES[i].bundle_type); IncludeManualFile(source_dir, fout, filename); TexinfoBodyParts(source_dir, fout, CF_ALL_BODIES[i].bs, CF_ALL_BODIES[i].bundle_type); } /* Components */ for (i = 0; i < CF3_MODULES; i++) { st = (CF_ALL_SUBTYPES[i]); if ((st == CF_COMMON_SUBTYPES) || (st == CF_EXEC_SUBTYPES) || (st == CF_REMACCESS_SUBTYPES) || (st == CF_KNOWLEDGE_SUBTYPES) || (st == CF_MEASUREMENT_SUBTYPES)) { CfOut(OUTPUT_LEVEL_VERBOSE, "", "Dealing with chapter / bundle type %s\n", st->bundle_type); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@c * CHAPTER \n"); fprintf(fout, "@c *****************************************************\n"); if (strcmp(st->bundle_type, "*") == 0) { fprintf(fout, "@node Bundles for common\n@chapter Bundles of @code{common}\n\n"); } else { fprintf(fout, "@node Bundles for %s\n@chapter Bundles of @code{%s}\n\n", st->bundle_type, st->bundle_type); } } if (!IsItemIn(done, st->bundle_type)) /* Avoid multiple reading if several modules */ { char bundle_filename[CF_BUFSIZE]; if (strcmp(st->bundle_type, "*") == 0) { strcpy(bundle_filename, "common"); } else { strlcpy(bundle_filename, st->bundle_type, CF_BUFSIZE); } PrependItem(&done, st->bundle_type, NULL); snprintf(filename, CF_BUFSIZE - 1, "bundletypes/%s_example.texinfo", bundle_filename); IncludeManualFile(source_dir, fout, filename); snprintf(filename, CF_BUFSIZE - 1, "bundletypes/%s_notes.texinfo", bundle_filename); IncludeManualFile(source_dir, fout, filename); fprintf(fout, "@menu\n"); for (int k = 0; k < CF3_MODULES; ++k) { for (int j = 0; CF_ALL_SUBTYPES[k][j].bundle_type != NULL; ++j) { const char *constraint_type_name; if (strcmp(CF_ALL_SUBTYPES[k][j].subtype, "*") == 0) { constraint_type_name = "Miscellaneous"; } else { constraint_type_name = CF_ALL_SUBTYPES[k][j].subtype; } const char *bundle_type_name; if (strcmp(CF_ALL_SUBTYPES[k][j].bundle_type, "*") == 0) { bundle_type_name = "common"; } else { bundle_type_name = CF_ALL_SUBTYPES[k][j].bundle_type; } fprintf(fout, "* %s in %s promises: %s in %s promises\n", CF_ALL_SUBTYPES[k][j].subtype, bundle_type_name, constraint_type_name, bundle_type_name); } } fprintf(fout, "@end menu\n"); } TexinfoPromiseTypesFor(source_dir, fout, st); } /* Special functions */ CfOut(OUTPUT_LEVEL_VERBOSE, "", "Dealing with chapter / bundle type - special functions\n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@c * CHAPTER \n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@node Special functions\n@chapter Special functions\n\n"); fprintf(fout, "@menu\n"); fprintf(fout, "* Introduction to functions::\n"); for (i = 0; CF_FNCALL_TYPES[i].name != NULL; ++i) { fprintf(fout, "* Function %s::\n", CF_FNCALL_TYPES[i].name); } fprintf(fout, "@end menu\n"); fprintf(fout, "@node Introduction to functions\n@section Introduction to functions\n\n"); IncludeManualFile(source_dir, fout, "functions_intro.texinfo"); for (i = 0; CF_FNCALL_TYPES[i].name != NULL; i++) { fprintf(fout, "@node Function %s\n@section Function %s \n\n", CF_FNCALL_TYPES[i].name, CF_FNCALL_TYPES[i].name); TexinfoSpecialFunction(source_dir, fout, CF_FNCALL_TYPES[i]); } /* Special variables */ CfOut(OUTPUT_LEVEL_VERBOSE, "", "Dealing with chapter / bundle type - special variables\n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@c * CHAPTER \n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@node Special Variables\n@chapter Special Variables\n\n"); static const char *scopes[] = { "const", "edit", "match", "mon", "sys", "this", NULL, }; fprintf(fout, "@menu\n"); for (const char **s = scopes; *s != NULL; ++s) { fprintf(fout, "* Variable context %s::\n", *s); } fprintf(fout, "@end menu\n"); // scopes const and sys NewScope("edit"); NewScalar("edit", "filename", "x", DATA_TYPE_STRING); NewScope("match"); NewScalar("match", "0", "x", DATA_TYPE_STRING); for (const char **s = scopes; *s != NULL; ++s) { TexinfoVariables(source_dir, fout, (char *) *s); } // Log files CfOut(OUTPUT_LEVEL_VERBOSE, "", "Dealing with chapter / bundle type - Logs and records\n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@c * CHAPTER \n"); fprintf(fout, "@c *****************************************************\n"); fprintf(fout, "@node Logs and records\n@chapter Logs and records\n\n"); IncludeManualFile(source_dir, fout, "reference_logs.texinfo"); TexinfoFooter(fout); fclose(fout); }
static bool ScheduleRun(Policy **policy, GenericAgentConfig *config, ExecConfig *exec_config, const ReportContext *report_context) { Item *ip; CfOut(OUTPUT_LEVEL_VERBOSE, "", "Sleeping...\n"); sleep(CFPULSETIME); /* 1 Minute resolution is enough */ // recheck license (in case of license updates or expiry) if (EnterpriseExpiry()) { CfOut(OUTPUT_LEVEL_ERROR, "", "Cfengine - autonomous configuration engine. This enterprise license is invalid.\n"); exit(1); } /* * FIXME: this logic duplicates the one from cf-serverd.c. Unify ASAP. */ if (CheckNewPromises(config->input_file, InputFiles(*policy), report_context) == RELOAD_FULL) { /* Full reload */ CfOut(OUTPUT_LEVEL_INFORM, "", "Re-reading promise file %s..\n", config->input_file); DeleteAlphaList(&VHEAP); InitAlphaList(&VHEAP); DeleteAlphaList(&VHARDHEAP); InitAlphaList(&VHARDHEAP); DeleteAlphaList(&VADDCLASSES); InitAlphaList(&VADDCLASSES); DeleteItemList(IPADDRESSES); IPADDRESSES = NULL; DeleteItemList(VNEGHEAP); DeleteAllScope(); strcpy(VDOMAIN, "undefinded.domain"); POLICY_SERVER[0] = '\0'; VNEGHEAP = NULL; PolicyDestroy(*policy); *policy = NULL; ERRORCOUNT = 0; NewScope("sys"); SetPolicyServer(POLICY_SERVER); NewScalar("sys", "policy_hub", POLICY_SERVER, DATA_TYPE_STRING); NewScope("const"); NewScope("this"); NewScope("mon"); NewScope("control_server"); NewScope("control_common"); NewScope("remote_access"); GetNameInfo3(); GetInterfacesInfo(AGENT_TYPE_EXECUTOR); Get3Environment(); BuiltinClasses(); OSClasses(); HardClass(CF_AGENTTYPES[THIS_AGENT_TYPE]); SetReferenceTime(true); GenericAgentConfigSetBundleSequence(config, NULL); *policy = GenericAgentLoadPolicy(AGENT_TYPE_EXECUTOR, config, report_context); KeepPromises(*policy, exec_config); } else { /* Environment reload */ DeleteAlphaList(&VHEAP); InitAlphaList(&VHEAP); DeleteAlphaList(&VADDCLASSES); InitAlphaList(&VADDCLASSES); DeleteAlphaList(&VHARDHEAP); InitAlphaList(&VHARDHEAP); DeleteItemList(IPADDRESSES); IPADDRESSES = NULL; DeleteScope("this"); DeleteScope("mon"); DeleteScope("sys"); NewScope("this"); NewScope("mon"); NewScope("sys"); GetInterfacesInfo(AGENT_TYPE_EXECUTOR); Get3Environment(); BuiltinClasses(); OSClasses(); SetReferenceTime(true); } for (ip = SCHEDULE; ip != NULL; ip = ip->next) { CfOut(OUTPUT_LEVEL_VERBOSE, "", "Checking schedule %s...\n", ip->name); if (IsDefinedClass(ip->name, NULL)) { CfOut(OUTPUT_LEVEL_VERBOSE, "", "Waking up the agent at %s ~ %s \n", cf_ctime(&CFSTARTTIME), ip->name); return true; } } CfOut(OUTPUT_LEVEL_VERBOSE, "", "Nothing to do at %s\n", cf_ctime(&CFSTARTTIME)); return false; }
DScope DragonVariable::GetGlobalScope() { static DScope globalScope = NewScope(Scope::GetScopeSeparator()); return globalScope; }