Always return a result string for a processed workitem

This commit is contained in:
Andreas Steffen
2013-07-04 22:55:58 +02:00
parent 7658b399b7
commit 69c4e34859
3 changed files with 25 additions and 12 deletions
+8 -6
View File
@@ -642,7 +642,7 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
{ {
TNC_IMV_Evaluation_Result eval; TNC_IMV_Evaluation_Result eval;
TNC_IMV_Action_Recommendation rec; TNC_IMV_Action_Recommendation rec;
char buf[BUF_LEN], *result_str; char result_str[BUF_LEN];
bool fail; bool fail;
enumerator = session->create_workitem_enumerator(session); enumerator = session->create_workitem_enumerator(session);
@@ -670,12 +670,11 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
fail = count_update || count_blacklist; fail = count_update || count_blacklist;
eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR : eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR :
TNC_IMV_EVALUATION_RESULT_COMPLIANT; TNC_IMV_EVALUATION_RESULT_COMPLIANT;
snprintf(buf, BUF_LEN, "processed %d packages: " snprintf(result_str, BUF_LEN, "processed %d packages: "
"%d not updated, %d blacklisted, %d ok, " "%d not updated, %d blacklisted, %d ok, "
"%d not found", "%d not found",
count, count_update, count_blacklist, count_ok, count, count_update, count_blacklist, count_ok,
count - count_update - count_blacklist - count_ok); count - count_update - count_blacklist - count_ok);
result_str = buf;
break; break;
} }
case IMV_WORKITEM_UNKNOWN_SOURCE: case IMV_WORKITEM_UNKNOWN_SOURCE:
@@ -687,7 +686,8 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
OS_SETTINGS_UNKNOWN_SOURCE; OS_SETTINGS_UNKNOWN_SOURCE;
eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR : eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR :
TNC_IMV_EVALUATION_RESULT_COMPLIANT; TNC_IMV_EVALUATION_RESULT_COMPLIANT;
result_str = fail ? "unknown sources enabled" : ""; snprintf(result_str, BUF_LEN, "unknown sources%s enabled",
fail ? "" : " not");
break; break;
case IMV_WORKITEM_FORWARDING: case IMV_WORKITEM_FORWARDING:
if (!(received & IMV_OS_ATTR_FORWARDING_ENABLED)) if (!(received & IMV_OS_ATTR_FORWARDING_ENABLED))
@@ -698,7 +698,8 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
OS_SETTINGS_FWD_ENABLED; OS_SETTINGS_FWD_ENABLED;
eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MAJOR : eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MAJOR :
TNC_IMV_EVALUATION_RESULT_COMPLIANT; TNC_IMV_EVALUATION_RESULT_COMPLIANT;
result_str = fail ? "forwarding enabled" : ""; snprintf(result_str, BUF_LEN, "forwarding%s enabled",
fail ? "" : " not");
break; break;
case IMV_WORKITEM_DEFAULT_PWD: case IMV_WORKITEM_DEFAULT_PWD:
if (!(received & IMV_OS_ATTR_FACTORY_DEFAULT_PWD_ENABLED)) if (!(received & IMV_OS_ATTR_FACTORY_DEFAULT_PWD_ENABLED))
@@ -709,7 +710,8 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
OS_SETTINGS_DEFAULT_PWD_ENABLED; OS_SETTINGS_DEFAULT_PWD_ENABLED;
eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MAJOR : eval = fail ? TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MAJOR :
TNC_IMV_EVALUATION_RESULT_COMPLIANT; TNC_IMV_EVALUATION_RESULT_COMPLIANT;
result_str = fail ? "default password enabled" : ""; snprintf(result_str, BUF_LEN, "factory default password%s enabled",
fail ? "" : " not");
break; break;
default: default:
continue; continue;
@@ -385,15 +385,19 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
{ {
TNC_IMV_Action_Recommendation rec; TNC_IMV_Action_Recommendation rec;
TNC_IMV_Evaluation_Result eval; TNC_IMV_Evaluation_Result eval;
char result_str[BUF_LEN];
DBG2(DBG_IMV, "IMV %d requests metadata for %s '%s'", DBG2(DBG_IMV, "IMV %d requests metadata for %s '%s'",
imv_id, is_dir ? "directory" : "file", pathname); imv_id, is_dir ? "directory" : "file", pathname);
/* currently just fire and forget metadata requests */
attr = tcg_pts_attr_req_file_meta_create(is_dir, attr = tcg_pts_attr_req_file_meta_create(is_dir,
delimiter, pathname); delimiter, pathname);
/* currently just fire and forget metadata requests */ snprintf(result_str, BUF_LEN, "%s metadata requested",
is_dir ? "directory" : "file");
eval = TNC_IMV_EVALUATION_RESULT_COMPLIANT; eval = TNC_IMV_EVALUATION_RESULT_COMPLIANT;
session->remove_workitem(session, enumerator); session->remove_workitem(session, enumerator);
rec = workitem->set_result(workitem, "", eval); rec = workitem->set_result(workitem, result_str, eval);
state->update_recommendation(state, rec, eval); state->update_recommendation(state, rec, eval);
imcv_db->finalize_workitem(imcv_db, workitem); imcv_db->finalize_workitem(imcv_db, workitem);
workitem->destroy(workitem); workitem->destroy(workitem);
@@ -204,8 +204,8 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
imv_session_t *session; imv_session_t *session;
imv_workitem_t *workitem, *found = NULL; imv_workitem_t *workitem, *found = NULL;
imv_workitem_type_t type; imv_workitem_type_t type;
char *platform_info; char result_str[BUF_LEN], *platform_info;
bool is_dir; bool is_dir, correct;
enumerator_t *enumerator; enumerator_t *enumerator;
eval = TNC_IMV_EVALUATION_RESULT_COMPLIANT; eval = TNC_IMV_EVALUATION_RESULT_COMPLIANT;
@@ -270,7 +270,8 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
eval = TNC_IMV_EVALUATION_RESULT_ERROR; eval = TNC_IMV_EVALUATION_RESULT_ERROR;
break; break;
} }
if (!measurements->verify(measurements, e, is_dir)) correct = measurements->verify(measurements, e, is_dir);
if (!correct)
{ {
attestation_state->set_measurement_error( attestation_state->set_measurement_error(
attestation_state, attestation_state,
@@ -278,6 +279,10 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
eval = TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR; eval = TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR;
} }
e->destroy(e); e->destroy(e);
snprintf(result_str, BUF_LEN, "%s measurement%s correct",
is_dir ? "directory" : "file",
correct ? "" : " not");
break; break;
} }
case IMV_WORKITEM_FILE_REF_MEAS: case IMV_WORKITEM_FILE_REF_MEAS:
@@ -298,6 +303,8 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
} }
} }
e->destroy(e); e->destroy(e);
snprintf(result_str, BUF_LEN, "%s reference measurement "
"successful", is_dir ? "directory" : "file");
break; break;
} }
default: default:
@@ -306,7 +313,7 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
session->remove_workitem(session, enumerator); session->remove_workitem(session, enumerator);
enumerator->destroy(enumerator); enumerator->destroy(enumerator);
rec = found->set_result(found, "", eval); rec = found->set_result(found, result_str, eval);
state->update_recommendation(state, rec, eval); state->update_recommendation(state, rec, eval);
imcv_db->finalize_workitem(imcv_db, found); imcv_db->finalize_workitem(imcv_db, found);
found->destroy(found); found->destroy(found);