improved control when an attribute request is sent
This commit is contained in:
@@ -360,7 +360,9 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
out_msg->add_attribute(out_msg, attr);
|
out_msg->add_attribute(out_msg, attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fatal_error)
|
if (fatal_error ||
|
||||||
|
(os_state->get_attribute_request(os_state) &&
|
||||||
|
os_state->get_info(os_state, NULL, NULL, NULL) == NULL))
|
||||||
{
|
{
|
||||||
state->set_recommendation(state,
|
state->set_recommendation(state,
|
||||||
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
|
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
|
||||||
@@ -371,7 +373,8 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
/* If all Installed Packages attributes were received, go to assessment */
|
/* If all Installed Packages attributes were received, go to assessment */
|
||||||
if (!assessment &&
|
if (!assessment &&
|
||||||
!os_state->get_package_request(os_state) &&
|
!os_state->get_package_request(os_state) &&
|
||||||
!os_state->get_angel_count(os_state))
|
!os_state->get_angel_count(os_state) &&
|
||||||
|
os_state->get_info(os_state, NULL, NULL, NULL))
|
||||||
{
|
{
|
||||||
int device_id, count, count_update, count_blacklist, count_ok;
|
int device_id, count, count_update, count_blacklist, count_ok;
|
||||||
u_int os_settings;
|
u_int os_settings;
|
||||||
@@ -518,6 +521,8 @@ TNC_Result TNC_IMV_BatchEnding(TNC_IMVID imv_id,
|
|||||||
{
|
{
|
||||||
imv_state_t *state;
|
imv_state_t *state;
|
||||||
imv_os_state_t *os_state;
|
imv_os_state_t *os_state;
|
||||||
|
TNC_IMV_Action_Recommendation rec;
|
||||||
|
TNC_IMV_Evaluation_Result eval;
|
||||||
TNC_Result result = TNC_RESULT_SUCCESS;
|
TNC_Result result = TNC_RESULT_SUCCESS;
|
||||||
|
|
||||||
if (!imv_os)
|
if (!imv_os)
|
||||||
@@ -531,6 +536,18 @@ TNC_Result TNC_IMV_BatchEnding(TNC_IMVID imv_id,
|
|||||||
}
|
}
|
||||||
os_state = (imv_os_state_t*)state;
|
os_state = (imv_os_state_t*)state;
|
||||||
|
|
||||||
|
state->get_recommendation(state, &rec, &eval);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't send an attribute request if an evaluation is available
|
||||||
|
* or if an attribute request has already been sent
|
||||||
|
*/
|
||||||
|
if (eval != TNC_IMV_EVALUATION_RESULT_DONT_KNOW ||
|
||||||
|
os_state->get_attribute_request(os_state))
|
||||||
|
{
|
||||||
|
return TNC_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (os_state->get_info(os_state, NULL, NULL, NULL) == NULL)
|
if (os_state->get_info(os_state, NULL, NULL, NULL) == NULL)
|
||||||
{
|
{
|
||||||
imv_msg_t *out_msg;
|
imv_msg_t *out_msg;
|
||||||
@@ -548,6 +565,7 @@ TNC_Result TNC_IMV_BatchEnding(TNC_IMVID imv_id,
|
|||||||
attr_cast->add(attr_cast, PEN_IETF, IETF_ATTR_FORWARDING_ENABLED);
|
attr_cast->add(attr_cast, PEN_IETF, IETF_ATTR_FORWARDING_ENABLED);
|
||||||
attr_cast->add(attr_cast, PEN_IETF, IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED);
|
attr_cast->add(attr_cast, PEN_IETF, IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED);
|
||||||
out_msg->add_attribute(out_msg, attr);
|
out_msg->add_attribute(out_msg, attr);
|
||||||
|
os_state->set_attribute_request(os_state, TRUE);
|
||||||
|
|
||||||
/* send PA-TNC message with excl flag not set */
|
/* send PA-TNC message with excl flag not set */
|
||||||
result = out_msg->send(out_msg, FALSE);
|
result = out_msg->send(out_msg, FALSE);
|
||||||
|
|||||||
@@ -136,6 +136,11 @@ struct private_imv_os_state_t {
|
|||||||
*/
|
*/
|
||||||
int count_ok;
|
int count_ok;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attribute request sent - mandatory response expected
|
||||||
|
*/
|
||||||
|
bool attribute_request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OS Installed Package request sent - mandatory response expected
|
* OS Installed Package request sent - mandatory response expected
|
||||||
*/
|
*/
|
||||||
@@ -506,6 +511,18 @@ METHOD(imv_os_state_t, get_count, void,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(imv_os_state_t, set_attribute_request, void,
|
||||||
|
private_imv_os_state_t *this, bool set)
|
||||||
|
{
|
||||||
|
this->attribute_request = set;
|
||||||
|
}
|
||||||
|
|
||||||
|
METHOD(imv_os_state_t, get_attribute_request, bool,
|
||||||
|
private_imv_os_state_t *this)
|
||||||
|
{
|
||||||
|
return this->attribute_request;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(imv_os_state_t, set_package_request, void,
|
METHOD(imv_os_state_t, set_package_request, void,
|
||||||
private_imv_os_state_t *this, bool set)
|
private_imv_os_state_t *this, bool set)
|
||||||
{
|
{
|
||||||
@@ -597,6 +614,8 @@ imv_state_t *imv_os_state_create(TNC_ConnectionID connection_id)
|
|||||||
.get_info = _get_info,
|
.get_info = _get_info,
|
||||||
.set_count = _set_count,
|
.set_count = _set_count,
|
||||||
.get_count = _get_count,
|
.get_count = _get_count,
|
||||||
|
.set_attribute_request = _set_attribute_request,
|
||||||
|
.get_attribute_request = _get_attribute_request,
|
||||||
.set_package_request = _set_package_request,
|
.set_package_request = _set_package_request,
|
||||||
.get_package_request = _get_package_request,
|
.get_package_request = _get_package_request,
|
||||||
.set_device_id = _set_device_id,
|
.set_device_id = _set_device_id,
|
||||||
|
|||||||
@@ -87,6 +87,21 @@ struct imv_os_state_t {
|
|||||||
*/
|
*/
|
||||||
void (*get_count)(imv_os_state_t *this, int *count, int *count_update,
|
void (*get_count)(imv_os_state_t *this, int *count, int *count_update,
|
||||||
int *count_blacklist, int *count_ok);
|
int *count_blacklist, int *count_ok);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set/reset attribute request status
|
||||||
|
*
|
||||||
|
* @param set TRUE to set, FALSE to clear
|
||||||
|
*/
|
||||||
|
void (*set_attribute_request)(imv_os_state_t *this, bool set);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get attribute request status
|
||||||
|
*
|
||||||
|
* @return TRUE if set, FALSE if unset
|
||||||
|
*/
|
||||||
|
bool (*get_attribute_request)(imv_os_state_t *this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set/reset OS Installed Packages request status
|
* Set/reset OS Installed Packages request status
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user