aboutsummaryrefslogtreecommitdiffstats
path: root/src/libpts/tcg
diff options
context:
space:
mode:
authorSansar Choinyambuu <schoinya@hsr.ch>2011-09-14 15:41:57 +0200
committerAndreas Steffen <andreas.steffen@strongswan.org>2011-11-28 14:28:00 +0100
commit3e951334a2d6fdceed237583cc8a2c6f77670059 (patch)
tree5fcc729e212766b15b2df579ee7ff6b134d1edff /src/libpts/tcg
parentd22716509ab943e35f929abbcad082a6ea67d598 (diff)
downloadstrongswan-3e951334a2d6fdceed237583cc8a2c6f77670059.tar.bz2
strongswan-3e951334a2d6fdceed237583cc8a2c6f77670059.tar.xz
Implemented handling of File Metadata
Diffstat (limited to 'src/libpts/tcg')
-rw-r--r--src/libpts/tcg/tcg_attr.c8
-rw-r--r--src/libpts/tcg/tcg_pts_attr_req_file_meta.c6
-rw-r--r--src/libpts/tcg/tcg_pts_attr_unix_file_meta.c67
3 files changed, 42 insertions, 39 deletions
diff --git a/src/libpts/tcg/tcg_attr.c b/src/libpts/tcg/tcg_attr.c
index 51acb6792..ed3c961c0 100644
--- a/src/libpts/tcg/tcg_attr.c
+++ b/src/libpts/tcg/tcg_attr.c
@@ -25,6 +25,8 @@
#include "tcg/tcg_pts_attr_simple_evid_final.h"
#include "tcg/tcg_pts_attr_req_file_meas.h"
#include "tcg/tcg_pts_attr_file_meas.h"
+#include "tcg/tcg_pts_attr_req_file_meta.h"
+#include "tcg/tcg_pts_attr_unix_file_meta.h"
ENUM_BEGIN(tcg_attr_names, TCG_PTS_REQ_FUNCT_COMP_EVID,
TCG_PTS_REQ_FUNCT_COMP_EVID,
@@ -178,6 +180,10 @@ pa_tnc_attr_t* tcg_attr_create_from_data(u_int32_t type, chunk_t value)
return tcg_pts_attr_req_file_meas_create_from_data(value);
case TCG_PTS_FILE_MEAS:
return tcg_pts_attr_file_meas_create_from_data(value);
+ case TCG_PTS_REQ_FILE_META:
+ return tcg_pts_attr_req_file_meta_create_from_data(value);
+ case TCG_PTS_UNIX_FILE_META:
+ return tcg_pts_attr_unix_file_meta_create_from_data(value);
case TCG_PTS_DH_NONCE_PARAMS_REQ:
case TCG_PTS_DH_NONCE_PARAMS_RESP:
case TCG_PTS_DH_NONCE_FINISH:
@@ -186,9 +192,7 @@ pa_tnc_attr_t* tcg_attr_create_from_data(u_int32_t type, chunk_t value)
case TCG_PTS_UPDATE_TEMPL_REF_MANI:
case TCG_PTS_VERIFICATION_RESULT:
case TCG_PTS_INTEG_REPORT:
- case TCG_PTS_REQ_FILE_META:
case TCG_PTS_WIN_FILE_META:
- case TCG_PTS_UNIX_FILE_META:
case TCG_PTS_REQ_REGISTRY_VALUE:
case TCG_PTS_REGISTRY_VALUE:
case TCG_PTS_REQ_INTEG_MEAS_LOG:
diff --git a/src/libpts/tcg/tcg_pts_attr_req_file_meta.c b/src/libpts/tcg/tcg_pts_attr_req_file_meta.c
index f42903e03..5c7b9fe1a 100644
--- a/src/libpts/tcg/tcg_pts_attr_req_file_meta.c
+++ b/src/libpts/tcg/tcg_pts_attr_req_file_meta.c
@@ -188,7 +188,7 @@ METHOD(tcg_pts_attr_req_file_meta_t, get_directory_flag, bool,
return this->directory_flag;
}
-METHOD(tcg_pts_attr_req_file_meta_t, get_delimiter, u_int32_t,
+METHOD(tcg_pts_attr_req_file_meta_t, get_delimiter, u_int8_t,
private_tcg_pts_attr_req_file_meta_t *this)
{
return this->delimiter;
@@ -203,7 +203,7 @@ METHOD(tcg_pts_attr_req_file_meta_t, get_pathname, char*,
/**
* Described in header.
*/
-pa_tnc_attr_t *tcg_pts_attr_req_file_meas_create(bool directory_flag,
+pa_tnc_attr_t *tcg_pts_attr_req_file_meta_create(bool directory_flag,
u_int8_t delimiter,
char *pathname)
{
@@ -239,7 +239,7 @@ pa_tnc_attr_t *tcg_pts_attr_req_file_meas_create(bool directory_flag,
/**
* Described in header.
*/
-pa_tnc_attr_t *tcg_pts_attr_req_file_meas_create_from_data(chunk_t data)
+pa_tnc_attr_t *tcg_pts_attr_req_file_meta_create_from_data(chunk_t data)
{
private_tcg_pts_attr_req_file_meta_t *this;
diff --git a/src/libpts/tcg/tcg_pts_attr_unix_file_meta.c b/src/libpts/tcg/tcg_pts_attr_unix_file_meta.c
index 0f644fdf9..fbc2e9d81 100644
--- a/src/libpts/tcg/tcg_pts_attr_unix_file_meta.c
+++ b/src/libpts/tcg/tcg_pts_attr_unix_file_meta.c
@@ -140,16 +140,8 @@ METHOD(pa_tnc_attr_t, build, void,
{
bio_writer_t *writer;
enumerator_t *enumerator;
+ pts_file_metadata_t *entry;
u_int64_t number_of_files;
- char *filename;
- u_int16_t meta_length;
- pts_file_type_t type;
- u_int64_t filesize;
- time_t create_time;
- time_t last_modify_time;
- time_t last_access_time;
- u_int64_t owner_id;
- u_int64_t group_id;
number_of_files = this->metadata->get_file_count(this->metadata);
writer = bio_writer_create(PTS_FILE_META_SIZE);
@@ -159,33 +151,27 @@ METHOD(pa_tnc_attr_t, build, void,
writer->write_uint32(writer, number_of_files & 0xffffffff);
enumerator = this->metadata->create_enumerator(this->metadata);
- while (enumerator->enumerate(enumerator, &filename, &meta_length, &type,
- &filesize, &filesize, &create_time, &last_modify_time, &last_access_time,
- &owner_id, &group_id))
+ while (enumerator->enumerate(enumerator, &entry))
{
- u_int64_t create_time64 = (u_int64_t)create_time;
- u_int64_t modify_time64 = (u_int64_t)last_modify_time;
- u_int64_t access_time64 = (u_int64_t)last_access_time;
-
- writer->write_uint16(writer, PTS_FILE_METADATA_SIZE + strlen(filename));
- writer->write_uint8 (writer, type);
+ writer->write_uint16(writer, PTS_FILE_METADATA_SIZE + strlen(entry->filename));
+ writer->write_uint8 (writer, entry->type);
writer->write_uint8 (writer, PTS_FILE_MEAS_RESERVED);
/* Write the 64 bit integer fields as two 32 bit parts */
- writer->write_uint32(writer, filesize >> 32);
- writer->write_uint32(writer, filesize & 0xffffffff);
- writer->write_uint32(writer, create_time64 >> 32);
- writer->write_uint32(writer, create_time64 & 0xffffffff);
- writer->write_uint32(writer, modify_time64 >> 32);
- writer->write_uint32(writer, modify_time64 & 0xffffffff);
- writer->write_uint32(writer, access_time64 >> 32);
- writer->write_uint32(writer, access_time64 & 0xffffffff);
- writer->write_uint32(writer, owner_id >> 32);
- writer->write_uint32(writer, owner_id & 0xffffffff);
- writer->write_uint32(writer, group_id >> 32);
- writer->write_uint32(writer, group_id & 0xffffffff);
+ writer->write_uint32(writer, entry->filesize >> 32);
+ writer->write_uint32(writer, entry->filesize & 0xffffffff);
+ writer->write_uint32(writer, ((u_int64_t)entry->create_time) >> 32);
+ writer->write_uint32(writer, ((u_int64_t)entry->create_time) & 0xffffffff);
+ writer->write_uint32(writer, ((u_int64_t)entry->last_modify_time) >> 32);
+ writer->write_uint32(writer, ((u_int64_t)entry->last_modify_time) & 0xffffffff);
+ writer->write_uint32(writer, ((u_int64_t)entry->last_access_time) >> 32);
+ writer->write_uint32(writer, ((u_int64_t)entry->last_access_time) & 0xffffffff);
+ writer->write_uint32(writer, entry->owner_id >> 32);
+ writer->write_uint32(writer, entry->owner_id & 0xffffffff);
+ writer->write_uint32(writer, entry->group_id >> 32);
+ writer->write_uint32(writer, entry->group_id & 0xffffffff);
- writer->write_data (writer, chunk_create(filename, strlen(filename)));
+ writer->write_data (writer, chunk_create(entry->filename, strlen(entry->filename)));
}
enumerator->destroy(enumerator);
@@ -197,6 +183,8 @@ METHOD(pa_tnc_attr_t, process, status_t,
private_tcg_pts_attr_file_meta_t *this, u_int32_t *offset)
{
bio_reader_t *reader;
+ pts_file_metadata_t *entry;
+
int number_of_files;
u_int32_t number_of_files32;
@@ -349,11 +337,22 @@ METHOD(pa_tnc_attr_t, process, status_t,
goto end;
}
- len = min(filename.len, BUF_LEN-1);
+ len = min(filename.len, BUF_LEN - 1);
memcpy(buf, filename.ptr, len);
buf[len] = '\0';
- this->metadata->add(this->metadata, buf, type, filesize, create_time_t,
- modify_time_t, access_time_t, owner_id, group_id);
+
+ entry = malloc_thing(pts_file_metadata_t);
+ entry->filename = strdup(buf);
+ entry->meta_length = PTS_FILE_METADATA_SIZE + strlen(entry->filename);
+ entry->type = type;
+ entry->filesize = filesize;
+ entry->create_time = create_time_t;
+ entry->last_modify_time = modify_time_t;
+ entry->last_access_time = access_time_t;
+ entry->owner_id = owner_id;
+ entry->group_id = group_id;
+
+ this->metadata->add(this->metadata, entry);
}
status = SUCCESS;