diff options
Diffstat (limited to 'src/sw-collector')
-rw-r--r-- | src/sw-collector/sw-collector.8.in | 15 | ||||
-rw-r--r-- | src/sw-collector/sw-collector.c | 103 |
2 files changed, 21 insertions, 97 deletions
diff --git a/src/sw-collector/sw-collector.8.in b/src/sw-collector/sw-collector.8.in index da713cd36..8560ba095 100644 --- a/src/sw-collector/sw-collector.8.in +++ b/src/sw-collector/sw-collector.8.in @@ -99,9 +99,18 @@ The following parameters can be configured in strongswan.conf: uri = https://admin-user:ietf99hackathon@tnc.strongswan.org/api/ timeout = 120 } - tag_creator { - name = strongSwan Project - regid = strongswan.org + } +.P +The parameters of the swid_generator used with the \-\-generate command can +be changed in the libimcv section of strongswan.conf: +.P + libimcv { + swid_gen { + command = /usr/local/bin/swid_generator + tag_creator { + name = strongSwan Project + regid = strongswan.org + } } } . diff --git a/src/sw-collector/sw-collector.c b/src/sw-collector/sw-collector.c index 0bdd59813..e08f94868 100644 --- a/src/sw-collector/sw-collector.c +++ b/src/sw-collector/sw-collector.c @@ -30,13 +30,11 @@ #include "sw_collector_dpkg.h" # #include <library.h> -#include <bio/bio_writer.h> #include <utils/debug.h> #include <utils/lexparser.h> #include <imv/imv_os_info.h> - -#define SWID_GENERATOR "/usr/local/bin/swid_generator" +#include <swid_gen/swid_gen.h> /** * global debug output variables @@ -470,105 +468,21 @@ static int unregistered_identifiers(sw_collector_db_t *db, } /** - * Generate a either a full or a minimalistic ISO 19770-2:2015 SWID tag - */ -static char* generate_tag(char *name, char *package, char *version, - char* entity, char *regid, char *product, - bool full_tag, char *generator) -{ - char *tag = NULL; - - if (full_tag) - { - size_t tag_buf_len = 8192; - char tag_buf[tag_buf_len], command[BUF_LEN]; - bio_writer_t *writer; - chunk_t tag_chunk; - FILE *file; - - /* Compose the SWID generator command */ - snprintf(command, BUF_LEN, "%s swid --full --regid %s --entity-name " - "\"%s\" --package %s", generator, regid, entity, package); -\ - /* Open a pipe stream for reading the SWID generator output */ - file = popen(command, "r"); - if (file) - { - writer = bio_writer_create(tag_buf_len); - while (TRUE) - { - if (!fgets(tag_buf, tag_buf_len, file)) - { - break; - } - writer->write_data(writer, - chunk_create(tag_buf, strlen(tag_buf))); - } - pclose(file); - tag_chunk = writer->extract_buf(writer); - writer->destroy(writer); - if (tag_chunk.len > 1) - { - tag = tag_chunk.ptr; - tag[tag_chunk.len - 1] = '\0'; - } - } - else - { - DBG1(DBG_IMC, "failed to run swid_generator command"); - } - } - - /* Generate minimalistic SWID tag */ - if (!tag) - { - char *tag_id; - - tag_id = strstr(name, "__"); - if (!tag_id) - { - return NULL; - } - tag_id += 2; - - if (asprintf(&tag, "<?xml version=\"1.0\" encoding=\"utf-8\"?>" - "<SoftwareIdentity name=\"%s\" tagId=\"%s\" version=\"%s\" " - "versionScheme=\"alphanumeric\" " - "xmlns=\"http://standards.iso.org/iso/19770/-2/2015/schema.xsd\">" - "<Entity name=\"%s\" regid=\"%s\" role=\"tagCreator\"/>" - "<Meta product=\"%s\"/>" - "</SoftwareIdentity>", - package, tag_id, version, entity, regid, product) == -1) - { - tag = NULL; - } - } - - return tag; -} - -/** - * Generate a minimalistic ISO 19770-2:2015 SWID tag for - * all removed SW identifiers that are not registered centrally + * Generate ISO 19770-2:2015 SWID tags for [installed|removed|all] + * SW identifiers that are not registered centrally */ static int generate_tags(sw_collector_info_t *info, sw_collector_db_t *db, bool full_tags, sw_collector_db_query_t type) { + swid_gen_t * swid_gen; sw_collector_rest_api_t *rest_api; - char *name, *package, *version, *entity, *regid, *product, *generator, *tag; + char *name, *package, *version, *tag; enumerator_t *enumerator; uint32_t sw_id; bool installed; int count = 0, installed_count = 0, status = EXIT_FAILURE; - entity = lib->settings->get_str(lib->settings, "%s.tag_creator.name", - "strongSwan Project", lib->ns); - regid = lib->settings->get_str(lib->settings, "%s.tag_creator.regid", - "strongswan.org", lib->ns); - generator = lib->settings->get_str(lib->settings, "%s.swid_generator", - SWID_GENERATOR, lib->ns); - info->get_os(info, &product); - + swid_gen = swid_gen_create(); rest_api = sw_collector_rest_api_create(db); if (!rest_api) { @@ -585,8 +499,8 @@ static int generate_tags(sw_collector_info_t *info, sw_collector_db_t *db, sw_id = db->get_sw_id(db, name, &package, &version, NULL, &installed); if (sw_id) { - tag = generate_tag(name, package, version, entity, regid, product, - full_tags && installed, generator); + tag = swid_gen->generate_tag(swid_gen, name, package, version, + full_tags && installed, FALSE); if (tag) { DBG2(DBG_IMC, " creating %s", name); @@ -623,6 +537,7 @@ static int generate_tags(sw_collector_info_t *info, sw_collector_db_t *db, } end: + swid_gen->destroy(swid_gen); DESTROY_IF(rest_api); return status; |