Ejemplo n.º 1
0
Archivo: sds.c Proyecto: radzy/openscap
int ds_sds_decompose_custom(const char* input_file, const char* id, const char* target_dir,
		const char* container_name, const char* component_id, const char* target_filename)
{
	struct oscap_source *ds_source = oscap_source_new_from_file(input_file);
	struct ds_sds_session *session = ds_sds_session_new_from_source(ds_source);
	if (session == NULL) {
		oscap_source_free(ds_source);
		return -1;
	}
	if (ds_sds_session_set_datastream_id(session, id)) {
		ds_sds_session_free(session);
		oscap_source_free(ds_source);
		return -1;
	}
	if (ds_sds_session_set_target_dir(session, oscap_streq(target_dir, "") ? "." : target_dir)) {
		ds_sds_session_free(session);
		oscap_source_free(ds_source);
		return -1;
	}

	if (ds_sds_session_register_component_with_dependencies(session, container_name, component_id, target_filename) != 0) {
		ds_sds_session_free(session);
		oscap_source_free(ds_source);
		return -1;
	}

	int ret = ds_sds_session_dump_component_files(session);
	ds_sds_session_free(session);
	oscap_source_free(ds_source);
	return ret;
}
Ejemplo n.º 2
0
int app_ds_sds_split(const struct oscap_action *action) {
	int ret = OSCAP_ERROR;
	const char* f_datastream_id = action->f_datastream_id;
	const char* f_component_id = action->f_xccdf_id;
	struct ds_sds_session *session = NULL;

	struct oscap_source *source = oscap_source_new_from_file(action->ds_action->file);
	/* Validate */
	if (action->validate)
	{
		if (oscap_source_validate(source, reporter, (void *) action) != 0) {
			goto cleanup;
		}
	}

	session = ds_sds_session_new_from_source(source);
	if (session == NULL) {
		goto cleanup;
	}
	if (ds_sds_index_select_checklist(ds_sds_session_get_sds_idx(session), &f_datastream_id, &f_component_id) != 0) {
		fprintf(stdout, "Failed to locate a datastream with ID matching '%s' ID "
				"and checklist inside matching '%s' ID.\n",
				action->f_datastream_id == NULL ? "<any>" : action->f_datastream_id,
				action->f_xccdf_id == NULL ? "<any>" : action->f_xccdf_id);
		goto cleanup;
	}
	ds_sds_session_set_datastream_id(session, f_datastream_id);

	ds_sds_session_set_remote_resources(session, action->remote_resources, download_reporting_callback);
	ds_sds_session_set_target_dir(session, action->ds_action->target);
	if (ds_sds_session_register_component_with_dependencies(session, "checklists", f_component_id, NULL) != 0) {
		goto cleanup;
	}
	if (ds_sds_session_dump_component_files(session) != 0) {
		goto cleanup;
	}

	ret = OSCAP_OK;

cleanup:
	oscap_print_error();

	ds_sds_session_free(session);
	oscap_source_free(source);
	free(action->ds_action);

	return ret;
}