diff -ru openscap-1.2.16/utils/oscap-cvrf.c openscap-1.2.16.xx/utils/oscap-cvrf.c --- openscap-1.2.16/utils/oscap-cvrf.c 2017-11-14 12:48:32.000000000 +0100 +++ openscap-1.2.16.xx/utils/oscap-cvrf.c 2017-11-14 14:59:57.353065728 +0100 @@ -60,6 +60,7 @@ .help = "Options:\n" " --index\r\t\t\t\t - Use index file to evaluate a directory of CVRF files.\n" " --results\r\t\t\t\t - Filename to which evaluation results will be saved.\n", + " --productid\r\t\t\t\t - Product ID to use (currently not yet auto-detected).\n", }; static struct oscap_module CVRF_EXPORT_MODULE = { @@ -98,10 +99,18 @@ // Temporary hardcoded CPE until CPE name can be found without input by CVRF functions // themselves const char *os_name = "Red Hat Enterprise Linux Desktop Supplementary (v. 6)"; - struct oscap_source *import_source = oscap_source_new_from_file(action->cvrf_action->f_cvrf); - struct oscap_source *export_source = cvrf_model_get_results_source(import_source, os_name); - if (export_source == NULL) + struct oscap_source *import_source; + struct oscap_source *export_source; + + if (action->cvrf_action->f_productid) + os_name = action->cvrf_action->f_productid; + + import_source = oscap_source_new_from_file(action->cvrf_action->f_cvrf); + export_source = cvrf_model_get_results_source(import_source, os_name); + if (export_source == NULL) { + fprintf(stderr, "Could not find results for product %s\n", os_name); return -1; + } if (oscap_source_save_as(export_source, action->cvrf_action->f_results) == -1) { result = OSCAP_ERROR; @@ -180,6 +189,7 @@ CVRF_OPT_INDEX, CVRF_OPT_RESULT_FILE, CVRF_OPT_OUTPUT_FILE, + CVRF_OPT_PRODUCT_ID, }; bool getopt_cvrf(int argc, char **argv, struct oscap_action *action) { @@ -191,6 +201,7 @@ {"index", 0, NULL, CVRF_OPT_INDEX}, {"results", 1, NULL, CVRF_OPT_RESULT_FILE}, {"output", 1, NULL, CVRF_OPT_OUTPUT_FILE}, + {"productid", 1, NULL, CVRF_OPT_PRODUCT_ID}, {0, 0, 0, 0} }; @@ -206,6 +217,9 @@ case CVRF_OPT_OUTPUT_FILE: cvrf_action->f_output = optarg; break; + case CVRF_OPT_PRODUCT_ID: + cvrf_action->f_productid = optarg; + break; default: return oscap_module_usage(action->module, stderr, NULL); } diff -ru openscap-1.2.16/utils/oscap-tool.h openscap-1.2.16.xx/utils/oscap-tool.h --- openscap-1.2.16/utils/oscap-tool.h 2017-11-14 12:48:32.000000000 +0100 +++ openscap-1.2.16.xx/utils/oscap-tool.h 2017-11-14 14:58:35.981147877 +0100 @@ -104,6 +104,7 @@ char *f_cvrf; char *f_results; char *f_output; + char *f_productid; }; struct oscap_action {