def __init__(self, dsc_file_path, tailoring_file_path=""): """ Constructor for the DataStreamHandler class. :param dsc_file_path: path to a file with a data stream collection :type dsc_file_path: str :param tailoring_file_path: path to a tailoring file :type tailoring_file_path: str """ # is used to speed up getting lists of profiles self._profiles_cache = dict() if not os.path.exists(dsc_file_path): msg = "Invalid file path: '%s'" % dsc_file_path raise DataStreamHandlingError(msg) # create an XCCDF session for the file self._session = OSCAP.xccdf_session_new(dsc_file_path) if not self._session: msg = "'%s' is not a valid SCAP content file" % dsc_file_path raise DataStreamHandlingError(msg) if tailoring_file_path: OSCAP.xccdf_session_set_user_tailoring_file( self._session, tailoring_file_path) if not OSCAP.xccdf_session_is_sds(self._session): msg = "'%s' is not a data stream collection" % dsc_file_path raise DataStreamHandlingError(msg) # dictionary holding the items gathered from DSC processing self._items = OrderedDict() # create an sds index for the content self._sds_idx = OSCAP.xccdf_session_get_sds_idx(self._session) # iterate over streams and get checklists from each stream streams_itr = OSCAP.ds_sds_index_get_streams(self._sds_idx) while OSCAP.ds_stream_index_iterator_has_more(streams_itr): stream_idx = OSCAP.ds_stream_index_iterator_next(streams_itr) # will be used to store the checklists for streams stream_id = OSCAP.ds_stream_index_get_id(stream_idx) checklists = [] # iterate over checklists and append their ids to the list chklist_itr = OSCAP.ds_stream_index_get_checklists(stream_idx) while OSCAP.oscap_string_iterator_has_more(chklist_itr): checklists.append( OSCAP.oscap_string_iterator_next(chklist_itr)) # store the list of checklist for the current stream self._items[stream_id] = checklists OSCAP.oscap_string_iterator_free(chklist_itr) OSCAP.ds_stream_index_iterator_free(streams_itr)
def __init__(self, dsc_file_path, tailoring_file_path=""): """ Constructor for the DataStreamHandler class. :param dsc_file_path: path to a file with a data stream collection :type dsc_file_path: str :param tailoring_file_path: path to a tailoring file :type tailoring_file_path: str """ # is used to speed up getting lists of profiles self._profiles_cache = dict() if not os.path.exists(dsc_file_path): msg = "Invalid file path: '%s'" % dsc_file_path raise DataStreamHandlingError(msg) # create an XCCDF session for the file self._session = OSCAP.xccdf_session_new(dsc_file_path) if not self._session: msg = "'%s' is not a valid SCAP content file" % dsc_file_path raise DataStreamHandlingError(msg) if tailoring_file_path: OSCAP.xccdf_session_set_user_tailoring_file(self._session, tailoring_file_path) if not OSCAP.xccdf_session_is_sds(self._session): msg = "'%s' is not a data stream collection" % dsc_file_path raise DataStreamHandlingError(msg) # dictionary holding the items gathered from DSC processing self._items = OrderedDict() # create an sds index for the content self._sds_idx = OSCAP.xccdf_session_get_sds_idx(self._session) # iterate over streams and get checklists from each stream streams_itr = OSCAP.ds_sds_index_get_streams(self._sds_idx) while OSCAP.ds_stream_index_iterator_has_more(streams_itr): stream_idx = OSCAP.ds_stream_index_iterator_next(streams_itr) # will be used to store the checklists for streams stream_id = OSCAP.ds_stream_index_get_id(stream_idx) checklists = [] # iterate over checklists and append their ids to the list chklist_itr = OSCAP.ds_stream_index_get_checklists(stream_idx) while OSCAP.oscap_string_iterator_has_more(chklist_itr): checklists.append(OSCAP.oscap_string_iterator_next(chklist_itr)) # store the list of checklist for the current stream self._items[stream_id] = checklists OSCAP.oscap_string_iterator_free(chklist_itr) OSCAP.ds_stream_index_iterator_free(streams_itr)
def __init__(self, xccdf_file_path, tailoring_file_path=""): """ Constructor for the BenchmarkHandler class. :param xccdf_file_path: path to a file with an XCCDF benchmark :type xccdf_file_path: str :param tailoring_file_path: path to a tailoring file :type tailoring_file_path: str """ if not os.path.exists(xccdf_file_path): msg = "Invalid file path: '%s'" % xccdf_file_path raise BenchmarkHandlingError(msg) session = OSCAP.xccdf_session_new(xccdf_file_path) if not session: msg = "'%s' is not a valid SCAP content file" % xccdf_file_path raise BenchmarkHandlingError(msg) if tailoring_file_path: OSCAP.xccdf_session_set_user_tailoring_file(session, tailoring_file_path) if OSCAP.xccdf_session_load(session) != 0: raise BenchmarkHandlingError(OSCAP.oscap_err_desc()) # get the benchmark object policy_model = OSCAP.xccdf_session_get_policy_model(session) benchmark = OSCAP.xccdf_policy_model_get_benchmark(policy_model) default_policy = OSCAP.xccdf_policy_new(policy_model, None) default_rules_count = OSCAP.xccdf_policy_get_selected_rules_count(default_policy) # stores a list of profiles in the benchmark self._profiles = [] if default_rules_count > 0: self._profiles.append( ProfileInfo( "default", "Default", "The implicit XCCDF profile. Usually, the default contains no rules.")) if not benchmark: msg = "Not a valid benchmark file: '%s'" % xccdf_file_path raise BenchmarkHandlingError(msg) # iterate over the profiles in the benchmark and store them profile_itr = OSCAP.xccdf_benchmark_get_profiles(benchmark) while OSCAP.xccdf_profile_iterator_has_more(profile_itr): profile = OSCAP.xccdf_profile_iterator_next(profile_itr) id_ = OSCAP.xccdf_profile_get_id(profile) title = oscap_text_itr_get_text(OSCAP.xccdf_profile_get_title(profile)) desc = parse_HTML_from_content(oscap_text_itr_get_text(OSCAP.xccdf_profile_get_description(profile))) info = ProfileInfo(id_, title, desc) self._profiles.append(info) if tailoring_file_path: tailoring = OSCAP.xccdf_policy_model_get_tailoring(policy_model) profile_itr = OSCAP.xccdf_tailoring_get_profiles(tailoring) while OSCAP.xccdf_profile_iterator_has_more(profile_itr): profile = OSCAP.xccdf_profile_iterator_next(profile_itr) id_ = OSCAP.xccdf_profile_get_id(profile) title = oscap_text_itr_get_text(OSCAP.xccdf_profile_get_title(profile)) desc = parse_HTML_from_content(oscap_text_itr_get_text(OSCAP.xccdf_profile_get_description(profile))) info = ProfileInfo(id_, title, desc) self._profiles.append(info) OSCAP.xccdf_profile_iterator_free(profile_itr) OSCAP.xccdf_session_free(session)
def __init__(self, xccdf_file_path, tailoring_file_path=""): """ Constructor for the BenchmarkHandler class. :param xccdf_file_path: path to a file with an XCCDF benchmark :type xccdf_file_path: str :param tailoring_file_path: path to a tailoring file :type tailoring_file_path: str """ if not os.path.exists(xccdf_file_path): msg = "Invalid file path: '%s'" % xccdf_file_path raise BenchmarkHandlingError(msg) session = OSCAP.xccdf_session_new(xccdf_file_path) if not session: msg = "'%s' is not a valid SCAP content file" % xccdf_file_path raise BenchmarkHandlingError(msg) if tailoring_file_path: OSCAP.xccdf_session_set_user_tailoring_file( session, tailoring_file_path) if OSCAP.xccdf_session_load(session) != 0: raise BenchmarkHandlingError(OSCAP.oscap_err_desc()) # get the benchmark object policy_model = OSCAP.xccdf_session_get_policy_model(session) benchmark = OSCAP.xccdf_policy_model_get_benchmark(policy_model) default_policy = OSCAP.xccdf_policy_new(policy_model, None) default_rules_count = OSCAP.xccdf_policy_get_selected_rules_count( default_policy) # stores a list of profiles in the benchmark self._profiles = [] if default_rules_count > 0: self._profiles.append( ProfileInfo( "default", "Default", "The implicit XCCDF profile. Usually, the default contains no rules." )) if not benchmark: msg = "Not a valid benchmark file: '%s'" % xccdf_file_path raise BenchmarkHandlingError(msg) # iterate over the profiles in the benchmark and store them profile_itr = OSCAP.xccdf_benchmark_get_profiles(benchmark) while OSCAP.xccdf_profile_iterator_has_more(profile_itr): profile = OSCAP.xccdf_profile_iterator_next(profile_itr) id_ = OSCAP.xccdf_profile_get_id(profile) title = oscap_text_itr_get_text( OSCAP.xccdf_profile_get_title(profile)) desc = parse_HTML_from_content( oscap_text_itr_get_text( OSCAP.xccdf_profile_get_description(profile))) info = ProfileInfo(id_, title, desc) self._profiles.append(info) if tailoring_file_path: tailoring = OSCAP.xccdf_policy_model_get_tailoring(policy_model) profile_itr = OSCAP.xccdf_tailoring_get_profiles(tailoring) while OSCAP.xccdf_profile_iterator_has_more(profile_itr): profile = OSCAP.xccdf_profile_iterator_next(profile_itr) id_ = OSCAP.xccdf_profile_get_id(profile) title = oscap_text_itr_get_text( OSCAP.xccdf_profile_get_title(profile)) desc = parse_HTML_from_content( oscap_text_itr_get_text( OSCAP.xccdf_profile_get_description(profile))) info = ProfileInfo(id_, title, desc) self._profiles.append(info) OSCAP.xccdf_profile_iterator_free(profile_itr) OSCAP.xccdf_session_free(session)