diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2012-11-07 14:20:47 +0100 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2012-11-07 14:20:47 +0100 |
commit | f77d425da35a935d44c8d8ddfb048196ee3e806d (patch) | |
tree | 50cfbfa9e250af91abb7ba566f375de3521e603b /src/libimcv/plugins/imv_os/imv_os.c | |
parent | 538c13fe5c4edeca1ffad64e94992806e0c41e98 (diff) | |
download | strongswan-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.c | 35 |
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; } |