aboutsummaryrefslogtreecommitdiffstats
path: root/src/libimcv/plugins/imv_os/imv_os.c
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2012-11-07 14:20:47 +0100
committerAndreas Steffen <andreas.steffen@strongswan.org>2012-11-07 14:20:47 +0100
commitf77d425da35a935d44c8d8ddfb048196ee3e806d (patch)
tree50cfbfa9e250af91abb7ba566f375de3521e603b /src/libimcv/plugins/imv_os/imv_os.c
parent538c13fe5c4edeca1ffad64e94992806e0c41e98 (diff)
downloadstrongswan-f77d425da35a935d44c8d8ddfb048196ee3e806d.tar.bz2
strongswan-f77d425da35a935d44c8d8ddfb048196ee3e806d.tar.xz
accumulate package counts over multiple attributes
Diffstat (limited to 'src/libimcv/plugins/imv_os/imv_os.c')
-rw-r--r--src/libimcv/plugins/imv_os/imv_os.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/libimcv/plugins/imv_os/imv_os.c b/src/libimcv/plugins/imv_os/imv_os.c
index 4d28fc67c..6d71678ff 100644
--- a/src/libimcv/plugins/imv_os/imv_os.c
+++ b/src/libimcv/plugins/imv_os/imv_os.c
@@ -150,6 +150,7 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
chunk_t os_name = chunk_empty;
chunk_t os_version = chunk_empty;
bool fatal_error = FALSE, assessment = FALSE;
+ int count, count_bad, count_ok;
os_state = (imv_os_state_t*)state;
@@ -273,22 +274,12 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
status = os_db->check_packages(os_db, os_state, e);
e->destroy(e);
- switch (status)
+ if (status == FAILED)
{
- case VERIFY_ERROR:
- state->set_recommendation(state,
- TNC_IMV_ACTION_RECOMMENDATION_ISOLATE,
- TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR);
- assessment = TRUE;
- break;
- case FAILED:
- state->set_recommendation(state,
+ state->set_recommendation(state,
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
TNC_IMV_EVALUATION_RESULT_ERROR);
- assessment = TRUE;
- break;
- default:
- break;
+ assessment = TRUE;
}
break;
}
@@ -401,8 +392,22 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
!os_state->get_package_request(os_state) &&
!os_state->get_angel_count(os_state))
{
- state->set_recommendation(state, TNC_IMV_ACTION_RECOMMENDATION_ALLOW,
- TNC_IMV_EVALUATION_RESULT_COMPLIANT);
+ os_state->get_count(os_state, &count, &count_bad, &count_ok);
+ DBG1(DBG_IMV, "processed %d packages: %d bad, %d ok, %d not found",
+ count, count_bad, count_ok, count - count_bad - count_ok);
+
+ if (count_bad)
+ {
+ state->set_recommendation(state,
+ TNC_IMV_ACTION_RECOMMENDATION_ISOLATE,
+ TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR);
+ }
+ else
+ {
+ state->set_recommendation(state,
+ TNC_IMV_ACTION_RECOMMENDATION_ALLOW,
+ TNC_IMV_EVALUATION_RESULT_COMPLIANT);
+ }
assessment = TRUE;
}