From 585d68902891b6377a90649cc08d13661653f56c Mon Sep 17 00:00:00 2001 From: Alexey Makhalov <amakhalov@vmware.com> Date: Wed, 31 Aug 2016 11:06:17 +0000 Subject: [PATCH 2/6] Alternative csv output --- src/plugins/Makefile.am | 1 + src/plugins/output/csv2/Makefile.am | 16 +++++++ src/plugins/output/csv2/csv2.c | 96 +++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 src/plugins/output/csv2/Makefile.am create mode 100644 src/plugins/output/csv2/csv2.c diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index 0d56f8e..2c728af 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -6,6 +6,7 @@ pkglib_LTLIBRARIES = # Output plugins include output/cli/Makefile.am include output/csv/Makefile.am +include output/csv2/Makefile.am include output/html/Makefile.am # Packaging plugins diff --git a/src/plugins/output/csv2/Makefile.am b/src/plugins/output/csv2/Makefile.am new file mode 100644 index 0000000..dd753d4 --- /dev/null +++ b/src/plugins/output/csv2/Makefile.am @@ -0,0 +1,16 @@ +pkglib_LTLIBRARIES += \ + csv2.la + +csv2_la_SOURCES = \ + output/csv2/csv2.c + +csv2_la_LIBADD = \ + $(MODULE_COMMON_LIBS) \ + ${top_builddir}/src/libcve.la + +csv2_la_CFLAGS = \ + $(MODULE_COMMON_CFLAGS) \ + $(AM_CFLAGS) + +csv2_la_LDFLAGS = \ + $(MODULE_FLAGS) diff --git a/src/plugins/output/csv2/csv2.c b/src/plugins/output/csv2/csv2.c new file mode 100644 index 0000000..fe9f579 --- /dev/null +++ b/src/plugins/output/csv2/csv2.c @@ -0,0 +1,96 @@ +/* + * csv2.c - CSV output + * + * Copyright (C) 2016 Alexey Makhalov <amakhalov@vmware.com> + * + * cve-check-tool is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#define _GNU_SOURCE + +#include <stdio.h> +#include <errno.h> + +#include "config.h" +#include "util.h" +#include "cve-check-tool.h" +#include "plugin.h" + +static bool csv_write_report(CveCheckTool *self) +{ + GHashTableIter iter; + gchar *key = NULL; + struct source_package_t *v = NULL; + struct cve_entry_t *entry = NULL; + GList *c = NULL; + FILE *fd = NULL; + bool ret = false; + + if (self->output_file) { + fd = fopen(self->output_file, "w"); + if (!fd) { + fprintf(stderr, "Unable to open %s for writing: %s\n", self->output_file, strerror(errno)); + return false; + } + } else { + fd = stdout; + } + + /* CVE score|CVE number|package name|CVE summary */ + g_hash_table_iter_init(&iter, self->db); + while (g_hash_table_iter_next(&iter, (void**)&key, (void**)&v)) { + if (!v->issues && !v->patched && !self->show_unaffected) { + continue; + } + if (!v->issues && self->hide_patched) { + continue; + } + for (c = v->issues; c; c = c->next) { + entry = cve_db_get_cve(self->cve_db, (gchar*)c->data); + if (self->modified > 0 && entry->modified > self->modified) { + cve_free(entry); + continue; + } + if (fprintf(fd, "%s|%s|%s|%s\n", entry->score, entry->id, key, entry->summary) < 0) { + goto io_error; + } + } + } + + ret = true; + goto success; + +io_error: + fprintf(stderr, "Error writing to file: %s\n", strerror(errno)); +success: + ret = true; + if (fd != stdout && self->output_file) { + fclose(fd); + } + + return ret; +} + +_module_export_ bool cve_plugin_module_init(CvePlugin *self) +{ + self->report = csv_write_report; + self->flags = PLUGIN_TYPE_REPORT; + self->name = "csv2"; + return true; +} + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 8 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * vi: set shiftwidth=8 tabstop=8 expandtab: + * :indentSize=8:tabSize=8:noTabs=true: + */ -- 2.10.1