libimcv: SWIMA SW locator must be file URI

This commit is contained in:
Andreas Steffen
2018-06-12 17:53:06 +02:00
parent 0b445a5c54
commit eccd2b6e09
+10 -2
View File
@@ -13,6 +13,8 @@
* for more details. * for more details.
*/ */
#define _GNU_SOURCE /* for asprintf() */
#include "swima_collector.h" #include "swima_collector.h"
#include <swid_gen/swid_gen.h> #include <swid_gen/swid_gen.h>
@@ -319,7 +321,7 @@ static status_t generate_tags(private_swima_collector_t *this,
static bool collect_tags(private_swima_collector_t *this, char *pathname, static bool collect_tags(private_swima_collector_t *this, char *pathname,
swima_inventory_t *targets, bool is_swidtag_dir) swima_inventory_t *targets, bool is_swidtag_dir)
{ {
char *rel_name, *abs_name, *suffix, *pos; char *rel_name, *abs_name, *suffix, *pos, *uri;
chunk_t *swid_tag, sw_id, sw_locator; chunk_t *swid_tag, sw_id, sw_locator;
swima_record_t *sw_record; swima_record_t *sw_record;
struct stat st; struct stat st;
@@ -433,8 +435,12 @@ static bool collect_tags(private_swima_collector_t *this, char *pathname,
} }
DBG2(DBG_IMC, " %s", rel_name); DBG2(DBG_IMC, " %s", rel_name);
sw_locator = chunk_empty;
pos = strstr(pathname, "/swidtag"); pos = strstr(pathname, "/swidtag");
sw_locator = pos ? chunk_create(pathname, pos - pathname) : chunk_empty; if (pos && asprintf(&uri, "file://%.*s", pos - pathname, pathname) > 0)
{
sw_locator = chunk_from_str(uri);
}
sw_record = swima_record_create(0, sw_id, sw_locator); sw_record = swima_record_create(0, sw_id, sw_locator);
sw_record->set_source_id(sw_record, SOURCE_ID_COLLECTOR); sw_record->set_source_id(sw_record, SOURCE_ID_COLLECTOR);
if (!this->sw_id_only) if (!this->sw_id_only)
@@ -442,8 +448,10 @@ static bool collect_tags(private_swima_collector_t *this, char *pathname,
sw_record->set_record(sw_record, *swid_tag); sw_record->set_record(sw_record, *swid_tag);
} }
this->inventory->add(this->inventory, sw_record); this->inventory->add(this->inventory, sw_record);
chunk_unmap(swid_tag); chunk_unmap(swid_tag);
chunk_free(&sw_id); chunk_free(&sw_id);
chunk_free(&sw_locator);
} }
success = TRUE; success = TRUE;