int main() { PRINT_TEST_BANNER(); /* Don't miss the messages about GetProcessStartTime not implemented. */ LogSetGlobalLevel(LOG_LEVEL_DEBUG); THIS_PID = getpid(); THIS_STARTTIME = GetProcessStartTime(THIS_PID); printf("This parent process has PID %jd and start_time %jd\n", (intmax_t) THIS_PID, (intmax_t) THIS_STARTTIME); const UnitTest tests[] = { unit_test(test_process_start_time), unit_test(test_process_state), unit_test(test_graceful_terminate) }; int ret = run_tests(tests); /* Make sure no child is alive. */ if (SPAWNED_PID > 0) { kill(SPAWNED_PID, SIGKILL); } return ret; }
int main() { LogSetGlobalLevel(LOG_LEVEL_DEBUG); strcpy(CFWORKDIR, "data"); #if defined(__sun) VSYSTEMHARDCLASS = PLATFORM_CONTEXT_SOLARIS; VPSHARDCLASS = PLATFORM_CONTEXT_SOLARIS; #elif defined(_AIX) VSYSTEMHARDCLASS = PLATFORM_CONTEXT_AIX; VPSHARDCLASS = PLATFORM_CONTEXT_AIX; #elif defined(__linux__) VSYSTEMHARDCLASS = PLATFORM_CONTEXT_LINUX; VPSHARDCLASS = PLATFORM_CONTEXT_LINUX; #endif PRINT_TEST_BANNER(); tests_setup(); const UnitTest tests[] = { unit_test(test_processes_monitor), }; int ret = run_tests(tests); tests_teardown(); return ret; }
void HandleSignalsForAgent(int signum) { if ((signum == SIGTERM) || (signum == SIGINT)) { /* TODO don't exit from the signal handler, just set a flag. Reason is * that all the atexit() hooks we register are not reentrant. */ exit(0); } else if (signum == SIGUSR1) { LogSetGlobalLevel(LOG_LEVEL_DEBUG); } else if (signum == SIGUSR2) { LogSetGlobalLevel(LOG_LEVEL_NOTICE); } unsigned char sig = (unsigned char)signum; if (SIGNAL_PIPE[1] >= 0) { // send() is async-safe, according to POSIX. if (send(SIGNAL_PIPE[1], &sig, 1, 0) < 0) { // These signal contention. Everything else is an error. if (errno != EAGAIN #ifndef __MINGW32__ && errno != EWOULDBLOCK #endif ) { // This is not async safe, but if we get in here there's something really weird // going on. Log(LOG_LEVEL_CRIT, "Could not write to signal pipe. Unsafe to continue. (write: '%s')", GetErrorStr()); _exit(1); } } } /* Reset the signal handler */ signal(signum, HandleSignalsForAgent); }
void HandleSignalsForDaemon(int signum) { if ((signum == SIGTERM) || (signum == SIGINT) || (signum == SIGHUP) || (signum == SIGSEGV) || (signum == SIGKILL) || (signum == SIGPIPE)) { PENDING_TERMINATION = true; } else if (signum == SIGUSR1) { LogSetGlobalLevel(LOG_LEVEL_DEBUG); } else if (signum == SIGUSR2) { LogSetGlobalLevel(LOG_LEVEL_NOTICE); } unsigned char sig = (unsigned char)signum; if (SIGNAL_PIPE[1] >= 0) { // send() is async-safe, according to POSIX. if (send(SIGNAL_PIPE[1], &sig, 1, 0) < 0) { // These signal contention. Everything else is an error. if (errno != EAGAIN #ifndef __MINGW32__ && errno != EWOULDBLOCK #endif ) { // This is not async safe, but if we get in here there's something really weird // going on. Log(LOG_LEVEL_CRIT, "Could not write to signal pipe. Unsafe to continue. (write: '%s')", GetErrorStr()); _exit(1); } } } /* Reset the signal handler */ signal(signum, HandleSignalsForDaemon); }
int main() { PRINT_TEST_BANNER(); LogSetGlobalLevel(LOG_LEVEL_VERBOSE); const UnitTest tests[] = { unit_test(test_different_name), unit_test(test_wildcard_arch), unit_test(test_non_matching_arch), unit_test(test_wildcard_version), unit_test(test_eq), unit_test(test_ne), unit_test(test_gt_lt), unit_test(test_gte_lte), unit_test(wrong_separators), unit_test(uneven_lengths_1), unit_test(uneven_lengths_2), unit_test(uneven_lengths_3), unit_test(uneven_lengths_4), unit_test(uneven_lengths_5), unit_test(uneven_lengths_6), unit_test(uneven_lengths_7), unit_test(uneven_lengths_8), unit_test(uneven_lengths_9), unit_test(uneven_lengths_10), unit_test(uneven_lengths_11), unit_test(uneven_lengths_12), unit_test(uneven_lengths_13), unit_test(uneven_lengths_14), unit_test(uneven_lengths_15), unit_test(uneven_lengths_16), unit_test(uneven_lengths_17), unit_test(uneven_lengths_18), unit_test(uneven_lengths_19), unit_test(uneven_lengths_20), unit_test(invalid_01), unit_test(invalid_02), unit_test(invalid_03), unit_test(invalid_04), unit_test(invalid_05), unit_test(invalid_06), unit_test(invalid_07), unit_test(invalid_08), }; return run_tests(tests); }
static void init(void) { LogSetGlobalLevel(LOG_LEVEL_DEBUG); char *ok = mkdtemp(TEST_DIR); assert_int_not_equal(ok, NULL); /* Set blk_size */ struct stat statbuf; int ret1 = stat(TEST_DIR, &statbuf); assert_int_not_equal(ret1, -1); blk_size = ST_BLKSIZE(statbuf); Log(LOG_LEVEL_NOTICE, "Running sparse file tests with blocksize=%d TESTFILE_SIZE=%d", blk_size, TESTFILE_SIZE); Log(LOG_LEVEL_NOTICE, "Temporary directory: %s", TEST_DIR); // /tmp/files_copy_test-XXXXXX/subdir xsnprintf(TEST_SUBDIR, sizeof(TEST_SUBDIR), "%s/%s", TEST_DIR, "subdir"); // /tmp/files_copy_test-XXXXXX/testfile xsnprintf(TEST_SRC_FILE, sizeof(TEST_SRC_FILE), "%s/%s", TEST_DIR, TEST_FILENAME); // /tmp/files_copy_test-XXXXXX/subdir/testfile xsnprintf(TEST_DST_FILE, sizeof(TEST_DST_FILE), "%s/%s", TEST_SUBDIR, TEST_FILENAME); int ret2 = mkdir(TEST_SUBDIR, 0700); assert_int_equal(ret2, 0); SPARSE_SUPPORT_OK = true; if (!FsSupportsSparseFiles(TEST_DST_FILE)) { Log(LOG_LEVEL_NOTICE, "filesystem for directory '%s' doesn't seem to support sparse files!" " TEST WILL ONLY VERIFY FILE INTEGRITY!", TEST_DIR); SPARSE_SUPPORT_OK = false; } test_has_run[0] = true; success[0] = true; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int optindex = 0; int c; char ld_library_path[CF_BUFSIZE]; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_EXECUTOR); while ((c = getopt_long(argc, argv, "dvnKIf:D:N:VxL:hFOV1gMWlC::", OPTIONS, &optindex)) != EOF) { switch ((char) c) { case 'l': LEGACY_OUTPUT = true; break; case 'f': GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'K': config->ignore_locks = true; break; case 'D': config->heap_soft = StringSetFromString(optarg, ','); break; case 'N': config->heap_negated = StringSetFromString(optarg, ','); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); NO_FORK = true; // TODO: really? break; case 'n': DONTDO = true; config->ignore_locks = true; break; case 'L': snprintf(ld_library_path, CF_BUFSIZE - 1, "LD_LIBRARY_PATH=%s", optarg); putenv(xstrdup(ld_library_path)); break; case 'W': WINSERVICE = false; break; case 'F': NO_FORK = true; break; case 'O': ONCE = true; NO_FORK = true; break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-execd", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-execd", time(NULL), CF_EXECD_SHORT_DESCRIPTION, CF_EXECD_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; default: { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-execd", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; char ld_library_path[CF_BUFSIZE]; int optindex = 0; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_SERVER); while ((c = getopt_long(argc, argv, "dvIKf:D:N:VSxLFMhAlC::", OPTIONS, &optindex)) != EOF) { switch ((char) c) { case 'l': LEGACY_OUTPUT = true; break; case 'f': if (optarg && (strlen(optarg) < 5)) { Log(LOG_LEVEL_ERR, " -f used but argument '%s' incorrect", optarg); exit(EXIT_FAILURE); } GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); NO_FORK = true; case 'K': config->ignore_locks = true; break; case 'D': config->heap_soft = StringSetFromString(optarg, ','); break; case 'N': config->heap_negated = StringSetFromString(optarg, ','); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); NO_FORK = true; break; case 'F': NO_FORK = true; break; case 'L': Log(LOG_LEVEL_VERBOSE, "Setting LD_LIBRARY_PATH to '%s'", optarg); snprintf(ld_library_path, CF_BUFSIZE - 1, "LD_LIBRARY_PATH=%s", optarg); putenv(ld_library_path); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-serverd", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-serverd", time(NULL), CF_SERVERD_SHORT_DESCRIPTION, CF_SERVERD_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(EXIT_SUCCESS); case 'A': #ifdef HAVE_AVAHI_CLIENT_CLIENT_H #ifdef HAVE_AVAHI_COMMON_ADDRESS_H Log(LOG_LEVEL_NOTICE, "Generating Avahi configuration file."); if (GenerateAvahiConfig("/etc/avahi/services/cfengine-hub.service") != 0) { exit(EXIT_FAILURE); } cf_popen("/etc/init.d/avahi-daemon restart", "r", true); Log(LOG_LEVEL_NOTICE, "Avahi configuration file generated successfuly."); exit(EXIT_SUCCESS); #endif #endif Log(LOG_LEVEL_ERR, "Generating avahi configuration can only be done when avahi-daemon and libavahi are installed on the machine."); exit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; default: { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-serverd", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_COMMON, GetTTYInteractive()); config->tag_release_dir = NULL; while ((c = getopt_long(argc, argv, "dvnIw:f:D:N:VSrxMb:i:p:s:cg:hW:C::T:l", OPTIONS, NULL)) != -1) { switch (c) { case OPT_EVAL_FUNCTIONS: if (!optarg) { optarg = "yes"; } config->agent_specific.common.eval_functions = strcmp("yes", optarg) == 0; break; case OPT_SHOW_CLASSES: config->agent_specific.common.show_classes = true; break; case OPT_SHOW_VARS: config->agent_specific.common.show_variables = true; break; case 'w': Log(LOG_LEVEL_INFO, "Setting workdir to '%s'", optarg); putenv(StringConcatenate(2, "CFENGINE_TEST_OVERRIDE_WORKDIR=", optarg)); break; case 'c': config->check_runnable = true; break; case 'f': GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'b': if (optarg) { Rlist *bundlesequence = RlistFromSplitString(optarg, ','); GenericAgentConfigSetBundleSequence(config, bundlesequence); RlistDestroy(bundlesequence); } break; case 'p': if (strcmp("none", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_NONE; } else if (strcmp("cf", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_CF; } else if (strcmp("json", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_JSON; } else if (strcmp("cf-full", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_CF_FULL; } else if (strcmp("json-full", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_JSON_FULL; } else { Log(LOG_LEVEL_ERR, "Invalid policy output format: '%s'. Possible values are 'none', 'cf', 'json', 'cf-full', 'json-full'", optarg); exit(EXIT_FAILURE); } break; case 's': if (strcmp("none", optarg) == 0) { break; } else if (strcmp("json", optarg) == 0) { JsonElement *json_syntax = SyntaxToJson(); Writer *out = FileWriter(stdout); JsonWrite(out, json_syntax, 0); FileWriterDetach(out); JsonDestroy(json_syntax); exit(EXIT_SUCCESS); } else { Log(LOG_LEVEL_ERR, "Invalid syntax description output format: '%s'. Possible values are 'none', 'json'", optarg); exit(EXIT_FAILURE); } break; case 'K': config->ignore_locks = true; break; case 'D': { StringSet *defined_classes = StringSetFromString(optarg, ','); if (! config->heap_soft) { config->heap_soft = defined_classes; } else { StringSetJoin(config->heap_soft, defined_classes); free(defined_classes); } } break; case 'N': { StringSet *negated_classes = StringSetFromString(optarg, ','); if (! config->heap_negated) { config->heap_negated = negated_classes; } else { StringSetJoin(config->heap_negated, negated_classes); free(negated_classes); } } break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'n': DONTDO = true; config->ignore_locks = true; break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-promises", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-promises", time(NULL), CF_PROMISES_SHORT_DESCRIPTION, CF_PROMISES_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'r': Log(LOG_LEVEL_ERR, "Option '-r' has been deprecated"); exit(EXIT_FAILURE); break; case 'W': if (!GenericAgentConfigParseWarningOptions(config, optarg)) { Log(LOG_LEVEL_ERR, "Error parsing warning option"); exit(EXIT_FAILURE); } break; case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; case 'T': GenericAgentConfigSetInputFile(config, optarg, "promises.cf"); MINUSF = true; config->tag_release_dir = xstrdup(optarg); break; case 'l': LoggingEnableTimestamps(true); break; default: { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-promises", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_SERVER, GetTTYInteractive()); while ((c = getopt_long(argc, argv, "dvIKf:D:N:VSxLFMhAC::l", OPTIONS, NULL)) != -1) { switch (c) { case 'f': GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); NO_FORK = true; break; case 'K': config->ignore_locks = true; break; case 'D': { StringSet *defined_classes = StringSetFromString(optarg, ','); if (! config->heap_soft) { config->heap_soft = defined_classes; } else { StringSetJoin(config->heap_soft, defined_classes); free(defined_classes); } } break; case 'N': { StringSet *negated_classes = StringSetFromString(optarg, ','); if (! config->heap_negated) { config->heap_negated = negated_classes; } else { StringSetJoin(config->heap_negated, negated_classes); free(negated_classes); } } break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); NO_FORK = true; break; case 'F': NO_FORK = true; break; case 'L': { static char ld_library_path[CF_BUFSIZE]; /* GLOBAL_A */ Log(LOG_LEVEL_VERBOSE, "Setting LD_LIBRARY_PATH to '%s'", optarg); snprintf(ld_library_path, CF_BUFSIZE - 1, "LD_LIBRARY_PATH=%s", optarg); putenv(ld_library_path); break; } case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-serverd", OPTIONS, HINTS, true, NULL); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-serverd", time(NULL), CF_SERVERD_SHORT_DESCRIPTION, CF_SERVERD_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(EXIT_SUCCESS); case 'A': #ifdef SUPPORT_AVAHI_CONFIG Log(LOG_LEVEL_NOTICE, "Generating Avahi configuration file."); if (GenerateAvahiConfig("/etc/avahi/services/cfengine-hub.service") != 0) { exit(EXIT_FAILURE); } cf_popen("/etc/init.d/avahi-daemon restart", "r", true); Log(LOG_LEVEL_NOTICE, "Avahi configuration file generated successfully."); #else Log(LOG_LEVEL_ERR, "Generating avahi configuration can only be done when avahi-daemon and libavahi are installed on the machine."); #endif exit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; case 'l': LoggingEnableTimestamps(true); break; default: { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-serverd", OPTIONS, HINTS, true, NULL); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_MONITOR, GetTTYInteractive()); while ((c = getopt_long(argc, argv, "dvnIf:g:VSxHTKMFhC::l", OPTIONS, NULL)) != -1) { switch (c) { case 'f': GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); NO_FORK = true; break; case 'K': config->ignore_locks = true; break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); NO_FORK = true; break; case 'g': LogSetGlobalLevelArgOrExit(optarg); break; case 'F': NO_FORK = true; break; case 'H': /* Keep accepting this option for compatibility -- no longer used */ break; case 'T': MonNetworkSnifferEnable(true); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } DoCleanupAndExit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-monitord", OPTIONS, HINTS, true, NULL); FileWriterDetach(w); } DoCleanupAndExit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-monitord", time(NULL), CF_MONITORD_SHORT_DESCRIPTION, CF_MONITORD_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); DoCleanupAndExit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); DoCleanupAndExit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { DoCleanupAndExit(EXIT_FAILURE); } break; case 'l': LoggingEnableTimestamps(true); break; default: { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-monitord", OPTIONS, HINTS, true, NULL); FileWriterDetach(w); } DoCleanupAndExit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); DoCleanupAndExit(EXIT_FAILURE); } return config; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_RUNAGENT, GetTTYInteractive()); DEFINECLASSES[0] = '\0'; SENDCLASSES[0] = '\0'; REMOTEBUNDLES[0] = '\0'; int longopt_idx; while ((c = getopt_long(argc, argv, "t:q:db:vnKhIif:g:D:VSxo:s:MH:C::l", OPTIONS, &longopt_idx)) != -1) { switch (c) { case 'f': GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'b': BACKGROUND = true; if (optarg) { MAXCHILD = StringToLongExitOnError(optarg); } break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'K': config->ignore_locks = true; break; case 's': { size_t len = strlen(SENDCLASSES); StrCatDelim(SENDCLASSES, sizeof(SENDCLASSES), &len, optarg, ','); if (len >= sizeof(SENDCLASSES)) { Log(LOG_LEVEL_ERR, "Argument too long (-s)"); exit(EXIT_FAILURE); } break; } case 'D': { size_t len = strlen(DEFINECLASSES); StrCatDelim(DEFINECLASSES, sizeof(DEFINECLASSES), &len, optarg, ','); if (len >= sizeof(DEFINECLASSES)) { Log(LOG_LEVEL_ERR, "Argument too long (-D)"); exit(EXIT_FAILURE); } break; } case 'H': HOSTLIST = RlistFromSplitString(optarg, ','); break; case 'o': Log(LOG_LEVEL_ERR, "Option \"-o\" has been deprecated," " you can not pass arbitrary arguments to remote cf-agent"); exit(EXIT_FAILURE); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'i': INTERACTIVE = true; break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'g': LogSetGlobalLevelArgOrExit(optarg); break; case 'n': DONTDO = true; config->ignore_locks = true; break; case 't': CONNTIMEOUT = StringToLongExitOnError(optarg); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-runagent", OPTIONS, HINTS, true, NULL); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-runagent", time(NULL), CF_RUNAGENT_SHORT_DESCRIPTION, CF_RUNAGENT_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Option \"-x\" has been deprecated"); exit(EXIT_FAILURE); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; case 'l': LoggingEnableTimestamps(true); break; /* long options only */ case 0: if (strcmp(OPTIONS[longopt_idx].name, "log-modules") == 0) { bool ret = LogEnableModulesFromString(optarg); if (!ret) { exit(EXIT_FAILURE); } } else if (strcmp(OPTIONS[longopt_idx].name, "remote-bundles") == 0) { size_t len = strlen(REMOTEBUNDLES); StrCatDelim(REMOTEBUNDLES, sizeof(REMOTEBUNDLES), &len, optarg, ','); if (len >= sizeof(REMOTEBUNDLES)) { Log(LOG_LEVEL_ERR, "Argument too long (--remote-bundles)"); exit(EXIT_FAILURE); } } break; default: { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-runagent", OPTIONS, HINTS, true, NULL); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_KEYGEN, GetTTYInteractive()); while ((c = getopt_long(argc, argv, "dvIf:g:T:VMp:sr:xt:hl:C::n", OPTIONS, NULL)) != -1) { switch (c) { case 'f': KEY_PATH = optarg; break; case 'T': KEY_SIZE = StringToLongExitOnError(optarg); break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } DoCleanupAndExit(EXIT_SUCCESS); case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'g': LogSetGlobalLevelArgOrExit(optarg); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'p': /* print digest */ print_digest_arg = optarg; break; case 's': SHOWHOSTS = true; break; case 'x': FORCEREMOVAL = true; break; case 'r': REMOVEKEYS = true; remove_keys_host = optarg; break; case 'l': LICENSE_INSTALL = true; strlcpy(LICENSE_SOURCE, optarg, sizeof(LICENSE_SOURCE)); break; case 't': trust_key_arg = optarg; break; case 'h': { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-key", OPTIONS, HINTS, false, NULL); FileWriterDetach(w); } DoCleanupAndExit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-key", time(NULL), CF_KEY_SHORT_DESCRIPTION, CF_KEY_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, false); FileWriterDetach(out); DoCleanupAndExit(EXIT_SUCCESS); } case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { DoCleanupAndExit(EXIT_FAILURE); } break; case TIMESTAMP_VAL: LoggingEnableTimestamps(true); break; case 'n': LOOKUP_HOSTS = false; break; default: { Writer *w = FileWriter(stdout); WriterWriteHelp(w, "cf-key", OPTIONS, HINTS, false, NULL); FileWriterDetach(w); } DoCleanupAndExit(EXIT_FAILURE); } } return config; }
GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int optindex = 0; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_COMMON); while ((c = getopt_long(argc, argv, "dvnIf:D:N:VSrxMb:i:p:s:cg:hW:lC::", OPTIONS, &optindex)) != EOF) { switch ((char) c) { case 0: switch (optindex) { case PROMISES_OPTION_EVAL_FUNCTIONS: if (!optarg) { optarg = "yes"; } config->agent_specific.common.eval_functions = strcmp("yes", optarg) == 0; break; case PROMISES_OPTION_SHOW_CLASSES: if (!optarg) { optarg = "yes"; } config->agent_specific.common.show_classes = strcmp("yes", optarg) == 0; break; case PROMISES_OPTION_SHOW_VARIABLES: if (!optarg) { optarg = "yes"; } config->agent_specific.common.show_variables = strcmp("yes", optarg) == 0; break; default: break; } case 'l': LEGACY_OUTPUT = true; break; case 'c': config->check_runnable = true; break; case 'f': if (optarg && (strlen(optarg) < 5)) { Log(LOG_LEVEL_ERR, " -f used but argument '%s' incorrect", optarg); exit(EXIT_FAILURE); } GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'b': if (optarg) { Rlist *bundlesequence = RlistFromSplitString(optarg, ','); GenericAgentConfigSetBundleSequence(config, bundlesequence); RlistDestroy(bundlesequence); } break; case 'p': if (strcmp("none", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_NONE; } else if (strcmp("cf", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_CF; } else if (strcmp("json", optarg) == 0) { config->agent_specific.common.policy_output_format = GENERIC_AGENT_CONFIG_COMMON_POLICY_OUTPUT_FORMAT_JSON; } else { Log(LOG_LEVEL_ERR, "Invalid policy output format: '%s'. Possible values are 'none', 'cf', 'json'", optarg); exit(EXIT_FAILURE); } break; case 's': if (strcmp("none", optarg) == 0) { break; } else if (strcmp("json", optarg) == 0) { JsonElement *json_syntax = SyntaxToJson(); Writer *out = FileWriter(stdout); JsonWrite(out, json_syntax, 0); FileWriterDetach(out); JsonDestroy(json_syntax); exit(EXIT_SUCCESS); } else { Log(LOG_LEVEL_ERR, "Invalid syntax description output format: '%s'. Possible values are 'none', 'json'", optarg); exit(EXIT_FAILURE); } break; case 'K': config->ignore_locks = true; break; case 'D': config->heap_soft = StringSetFromString(optarg, ','); break; case 'N': config->heap_negated = StringSetFromString(optarg, ','); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'n': DONTDO = true; config->ignore_locks = true; break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-promises", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-promises", time(NULL), CF_PROMISES_SHORT_DESCRIPTION, CF_PROMISES_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'r': SHOWREPORTS = true; break; case 'W': if (!GenericAgentConfigParseWarningOptions(config, optarg)) { Log(LOG_LEVEL_ERR, "Error parsing warning option"); exit(EXIT_FAILURE); } break; case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; default: { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-promises", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_RUNAGENT); DEFINECLASSES[0] = '\0'; SENDCLASSES[0] = '\0'; while ((c = getopt_long(argc, argv, "t:q:db:vnKhIif:D:VSxo:s:MH:C::l", OPTIONS, NULL)) != -1) { switch (c) { case 'f': GenericAgentConfigSetInputFile(config, GetInputDir(), optarg); MINUSF = true; break; case 'b': BACKGROUND = true; if (optarg) { MAXCHILD = atoi(optarg); } break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'K': config->ignore_locks = true; break; case 's': strlcpy(SENDCLASSES, optarg, CF_MAXVARSIZE); if (strlen(optarg) > CF_MAXVARSIZE) { Log(LOG_LEVEL_ERR, "Argument too long (-s)"); exit(EXIT_FAILURE); } break; case 'D': strlcpy(DEFINECLASSES, optarg, CF_MAXVARSIZE); if (strlen(optarg) > CF_MAXVARSIZE) { Log(LOG_LEVEL_ERR, "Argument too long (-D)"); exit(EXIT_FAILURE); } break; case 'H': HOSTLIST = RlistFromSplitString(optarg, ','); break; case 'o': Log(LOG_LEVEL_ERR, "Option \"-o\" has been deprecated," " you can not pass arbitrary arguments to remote cf-agent"); exit(EXIT_FAILURE); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'i': INTERACTIVE = true; break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'n': DONTDO = true; config->ignore_locks = true; break; case 't': CONNTIMEOUT = atoi(optarg); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'h': { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-runagent", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_SUCCESS); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-runagent", time(NULL), CF_RUNAGENT_SHORT_DESCRIPTION, CF_RUNAGENT_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(EXIT_SUCCESS); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; case 'l': LoggingEnableTimestamps(true); break; default: { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-runagent", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(EXIT_FAILURE); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int optindex = 0; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_KEYGEN); while ((c = getopt_long(argc, argv, "dvf:VMp:sr:t:hl:C::", OPTIONS, &optindex)) != EOF) { switch ((char) c) { case 'f': KEY_PATH = optarg; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'V': PrintVersion(); exit(0); case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'p': /* print digest */ print_digest_arg = optarg; break; case 's': SHOWHOSTS = true; break; case 'r': REMOVEKEYS = true; remove_keys_host = optarg; break; case 'l': LICENSE_INSTALL = true; strlcpy(LICENSE_SOURCE, optarg, sizeof(LICENSE_SOURCE)); break; case 't': trust_key_arg = optarg; break; case 'h': PrintHelp("cf-key", OPTIONS, HINTS, false); exit(0); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-key", time(NULL), CF_KEY_SHORT_DESCRIPTION, CF_KEY_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, false); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; default: PrintHelp("cf-key", OPTIONS, HINTS, false); exit(1); } } return config; }
static GenericAgentConfig *CheckOpts(int argc, char **argv) { extern char *optarg; int optindex = 0; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_MONITOR); while ((c = getopt_long(argc, argv, "dvnIf:VSxHTKMFhlC::", OPTIONS, &optindex)) != EOF) { switch ((char) c) { case 'l': LEGACY_OUTPUT = true; break; case 'f': GenericAgentConfigSetInputFile(config, GetWorkDir(), optarg); MINUSF = true; break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); NO_FORK = true; break; case 'K': IGNORELOCK = true; break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); NO_FORK = true; break; case 'F': NO_FORK = true; break; case 'H': /* Keep accepting this option for compatibility -- no longer used */ break; case 'T': MonNetworkSnifferEnable(true); break; case 'V': PrintVersion(); exit(0); case 'h': PrintHelp("cf-monitord", OPTIONS, HINTS, true); exit(0); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-monitord", time(NULL), CF_MONITORD_SHORT_DESCRIPTION, CF_MONITORD_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(0); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; default: PrintHelp("cf-monitord", OPTIONS, HINTS, true); exit(1); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }
CFTestD_Config *CFTestD_CheckOpts(int argc, char **argv, long *n_threads) { extern char *optarg; int c; CFTestD_Config *config = CFTestD_ConfigInit(); assert(config != NULL); while ((c = getopt_long(argc, argv, "a:df:g:hIj:k:lp:vV", OPTIONS, NULL)) != -1) { switch (c) { case 'a': config->address = xstrdup(optarg); break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'h': CFTestD_Help(); exit(EXIT_SUCCESS); case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'g': LogSetGlobalLevelArgOrExit(optarg); break; case 'j': { int ret = StringToLong(optarg, n_threads); if (ret != 0) { Log(LOG_LEVEL_ERR, "Failed to parse number of threads/jobs from '%s'\n", optarg); *n_threads = 1; } break; } case 'k': config->key_file = xstrdup(optarg); break; case 'l': LoggingEnableTimestamps(true); break; case 'p': { bool ret = SetCfenginePort(optarg); if (!ret) { /* the function call above logs an error for us (if any) */ exit(EXIT_FAILURE); } break; } case 'r': config->report_file = xstrdup(optarg); break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(EXIT_SUCCESS); default: CFTestD_Help(); exit(EXIT_FAILURE); } } if (optind < argc) // More unparsed arguments left after getopt_long { // Enumerate and print all invalid arguments: Log(LOG_LEVEL_ERR, "Invalid command line arguments:"); int start = optind; int stop = argc; int total = stop - start; for (int i = 0; i < total; ++i) { Log(LOG_LEVEL_ERR, "[%d/%d]: %s\n", i + 1, total, argv[start + i]); } } return config; }
static GenericAgentConfig *CheckOpts(EvalContext *ctx, int argc, char **argv) { extern char *optarg; int optindex = 0; int c; GenericAgentConfig *config = GenericAgentConfigNewDefault(AGENT_TYPE_RUNAGENT); DEFINECLASSES[0] = '\0'; SENDCLASSES[0] = '\0'; while ((c = getopt_long(argc, argv, "t:q:db:vnKhIif:D:VSxo:s:MH:lC::", OPTIONS, &optindex)) != EOF) { switch ((char) c) { case 'l': LEGACY_OUTPUT = true; break; case 'f': GenericAgentConfigSetInputFile(config, GetWorkDir(), optarg); MINUSF = true; break; case 'b': BACKGROUND = true; if (optarg) { MAXCHILD = atoi(optarg); } break; case 'd': LogSetGlobalLevel(LOG_LEVEL_DEBUG); break; case 'K': IGNORELOCK = true; break; case 's': strncpy(SENDCLASSES, optarg, CF_MAXVARSIZE); if (strlen(optarg) > CF_MAXVARSIZE) { Log(LOG_LEVEL_ERR, "Argument too long (-s)"); exit(EXIT_FAILURE); } break; case 'D': strncpy(DEFINECLASSES, optarg, CF_MAXVARSIZE); if (strlen(optarg) > CF_MAXVARSIZE) { Log(LOG_LEVEL_ERR, "Argument too long (-D)"); exit(EXIT_FAILURE); } break; case 'H': HOSTLIST = RlistFromSplitString(optarg, ','); break; case 'o': strncpy(REMOTE_AGENT_OPTIONS, optarg, CF_MAXVARSIZE); break; case 'I': LogSetGlobalLevel(LOG_LEVEL_INFO); break; case 'i': INTERACTIVE = true; break; case 'v': LogSetGlobalLevel(LOG_LEVEL_VERBOSE); break; case 'n': DONTDO = true; IGNORELOCK = true; EvalContextClassPutHard(ctx, "opt_dry_run"); break; case 't': CONNTIMEOUT = atoi(optarg); break; case 'V': { Writer *w = FileWriter(stdout); GenericAgentWriteVersion(w); FileWriterDetach(w); } exit(0); case 'h': { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-runagent", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(0); case 'M': { Writer *out = FileWriter(stdout); ManPageWrite(out, "cf-runagent", time(NULL), CF_RUNAGENT_SHORT_DESCRIPTION, CF_RUNAGENT_MANPAGE_LONG_DESCRIPTION, OPTIONS, HINTS, true); FileWriterDetach(out); exit(EXIT_SUCCESS); } case 'x': Log(LOG_LEVEL_ERR, "Self-diagnostic functionality is retired."); exit(0); case 'C': if (!GenericAgentConfigParseColor(config, optarg)) { exit(EXIT_FAILURE); } break; default: { Writer *w = FileWriter(stdout); GenericAgentWriteHelp(w, "cf-runagent", OPTIONS, HINTS, true); FileWriterDetach(w); } exit(1); } } if (!GenericAgentConfigParseArguments(config, argc - optind, argv + optind)) { Log(LOG_LEVEL_ERR, "Too many arguments"); exit(EXIT_FAILURE); } return config; }