store functional components in database
This commit is contained in:
parent
17f69fbcb5
commit
40cfe6db6a
|
@ -46,146 +46,160 @@ INSERT INTO products (
|
|||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/lib/i386-linux-gnu/libdl.so.2', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/lib/x86_64-linux-gnu/libdl.so.2', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/lib/libdl.so.2', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/sbin/iptables', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/lib/libxtables.so.5', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/lib/libxtables.so.2', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
1, '/lib/xtables/', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_udp.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_tcp.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_esp.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_policy.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_conntrack.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libipt_SNAT.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libipt_DNAT.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libipt_MASQUERADE.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libipt_LOG.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/sbin/ip6tables', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libip6t_LOG.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_mark.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, 'libxt_MARK.so', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, measurement
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
1, '/lib/iptables', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, metadata
|
||||
) VALUES (
|
||||
) VALUES (
|
||||
0, '/etc/tnc_config', 1
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, component
|
||||
) VALUES (
|
||||
0, 'tboot_pcr17', 1
|
||||
type, path
|
||||
) VALUES (
|
||||
0, 'tboot_pcr17'
|
||||
);
|
||||
|
||||
INSERT INTO files (
|
||||
type, path, component
|
||||
) VALUES (
|
||||
0, 'tboot_pcr18', 1
|
||||
type, path
|
||||
) VALUES (
|
||||
0, 'tboot_pcr18'
|
||||
);
|
||||
|
||||
/* Components */
|
||||
|
||||
INSERT INTO components (
|
||||
vendor_id, name, qualifier
|
||||
) VALUES (
|
||||
36906, 1, 33 /* ITA TGRUB */
|
||||
);
|
||||
|
||||
INSERT INTO components (
|
||||
vendor_id, name, qualifier
|
||||
) VALUES (
|
||||
36906, 2, 33 /* ITA TBOOT */
|
||||
);
|
||||
|
||||
/* Product-File */
|
||||
|
@ -484,6 +498,18 @@ INSERT INTO product_file (
|
|||
7, 24
|
||||
);
|
||||
|
||||
INSERT INTO product_component (
|
||||
product, component, sequence
|
||||
) VALUES (
|
||||
7, 1, 1
|
||||
);
|
||||
|
||||
INSERT INTO product_component (
|
||||
product, component, sequence
|
||||
) VALUES (
|
||||
7, 2, 2
|
||||
);
|
||||
|
||||
/* File Hashes */
|
||||
|
||||
INSERT INTO file_hashes (
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "imv_attestation_build.h"
|
||||
#include "imv_attestation_state.h"
|
||||
|
||||
#include <libpts.h>
|
||||
#include <tcg/tcg_pts_attr_proto_caps.h>
|
||||
#include <tcg/tcg_pts_attr_meas_algo.h>
|
||||
#include <tcg/tcg_pts_attr_dh_nonce_params_req.h>
|
||||
|
@ -208,9 +209,11 @@ bool imv_attestation_build(pa_tnc_msg_t *msg,
|
|||
case IMV_ATTESTATION_STATE_COMP_EVID:
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
char *platform_info, *pathname;
|
||||
char flags[8];
|
||||
char *platform_info;
|
||||
pts_funct_comp_evid_req_t *requests = NULL;
|
||||
funct_comp_evid_req_entry_t *entry;
|
||||
int vid, name, qualifier, type;
|
||||
bool first_req = TRUE;
|
||||
|
||||
attestation_state->set_handshake_state(attestation_state,
|
||||
|
@ -229,41 +232,28 @@ bool imv_attestation_build(pa_tnc_msg_t *msg,
|
|||
DBG1(DBG_IMV, "platform is '%s'", platform_info);
|
||||
|
||||
|
||||
enumerator = pts_db->create_comp_evid_enumerator(pts_db,
|
||||
platform_info);
|
||||
enumerator = pts_db->create_comp_evid_enumerator(pts_db, platform_info);
|
||||
if (!enumerator)
|
||||
{
|
||||
break;
|
||||
}
|
||||
while (enumerator->enumerate(enumerator, &pathname))
|
||||
while (enumerator->enumerate(enumerator, &vid, &name, &qualifier))
|
||||
{
|
||||
entry = malloc_thing(funct_comp_evid_req_entry_t);
|
||||
|
||||
entry->flags = PTS_REQ_FUNC_COMP_FLAG_PCR;
|
||||
entry->sub_comp_depth = 0;
|
||||
entry->vendor_id = PEN_ITA;
|
||||
entry->family = PTS_REQ_FUNCT_COMP_FAM_BIN_ENUM;
|
||||
entry->qualifier.kernel = FALSE;
|
||||
entry->qualifier.sub_component = FALSE;
|
||||
entry->qualifier.type = PTS_ITA_FUNC_COMP_TYPE_TRUSTED;
|
||||
|
||||
if (strcmp(pathname, TBOOT_POLICY_STR) == 0)
|
||||
{
|
||||
entry->name = PTS_ITA_FUNC_COMP_NAME_TBOOT_POLICY;
|
||||
}
|
||||
else if (strcmp(pathname, TBOOT_MLE_STR) == 0)
|
||||
{
|
||||
entry->name = PTS_ITA_FUNC_COMP_NAME_TBOOT_MLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG1(DBG_IMV, "Unknown functional component name: \"%s\"",
|
||||
pathname);
|
||||
enumerator->destroy(enumerator);
|
||||
return FALSE;
|
||||
}
|
||||
entry->name = pts_comp_func_name_create(vid, name, qualifier);
|
||||
|
||||
type = pts_components->get_qualifier(pts_components,
|
||||
entry->name, &flags);
|
||||
|
||||
DBG2(DBG_TNC, "%N functional component '%N' with qualifier %s '%N'",
|
||||
pen_names, vid,
|
||||
pts_components->get_comp_func_names(pts_components, vid),
|
||||
name, flags,
|
||||
pts_components->get_qualifier_type_names(pts_components, vid),
|
||||
type);
|
||||
|
||||
|
||||
if (first_req)
|
||||
{
|
||||
/* Create a requests object */
|
||||
|
|
|
@ -6,8 +6,15 @@ CREATE TABLE files (
|
|||
type INTEGER NOT NULL,
|
||||
path TEXT NOT NULL,
|
||||
measurement INTEGER DEFAULT 0,
|
||||
metadata INTEGER DEFAULT 0,
|
||||
component INTEGER DEFAULT 0
|
||||
metadata INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS components;
|
||||
CREATE TABLE components (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
vendor_id INTEGER NOT NULL,
|
||||
name INTEGER NOT NULL,
|
||||
qualifier INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS products;
|
||||
|
@ -27,6 +34,14 @@ CREATE TABLE product_file (
|
|||
PRIMARY KEY (product, file)
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS product_component;
|
||||
CREATE TABLE product_component (
|
||||
product INTEGER NOT NULL,
|
||||
component INTEGER NOT NULL,
|
||||
sequence INTEGER DEFAULT 0,
|
||||
PRIMARY KEY (product, component)
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS file_hashes;
|
||||
CREATE TABLE file_hashes (
|
||||
file INTEGER NOT NULL,
|
||||
|
|
|
@ -74,13 +74,13 @@ METHOD(pts_database_t, create_comp_evid_enumerator, enumerator_t*,
|
|||
{
|
||||
enumerator_t *e;
|
||||
|
||||
/* look for all entries belonging to a product in the files table */
|
||||
/* look for all entries belonging to a product in the components table */
|
||||
e = this->db->query(this->db,
|
||||
"SELECT f.path FROM files AS f "
|
||||
"JOIN product_file AS pf ON f.id = pf.file "
|
||||
"JOIN products AS p ON p.id = pf.product "
|
||||
"WHERE p.name = ? AND f.component = 1",
|
||||
DB_TEXT, product, DB_TEXT);
|
||||
"SELECT c.vendor_id, c.name, c.qualifier FROM components AS c "
|
||||
"JOIN product_component AS pc ON c.id = pc.component "
|
||||
"JOIN products AS p ON p.id = pc.product "
|
||||
"WHERE p.name = ? ORDER BY pf.order",
|
||||
DB_TEXT, product, DB_INT, DB_INT, DB_INT);
|
||||
return e;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue