add overall recommendation to session database entry
This commit is contained in:
@@ -189,6 +189,16 @@ METHOD(imv_database_t, add_device, int,
|
||||
return did;
|
||||
}
|
||||
|
||||
METHOD(imv_database_t, add_recommendation, void,
|
||||
private_imv_database_t *this, imv_session_t *session,
|
||||
TNC_IMV_Action_Recommendation rec)
|
||||
{
|
||||
/* add final recommendation to session */
|
||||
this->db->execute(this->db, NULL,
|
||||
"UPDATE sessions SET rec = ? WHERE id = ?",
|
||||
DB_INT, rec, DB_INT, session->get_session_id(session));
|
||||
}
|
||||
|
||||
METHOD(imv_database_t, policy_script, bool,
|
||||
private_imv_database_t *this, imv_session_t *session, bool start)
|
||||
{
|
||||
@@ -322,6 +332,7 @@ imv_database_t *imv_database_create(char *uri, char *script)
|
||||
.get_session = _get_session,
|
||||
.add_product = _add_product,
|
||||
.add_device = _add_device,
|
||||
.add_recommendation = _add_recommendation,
|
||||
.policy_script = _policy_script,
|
||||
.finalize_workitem = _finalize_workitem,
|
||||
.get_database = _get_database,
|
||||
|
||||
@@ -68,6 +68,15 @@ struct imv_database_t {
|
||||
int (*add_device)(imv_database_t *this, imv_session_t *session,
|
||||
chunk_t device);
|
||||
|
||||
/**
|
||||
* Add final recommendation to a session database entry
|
||||
*
|
||||
* @param session Session
|
||||
* @param rec Final recommendation
|
||||
*/
|
||||
void (*add_recommendation)(imv_database_t *this, imv_session_t *session,
|
||||
TNC_IMV_Action_Recommendation rec);
|
||||
|
||||
/**
|
||||
* Announce session start/stop to policy script
|
||||
*
|
||||
|
||||
@@ -63,7 +63,8 @@ CREATE TABLE sessions (
|
||||
connection INTEGER NOT NULL,
|
||||
identity INTEGER DEFAULT 0 REFERENCES identities(id),
|
||||
device INTEGER DEFAULT 0 REFERENCES devices(id),
|
||||
product INTEGER DEFAULT 0 REFERENCES products(id)
|
||||
product INTEGER DEFAULT 0 REFERENCES products(id),
|
||||
rec INTEGER DEFAULT 3
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS workitems;
|
||||
@@ -150,16 +151,6 @@ CREATE INDEX devices_value ON devices (
|
||||
value
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS device_infos;
|
||||
CREATE TABLE device_infos (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
session INTEGER NOT NULL REFERENCES sessions(id),
|
||||
count INTEGER DEFAULT 0,
|
||||
count_update INTEGER DEFAULT 0,
|
||||
count_blacklist INTEGER DEFAULT 0,
|
||||
flags INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS identities;
|
||||
CREATE TABLE identities (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
|
||||
@@ -119,6 +119,7 @@ TNC_Result TNC_IMV_NotifyConnectionChange(TNC_IMVID imv_id,
|
||||
TNC_ConnectionID connection_id,
|
||||
TNC_ConnectionState new_state)
|
||||
{
|
||||
TNC_IMV_Action_Recommendation rec;
|
||||
imv_state_t *state;
|
||||
imv_session_t *session;
|
||||
|
||||
@@ -133,15 +134,31 @@ TNC_Result TNC_IMV_NotifyConnectionChange(TNC_IMVID imv_id,
|
||||
state = imv_os_state_create(connection_id);
|
||||
return imv_os->create_state(imv_os, state);
|
||||
case TNC_CONNECTION_STATE_DELETE:
|
||||
return imv_os->delete_state(imv_os, connection_id);
|
||||
case TNC_CONNECTION_STATE_ACCESS_ALLOWED:
|
||||
case TNC_CONNECTION_STATE_ACCESS_ISOLATED:
|
||||
case TNC_CONNECTION_STATE_ACCESS_NONE:
|
||||
if (imcv_db && imv_os->get_state(imv_os, connection_id, &state))
|
||||
{
|
||||
switch (new_state)
|
||||
{
|
||||
case TNC_CONNECTION_STATE_ACCESS_ALLOWED:
|
||||
rec = TNC_IMV_ACTION_RECOMMENDATION_ALLOW;
|
||||
break;
|
||||
case TNC_CONNECTION_STATE_ACCESS_ISOLATED:
|
||||
rec = TNC_IMV_ACTION_RECOMMENDATION_ISOLATE;
|
||||
break;
|
||||
case TNC_CONNECTION_STATE_ACCESS_NONE:
|
||||
default:
|
||||
rec = TNC_IMV_ACTION_RECOMMENDATION_NO_ACCESS;
|
||||
}
|
||||
session = state->get_session(state);
|
||||
imcv_db->add_recommendation(imcv_db, session, rec);
|
||||
imcv_db->policy_script(imcv_db, session, FALSE);
|
||||
}
|
||||
return imv_os->delete_state(imv_os, connection_id);
|
||||
/* fall through to default state */
|
||||
default:
|
||||
return imv_os->change_state(imv_os, connection_id,
|
||||
new_state, NULL);
|
||||
return imv_os->change_state(imv_os, connection_id, new_state, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user