bool getopt_oval_eval(int argc, char **argv, struct oscap_action *action) { action->doctype = OSCAP_DOCUMENT_OVAL_DEFINITIONS; action->probe_root = NULL; /* Command-options */ struct option long_options[] = { { "results", required_argument, NULL, OVAL_OPT_RESULT_FILE }, { "report", required_argument, NULL, OVAL_OPT_REPORT_FILE }, { "id", required_argument, NULL, OVAL_OPT_ID }, { "variables", required_argument, NULL, OVAL_OPT_VARIABLES }, { "directives", required_argument, NULL, OVAL_OPT_DIRECTIVES }, { "without-syschar", no_argument, &action->without_sys_chars, 1}, { "datastream-id",required_argument, NULL, OVAL_OPT_DATASTREAM_ID}, { "oval-id", required_argument, NULL, OVAL_OPT_OVAL_ID}, { "skip-valid", no_argument, &action->validate, 0 }, { "probe-root", required_argument, NULL, OVAL_OPT_PROBE_ROOT}, { "verbose", required_argument, NULL, OVAL_OPT_VERBOSE }, { "verbose-log-file", required_argument, NULL, OVAL_OPT_VERBOSE_LOG_FILE }, { "fetch-remote-resources", no_argument, &action->remote_resources, 1}, { 0, 0, 0, 0 } }; int c; while ((c = getopt_long(argc, argv, "o:", long_options, NULL)) != -1) { switch (c) { case OVAL_OPT_RESULT_FILE: action->f_results = optarg; break; case OVAL_OPT_REPORT_FILE: action->f_report = optarg; break; case OVAL_OPT_ID: action->id = optarg; break; case OVAL_OPT_VARIABLES: action->f_variables = optarg; break; case OVAL_OPT_DIRECTIVES: action->f_directives = optarg; break; case OVAL_OPT_DATASTREAM_ID: action->f_datastream_id = optarg; break; case OVAL_OPT_OVAL_ID: action->f_oval_id = optarg; break; case OVAL_OPT_PROBE_ROOT: action->probe_root = optarg; break; case OVAL_OPT_VERBOSE: action->verbosity_level = optarg; break; case OVAL_OPT_VERBOSE_LOG_FILE: action->f_verbose_log = optarg; break; case 0: break; default: return oscap_module_usage(action->module, stderr, NULL); } } if (!check_verbose_options(action)) { return false; } /* We should have Definitions file here */ if (optind >= argc) return oscap_module_usage(action->module, stderr, "Definitions file is not specified!"); action->f_oval = argv[optind]; return true; }
bool getopt_oval_analyse(int argc, char **argv, struct oscap_action *action) { action->doctype = OSCAP_DOCUMENT_OVAL_DEFINITIONS; /* Command-options */ struct option long_options[] = { { "results", required_argument, NULL, OVAL_OPT_RESULT_FILE }, { "variables", required_argument, NULL, OVAL_OPT_VARIABLES }, { "directives", required_argument, NULL, OVAL_OPT_DIRECTIVES }, { "skip-valid", no_argument, &action->validate, 0 }, { "verbose", required_argument, NULL, OVAL_OPT_VERBOSE }, { "verbose-log-file", required_argument, NULL, OVAL_OPT_VERBOSE_LOG_FILE }, { 0, 0, 0, 0 } }; int c; while ((c = getopt_long(argc, argv, "o:", long_options, NULL)) != -1) { switch (c) { case OVAL_OPT_RESULT_FILE: action->f_results = optarg; break; case OVAL_OPT_VARIABLES: action->f_variables = optarg; break; case OVAL_OPT_DIRECTIVES: action->f_directives = optarg; break; case OVAL_OPT_VERBOSE: action->verbosity_level = optarg; break; case OVAL_OPT_VERBOSE_LOG_FILE: action->f_verbose_log = optarg; break; case 0: break; default: return oscap_module_usage(action->module, stderr, NULL); } } if (!check_verbose_options(action)) { return false; } /* We should have Definitions file here */ if (optind >= argc) return oscap_module_usage(action->module, stderr, "Definitions file is not specified!"); action->f_oval = argv[optind]; if (action->module == &OVAL_ANALYSE) { /* We should have System Characteristics file here */ if ((optind+1) > argc) return oscap_module_usage(action->module, stderr, "System characteristics file is not specified"); action->f_syschar = argv[optind + 1]; if (action->f_results == NULL) { return oscap_module_usage(action->module, stderr, "OVAL Results file is not specified(--results parameter)"); } } return true; }
bool getopt_oval_collect(int argc, char **argv, struct oscap_action *action) { action->doctype = OSCAP_DOCUMENT_OVAL_DEFINITIONS; /* Command-options */ struct option long_options[] = { { "id", required_argument, NULL, OVAL_OPT_ID }, { "variables", required_argument, NULL, OVAL_OPT_VARIABLES }, { "syschar", required_argument, NULL, OVAL_OPT_SYSCHAR }, { "skip-valid", no_argument, &action->validate, 0 }, { "verbose", required_argument, NULL, OVAL_OPT_VERBOSE }, { "verbose-log-file", required_argument, NULL, OVAL_OPT_VERBOSE_LOG_FILE }, { 0, 0, 0, 0 } }; int c; while ((c = getopt_long(argc, argv, "o:", long_options, NULL)) != -1) { switch (c) { case OVAL_OPT_ID: action->id = optarg; break; case OVAL_OPT_VARIABLES: action->f_variables = optarg; break; case OVAL_OPT_SYSCHAR: action->f_syschar = optarg; break; case OVAL_OPT_VERBOSE: action->verbosity_level = optarg; break; case OVAL_OPT_VERBOSE_LOG_FILE: action->f_verbose_log = optarg; break; case 0: break; default: return oscap_module_usage(action->module, stderr, NULL); } } if (!check_verbose_options(action)) { return false; } /* We should have Definitions file here */ if (optind >= argc) return oscap_module_usage(action->module, stderr, "Definitions file is not specified!"); action->f_oval = argv[optind]; return true; }
bool getopt_xccdf(int argc, char **argv, struct oscap_action *action) { assert(action != NULL); action->doctype = OSCAP_DOCUMENT_XCCDF; /* Command-options */ const struct option long_options[] = { // options {"output", required_argument, NULL, XCCDF_OPT_OUTPUT}, {"results", required_argument, NULL, XCCDF_OPT_RESULT_FILE}, {"results-arf", required_argument, NULL, XCCDF_OPT_RESULT_FILE_ARF}, {"datastream-id", required_argument, NULL, XCCDF_OPT_DATASTREAM_ID}, {"xccdf-id", required_argument, NULL, XCCDF_OPT_XCCDF_ID}, {"benchmark-id", required_argument, NULL, XCCDF_OPT_BENCHMARK_ID}, {"profile", required_argument, NULL, XCCDF_OPT_PROFILE}, {"result-id", required_argument, NULL, XCCDF_OPT_RESULT_ID}, {"report", required_argument, NULL, XCCDF_OPT_REPORT_FILE}, {"show", required_argument, NULL, XCCDF_OPT_SHOW}, {"template", required_argument, NULL, XCCDF_OPT_TEMPLATE}, {"oval-template", required_argument, NULL, XCCDF_OPT_OVAL_TEMPLATE}, {"stylesheet", required_argument, NULL, XCCDF_OPT_STYLESHEET_FILE}, {"tailoring-file", required_argument, NULL, XCCDF_OPT_TAILORING_FILE}, {"tailoring-id", required_argument, NULL, XCCDF_OPT_TAILORING_ID}, {"cpe", required_argument, NULL, XCCDF_OPT_CPE}, {"cpe-dict", required_argument, NULL, XCCDF_OPT_CPE_DICT}, // DEPRECATED! {"sce-template", required_argument, NULL, XCCDF_OPT_SCE_TEMPLATE}, { "verbose", required_argument, NULL, XCCDF_OPT_VERBOSE }, { "verbose-log-file", required_argument, NULL, XCCDF_OPT_VERBOSE_LOG_FILE }, // flags {"force", no_argument, &action->force, 1}, {"oval-results", no_argument, &action->oval_results, 1}, {"sce-results", no_argument, &action->check_engine_results, 1}, {"check-engine-results", no_argument, &action->check_engine_results, 1}, {"skip-valid", no_argument, &action->validate, 0}, {"fetch-remote-resources", no_argument, &action->remote_resources, 1}, {"progress", no_argument, &action->progress, 1}, {"remediate", no_argument, &action->remediate, 1}, {"hide-profile-info", no_argument, &action->hide_profile_info, 1}, {"export-variables", no_argument, &action->export_variables, 1}, {"schematron", no_argument, &action->schematron, 1}, // end {0, 0, 0, 0} }; int c; while ((c = getopt_long(argc, argv, "o:i:", long_options, NULL)) != -1) { switch (c) { case XCCDF_OPT_OUTPUT: case XCCDF_OPT_RESULT_FILE: action->f_results = optarg; break; case XCCDF_OPT_RESULT_FILE_ARF: action->f_results_arf = optarg; break; case XCCDF_OPT_DATASTREAM_ID: action->f_datastream_id = optarg; break; case XCCDF_OPT_XCCDF_ID: action->f_xccdf_id = optarg; break; case XCCDF_OPT_BENCHMARK_ID: action->f_benchmark_id = optarg; break; case XCCDF_OPT_PROFILE: action->profile = optarg; break; case XCCDF_OPT_RESULT_ID: action->id = optarg; break; case XCCDF_OPT_REPORT_FILE: action->f_report = optarg; break; case XCCDF_OPT_SHOW: action->show = optarg; break; case XCCDF_OPT_TEMPLATE: action->tmpl = optarg; break; case XCCDF_OPT_OVAL_TEMPLATE: action->oval_template = optarg; break; /* we use realpath to get an absolute path to given XSLT to prevent openscap from looking into /usr/share/openscap/xsl instead of CWD */ case XCCDF_OPT_STYLESHEET_FILE: realpath(optarg, custom_stylesheet_path); action->stylesheet = custom_stylesheet_path; break; case XCCDF_OPT_TAILORING_FILE: action->tailoring_file = optarg; break; case XCCDF_OPT_TAILORING_ID: action->tailoring_id = optarg; break; case XCCDF_OPT_CPE: action->cpe = optarg; break; case XCCDF_OPT_CPE_DICT: { fprintf(stdout, "Warning: --cpe-dict is a deprecated option. Please use --cpe instead!\n\n"); action->cpe = optarg; break; } case XCCDF_OPT_SCE_TEMPLATE: action->sce_template = optarg; break; case XCCDF_OPT_VERBOSE: action->verbosity_level = optarg; break; case XCCDF_OPT_VERBOSE_LOG_FILE: action->f_verbose_log = optarg; break; case 0: break; default: return oscap_module_usage(action->module, stderr, NULL); } } if (!check_verbose_options(action)) { return false; } if (action->module == &XCCDF_EVAL) { /* We should have XCCDF file here */ if (optind >= argc) { /* TODO */ return oscap_module_usage(action->module, stderr, "XCCDF file need to be specified!"); } action->f_xccdf = argv[optind]; if (argc > (optind+1)) { action->f_ovals = malloc((argc-(optind+1)+1) * sizeof(char *)); int i = 1; while (argc > (optind+i)) { action->f_ovals[i-1] = argv[optind + i]; i++; } action->f_ovals[i-1] = NULL; } else { action->f_ovals = NULL; } } else if (action->module == &XCCDF_GEN_CUSTOM) { if (!action->stylesheet) { return oscap_module_usage(action->module, stderr, "XSLT Stylesheet needs to be specified!"); } if (optind >= argc) return oscap_module_usage(action->module, stderr, "XCCDF file needs to be specified!"); action->f_xccdf = argv[optind]; } else { if (optind >= argc) return oscap_module_usage(action->module, stderr, "XCCDF file needs to be specified!"); action->f_xccdf = argv[optind]; } return true; }