From: Andreas Steffen Date: Tue, 11 Jun 2013 20:15:27 +0000 (+0200) Subject: Store device with product ID X-Git-Tag: 5.1.0dr1~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=19ce03be73ace324518e37d08465438a82370305;p=thirdparty%2Fstrongswan.git Store device with product ID --- diff --git a/src/libimcv/imv/imv_database.c b/src/libimcv/imv/imv_database.c index 6c4ec071a2..2acb7f26d9 100644 --- a/src/libimcv/imv/imv_database.c +++ b/src/libimcv/imv/imv_database.c @@ -180,11 +180,22 @@ METHOD(imv_database_t, add_device, int, private_imv_database_t *this, imv_session_t *session, chunk_t device) { enumerator_t *e; - int did = 0; + int pid = 0, did = 0; + + /* get primary key of product from session */ + e = this->db->query(this->db, + "SELECT product FROM sessions WHERE id = ?", + DB_INT, session->get_session_id(session), DB_INT); + if (e) + { + e->enumerate(e, &pid); + e->destroy(e); + } /* get primary key of device identification if it exists */ e = this->db->query(this->db, - "SELECT id FROM devices WHERE value = ?", DB_BLOB, device, DB_INT); + "SELECT id FROM devices WHERE value = ? AND product = ?", + DB_BLOB, device, DB_INT, pid, DB_INT); if (e) { e->enumerate(e, &did); @@ -195,7 +206,8 @@ METHOD(imv_database_t, add_device, int, if (!did) { this->db->execute(this->db, &did, - "INSERT INTO devices (value) VALUES (?)", DB_BLOB, device); + "INSERT INTO devices (value, product) VALUES (?, ?)", + DB_BLOB, device, DB_INT, pid); } /* add device reference to session */ diff --git a/src/libimcv/plugins/imv_os/imv_os_agent.c b/src/libimcv/plugins/imv_os/imv_os_agent.c index 86692ed402..b22bf705ec 100644 --- a/src/libimcv/plugins/imv_os/imv_os_agent.c +++ b/src/libimcv/plugins/imv_os/imv_os_agent.c @@ -345,21 +345,13 @@ static TNC_Result receive_msg(private_imv_os_agent_t *this, imv_state_t *state, } case ITA_ATTR_DEVICE_ID: { - imv_session_t *session; - int device_id; chunk_t value; state->set_action_flags(state, IMV_OS_ATTR_DEVICE_ID); value = attr->get_value(attr); + os_state->set_device_id(os_state, value); DBG1(DBG_IMV, "device ID is %.*s", value.len, value.ptr); - - if (imcv_db) - { - session = state->get_session(state); - device_id = imcv_db->add_device(imcv_db, session, value); - os_state->set_device_id(os_state, device_id); - } break; } case ITA_ATTR_START_ANGEL: @@ -556,6 +548,9 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result, { if (imcv_db) { + imcv_db->add_device(imcv_db, session, + os_state->get_device_id(os_state)); + /* trigger the policy manager */ imcv_db->policy_script(imcv_db, session, TRUE); } diff --git a/src/libimcv/plugins/imv_os/imv_os_state.c b/src/libimcv/plugins/imv_os/imv_os_state.c index 4ab8a814c7..f6d904c3c8 100644 --- a/src/libimcv/plugins/imv_os/imv_os_state.c +++ b/src/libimcv/plugins/imv_os/imv_os_state.c @@ -140,9 +140,9 @@ struct private_imv_os_state_t { imv_remediation_string_t *remediation_string; /** - * Primary database key of device ID + * Dgevice ID */ - int device_id; + chunk_t device_id; /** * Number of processed packages @@ -511,6 +511,7 @@ METHOD(imv_state_t, destroy, void, free(this->name.ptr); free(this->version.ptr); free(this->ar_id_value.ptr); + free(this->device_id.ptr); free(this); } @@ -593,12 +594,12 @@ METHOD(imv_os_state_t, get_count, void, } METHOD(imv_os_state_t, set_device_id, void, - private_imv_os_state_t *this, int id) + private_imv_os_state_t *this, chunk_t id) { - this->device_id = id; + this->device_id = chunk_clone(id); } -METHOD(imv_os_state_t, get_device_id, int, +METHOD(imv_os_state_t, get_device_id, chunk_t, private_imv_os_state_t *this) { return this->device_id; diff --git a/src/libimcv/plugins/imv_os/imv_os_state.h b/src/libimcv/plugins/imv_os/imv_os_state.h index 3ff482b32d..97f6953199 100644 --- a/src/libimcv/plugins/imv_os/imv_os_state.h +++ b/src/libimcv/plugins/imv_os/imv_os_state.h @@ -123,16 +123,16 @@ struct imv_os_state_t { /** * Set device ID * - * @param device_id Device ID primary database key + * @param device_id Device ID */ - void (*set_device_id)(imv_os_state_t *this, int id); + void (*set_device_id)(imv_os_state_t *this, chunk_t id); /** * Get device ID * - * @return Device ID primary database key + * @return Device ID */ - int (*get_device_id)(imv_os_state_t *this); + chunk_t (*get_device_id)(imv_os_state_t *this); /** * Set OS settings diff --git a/src/libpts/plugins/imv_attestation/attest_db.c b/src/libpts/plugins/imv_attestation/attest_db.c index cb1220e726..005857fd40 100644 --- a/src/libpts/plugins/imv_attestation/attest_db.c +++ b/src/libpts/plugins/imv_attestation/attest_db.c @@ -833,13 +833,13 @@ METHOD(attest_db_t, list_devices, void, { if (id != last_id) { - printf("%4d: %.*s\n", id, (int)value.len, value.ptr); + printf("%4d: %.*s - %s\n", id, (int)value.len, value.ptr, + product); device_count++; last_id = id; } timestamp = tstamp; - printf("%4d: %T, %-20s", session_id, ×tamp, this->utc, - product); + printf("%4d: %T", session_id, ×tamp, this->utc); if (ar_id) { if (ar_id != last_ar_id)