From 0e4b6b500f61e93911f629f1e4549e39ea9f083f Mon Sep 17 00:00:00 2001 From: Andreas Steffen Date: Thu, 1 Sep 2011 16:27:18 +0200 Subject: [PATCH] fixed measurement of directory contents --- src/libimcv/plugins/imv_attestation/imv_attestation.c | 4 ++-- src/libimcv/tcg/pts/pts.c | 11 +++++------ src/libimcv/tcg/tcg_pts_attr_file_meas.c | 6 ++++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/libimcv/plugins/imv_attestation/imv_attestation.c b/src/libimcv/plugins/imv_attestation/imv_attestation.c index 619c97c2e..ceb4b89be 100644 --- a/src/libimcv/plugins/imv_attestation/imv_attestation.c +++ b/src/libimcv/plugins/imv_attestation/imv_attestation.c @@ -454,14 +454,14 @@ TNC_Result TNC_IMV_ReceiveMessage(TNC_IMVID imv_id, if (!e) { DBG1(DBG_IMV, " database enumerator failed"); - break; + continue; } if (!e->enumerate(e, &db_measurement)) { DBG1(DBG_IMV, " measurement for '%s' not found" " in database", filename); e->destroy(e); - break; + continue; } if (chunk_equals(db_measurement, measurement)) { diff --git a/src/libimcv/tcg/pts/pts.c b/src/libimcv/tcg/pts/pts.c index bd3892214..0f055b3a3 100644 --- a/src/libimcv/tcg/pts/pts.c +++ b/src/libimcv/tcg/pts/pts.c @@ -606,8 +606,7 @@ static char* get_filename(char *pathname) } METHOD(pts_t, do_measurements, pts_file_meas_t*, - private_pts_t *this, u_int16_t request_id, char *pathname, - bool directory_flag) + private_pts_t *this, u_int16_t request_id, char *pathname, bool is_directory) { hasher_t *hasher; hash_algorithm_t hash_alg; @@ -630,7 +629,7 @@ METHOD(pts_t, do_measurements, pts_file_meas_t*, /* Link the hash to the measurement and set the measurement length */ measurement = chunk_create(hash, hasher->get_hash_size(hasher)); - if (directory_flag) + if (is_directory) { enumerator_t *enumerator; char *rel_name, *abs_name; @@ -647,7 +646,8 @@ METHOD(pts_t, do_measurements, pts_file_meas_t*, } while (enumerator->enumerate(enumerator, &rel_name, &abs_name, &st)) { - if (S_ISDIR(st.st_mode) && *rel_name != '.') + /* measure regular files only */ + if (S_ISREG(st.st_mode) && *rel_name != '.') { if (!hash_file(hasher, abs_name, hash)) { @@ -656,8 +656,7 @@ METHOD(pts_t, do_measurements, pts_file_meas_t*, measurements->destroy(measurements); return NULL; } - DBG2(DBG_IMC, " %#B for '%s'", - &measurement, rel_name); + DBG2(DBG_IMC, " %#B for '%s'", &measurement, rel_name); measurements->add(measurements, rel_name, measurement); } } diff --git a/src/libimcv/tcg/tcg_pts_attr_file_meas.c b/src/libimcv/tcg/tcg_pts_attr_file_meas.c index d2fcb548f..b265ca10b 100644 --- a/src/libimcv/tcg/tcg_pts_attr_file_meas.c +++ b/src/libimcv/tcg/tcg_pts_attr_file_meas.c @@ -156,6 +156,12 @@ METHOD(pa_tnc_attr_t, build, void, } enumerator->destroy(enumerator); + if (first) + { + /* no attached measurements */ + writer->write_uint16(writer, 0); + } + this->value = chunk_clone(writer->get_buf(writer)); writer->destroy(writer); }