From: Andreas Steffen Date: Tue, 17 Jul 2012 11:42:58 +0000 (+0200) Subject: register _check_file_measurement() method X-Git-Tag: 5.0.1~290 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=65cbe29cbc0834d6452f97e777851f0e231d6df9;p=thirdparty%2Fstrongswan.git register _check_file_measurement() method --- diff --git a/src/libpts/pts/pts_database.c b/src/libpts/pts/pts_database.c index 97de8190bb..1c1812a44d 100644 --- a/src/libpts/pts/pts_database.c +++ b/src/libpts/pts/pts_database.c @@ -39,38 +39,6 @@ struct private_pts_database_t { }; -METHOD(pts_database_t, check_file_measurement, status_t, - private_pts_database_t *this, char *product, pts_meas_algorithms_t algo, - chunk_t measurement, char *filename) -{ - enumerator_t *e; - chunk_t hash; - status_t status; - - e = this->db->query(this->db, - "SELECT fh.hash FROM file_hashes AS fh" - "JOIN files AS f ON f.id = fh.file" - "JOIN products AS p ON p.id = fh.product " - "WHERE p.product = ? AND f.file = ? AND fh.algo = ?", - DB_TEXT, product, DB_TEXT, filename, DB_INT, algo, DB_BLOB); - if (!e) - { - return FAILED; - } - if (e->enumerate(e, &hash)) - { - status = chunk_equals(measurement, hash) ? - SUCCESS : VERIFY_ERROR; - } - else - { - status = NOT_FOUND; - } - e->destroy(e); - - return status; -} - METHOD(pts_database_t, create_file_meas_enumerator, enumerator_t*, private_pts_database_t *this, char *product) { @@ -153,6 +121,38 @@ METHOD(pts_database_t, check_aik_keyid, status_t, return SUCCESS; } +METHOD(pts_database_t, check_file_measurement, status_t, + private_pts_database_t *this, char *product, pts_meas_algorithms_t algo, + chunk_t measurement, char *filename) +{ + enumerator_t *e; + chunk_t hash; + status_t status; + + e = this->db->query(this->db, + "SELECT fh.hash FROM file_hashes AS fh" + "JOIN files AS f ON f.id = fh.file" + "JOIN products AS p ON p.id = fh.product " + "WHERE p.product = ? AND f.file = ? AND fh.algo = ?", + DB_TEXT, product, DB_TEXT, filename, DB_INT, algo, DB_BLOB); + if (!e) + { + return FAILED; + } + if (e->enumerate(e, &hash)) + { + status = chunk_equals(measurement, hash) ? + SUCCESS : VERIFY_ERROR; + } + else + { + status = NOT_FOUND; + } + e->destroy(e); + + return status; +} + METHOD(pts_database_t, create_comp_evid_enumerator, enumerator_t*, private_pts_database_t *this, int kid) { @@ -322,6 +322,7 @@ pts_database_t *pts_database_create(char *uri) .create_comp_evid_enumerator = _create_comp_evid_enumerator, .create_file_hash_enumerator = _create_file_hash_enumerator, .check_aik_keyid = _check_aik_keyid, + .check_file_measurement = _check_file_measurement, .check_comp_measurement = _check_comp_measurement, .insert_comp_measurement = _insert_comp_measurement, .delete_comp_measurements = _delete_comp_measurements, diff --git a/src/libpts/pts/pts_database.h b/src/libpts/pts/pts_database.h index 94acd3339b..649ef0e31f 100644 --- a/src/libpts/pts/pts_database.h +++ b/src/libpts/pts/pts_database.h @@ -33,19 +33,6 @@ typedef struct pts_database_t pts_database_t; */ struct pts_database_t { - /** - * Get files/directories to be measured by PTS - * - * @param product Software product (os, vpn client, etc.) - * @param algo File measurement hash algorithm used - * @param measurement File measurement hash - * @param filename Optional name of the file to be checked - * @return Status - */ - status_t (*check_file_measurement)(pts_database_t *this, char *product, - pts_meas_algorithms_t algo, - chunk_t measurement, char *filename); - /** * Get files/directories to be measured by PTS * @@ -94,6 +81,19 @@ struct pts_database_t { */ enumerator_t* (*create_comp_evid_enumerator)(pts_database_t *this, int kid); + /** + * Check PTS file measurement against reference stored in database + * + * @param product Software product (os, vpn client, etc.) + * @param algo File measurement hash algorithm used + * @param measurement File measurement hash + * @param filename Optional name of the file to be checked + * @return Status + */ + status_t (*check_file_measurement)(pts_database_t *this, char *product, + pts_meas_algorithms_t algo, + chunk_t measurement, char *filename); + /** * Check a functional component measurement against value stored in database *