aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2015-05-17 18:16:08 +0200
committerAndreas Steffen <andreas.steffen@strongswan.org>2015-08-18 21:25:38 +0200
commit981653a4372b4e2ebf3004cfd9e8f71fb1359ac8 (patch)
tree0d2273b879303c65e7d86b3b77a97a962311dcf4 /src
parent6a11c8a3f3c4a17432438a04542547947b06bc68 (diff)
downloadstrongswan-981653a4372b4e2ebf3004cfd9e8f71fb1359ac8.tar.bz2
strongswan-981653a4372b4e2ebf3004cfd9e8f71fb1359ac8.tar.xz
Defined generic non-nul terminated string PA-TNC attribute
Diffstat (limited to 'src')
-rw-r--r--src/libimcv/Makefile.am2
-rw-r--r--src/libimcv/generic/generic_attr_bool.c5
-rw-r--r--src/libimcv/generic/generic_attr_string.c (renamed from src/libimcv/ita/ita_attr_device_id.c)60
-rw-r--r--src/libimcv/generic/generic_attr_string.h (renamed from src/libimcv/ita/ita_attr_device_id.h)35
-rw-r--r--src/libimcv/ita/ita_attr.c5
-rw-r--r--src/libimcv/plugins/imc_os/imc_os.c5
-rw-r--r--src/libimcv/plugins/imv_attestation/imv_attestation_agent.c2
-rw-r--r--src/libimcv/plugins/imv_os/imv_os_agent.c2
-rw-r--r--src/libimcv/pwg/pwg_attr.c24
9 files changed, 81 insertions, 59 deletions
diff --git a/src/libimcv/Makefile.am b/src/libimcv/Makefile.am
index d2175a3b0..af2770ca3 100644
--- a/src/libimcv/Makefile.am
+++ b/src/libimcv/Makefile.am
@@ -37,6 +37,7 @@ libimcv_la_SOURCES = \
imv/imv_session_manager.h imv/imv_session_manager.c \
imv/imv_workitem.h imv/imv_workitem.c \
generic/generic_attr_bool.h generic/generic_attr_bool.c \
+ generic/generic_attr_string.h generic/generic_attr_string.c \
ietf/ietf_attr.h ietf/ietf_attr.c \
ietf/ietf_attr_assess_result.h ietf/ietf_attr_assess_result.c \
ietf/ietf_attr_attr_request.h ietf/ietf_attr_attr_request.c \
@@ -54,7 +55,6 @@ libimcv_la_SOURCES = \
ita/ita_attr_get_settings.h ita/ita_attr_get_settings.c \
ita/ita_attr_settings.h ita/ita_attr_settings.c \
ita/ita_attr_angel.h ita/ita_attr_angel.c \
- ita/ita_attr_device_id.h ita/ita_attr_device_id.c \
os_info/os_info.h os_info/os_info.c \
pa_tnc/pa_tnc_attr.h \
pa_tnc/pa_tnc_msg.h pa_tnc/pa_tnc_msg.c \
diff --git a/src/libimcv/generic/generic_attr_bool.c b/src/libimcv/generic/generic_attr_bool.c
index 589b5e4a8..eca077a6e 100644
--- a/src/libimcv/generic/generic_attr_bool.c
+++ b/src/libimcv/generic/generic_attr_bool.c
@@ -124,14 +124,15 @@ METHOD(pa_tnc_attr_t, process, status_t,
bio_reader_t *reader;
u_int32_t status;
- pa_attr_names = imcv_pa_tnc_attributes->get_names(imcv_pa_tnc_attributes,
- this->type.vendor_id);
*offset = 0;
if (this->value.len < this->length)
{
return NEED_MORE;
}
+ pa_attr_names = imcv_pa_tnc_attributes->get_names(imcv_pa_tnc_attributes,
+ this->type.vendor_id);
+
if (this->value.len != ATTR_BOOL_SIZE)
{
DBG1(DBG_TNC, "incorrect attribute size for %N/%N",
diff --git a/src/libimcv/ita/ita_attr_device_id.c b/src/libimcv/generic/generic_attr_string.c
index 232842695..e14e8d2aa 100644
--- a/src/libimcv/ita/ita_attr_device_id.c
+++ b/src/libimcv/generic/generic_attr_string.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2014 Andreas Steffen
+ * Copyright (C) 2013-2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
@@ -13,24 +13,23 @@
* for more details.
*/
-#include "ita_attr.h"
-#include "ita_attr_device_id.h"
+#include "generic_attr_string.h"
+#include <imcv.h>
#include <pen/pen.h>
-
#include <utils/debug.h>
-typedef struct private_ita_attr_device_id_t private_ita_attr_device_id_t;
+typedef struct private_generic_attr_string_t private_generic_attr_string_t;
/**
- * Private data of an ita_attr_device_id_t object.
+ * Private data of an generic_attr_string_t object.
*/
-struct private_ita_attr_device_id_t {
+struct private_generic_attr_string_t {
/**
- * Public members of ita_attr_device_id_t
+ * Public members of generic_attr_string_t
*/
- ita_attr_device_id_t public;
+ generic_attr_string_t public;
/**
* Vendor-specific attribute type
@@ -59,62 +58,76 @@ struct private_ita_attr_device_id_t {
};
METHOD(pa_tnc_attr_t, get_type, pen_type_t,
- private_ita_attr_device_id_t *this)
+ private_generic_attr_string_t *this)
{
return this->type;
}
METHOD(pa_tnc_attr_t, get_value, chunk_t,
- private_ita_attr_device_id_t *this)
+ private_generic_attr_string_t *this)
{
return this->value;
}
METHOD(pa_tnc_attr_t, get_noskip_flag, bool,
- private_ita_attr_device_id_t *this)
+ private_generic_attr_string_t *this)
{
return this->noskip_flag;
}
METHOD(pa_tnc_attr_t, set_noskip_flag,void,
- private_ita_attr_device_id_t *this, bool noskip)
+ private_generic_attr_string_t *this, bool noskip)
{
this->noskip_flag = noskip;
}
METHOD(pa_tnc_attr_t, build, void,
- private_ita_attr_device_id_t *this)
+ private_generic_attr_string_t *this)
{
return;
}
METHOD(pa_tnc_attr_t, process, status_t,
- private_ita_attr_device_id_t *this, u_int32_t *offset)
+ private_generic_attr_string_t *this, u_int32_t *offset)
{
+ enum_name_t *pa_attr_names;
+ u_char *pos;
*offset = 0;
if (this->value.len < this->length)
{
return NEED_MORE;
}
+ pa_attr_names = imcv_pa_tnc_attributes->get_names(imcv_pa_tnc_attributes,
+ this->type.vendor_id);
+
+ pos = memchr(this->value.ptr, '\0', this->value.len);
+ if (pos)
+ {
+ DBG1(DBG_TNC, "nul termination in %N/%N string attribute",
+ pen_names, this->type.vendor_id, pa_attr_names, this->type.type);
+ *offset = pos - this->value.ptr;
+ return FAILED;
+ }
+
return SUCCESS;
}
METHOD(pa_tnc_attr_t, add_segment, void,
- private_ita_attr_device_id_t *this, chunk_t segment)
+ private_generic_attr_string_t *this, chunk_t segment)
{
this->value = chunk_cat("mc", this->value, segment);
}
METHOD(pa_tnc_attr_t, get_ref, pa_tnc_attr_t*,
- private_ita_attr_device_id_t *this)
+ private_generic_attr_string_t *this)
{
ref_get(&this->ref);
return &this->public.pa_tnc_attribute;
}
METHOD(pa_tnc_attr_t, destroy, void,
- private_ita_attr_device_id_t *this)
+ private_generic_attr_string_t *this)
{
if (ref_put(&this->ref))
{
@@ -126,9 +139,10 @@ METHOD(pa_tnc_attr_t, destroy, void,
/**
* Described in header.
*/
-pa_tnc_attr_t *ita_attr_device_id_create_from_data(size_t length, chunk_t value)
+pa_tnc_attr_t *generic_attr_string_create_from_data(size_t length,
+ chunk_t value, pen_type_t type)
{
- private_ita_attr_device_id_t *this;
+ private_generic_attr_string_t *this;
INIT(this,
.public = {
@@ -144,7 +158,7 @@ pa_tnc_attr_t *ita_attr_device_id_create_from_data(size_t length, chunk_t value)
.destroy = _destroy,
},
},
- .type = { PEN_ITA, ITA_ATTR_DEVICE_ID },
+ .type = type,
.length = length,
.value = chunk_clone(value),
.ref = 1,
@@ -156,8 +170,8 @@ pa_tnc_attr_t *ita_attr_device_id_create_from_data(size_t length, chunk_t value)
/**
* Described in header.
*/
-pa_tnc_attr_t *ita_attr_device_id_create(chunk_t value)
+pa_tnc_attr_t *generic_attr_string_create(chunk_t value, pen_type_t type)
{
- return ita_attr_device_id_create_from_data(value.len, value);
+ return generic_attr_string_create_from_data(value.len, value, type);
}
diff --git a/src/libimcv/ita/ita_attr_device_id.h b/src/libimcv/generic/generic_attr_string.h
index 94bb778c0..c7210297d 100644
--- a/src/libimcv/ita/ita_attr_device_id.h
+++ b/src/libimcv/generic/generic_attr_string.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2014 Andreas Steffen
+ * Copyright (C) 2015 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
@@ -14,43 +14,46 @@
*/
/**
- * @defgroup ita_attr_device_id ita_attr_device_id
- * @{ @ingroup ita_attr
+ * @defgroup generic_attr_string generic_attr_string
+ * @{ @ingroup generic_attr
*/
-#ifndef ITA_ATTR_DEVICE_ID_H_
-#define ITA_ATTR_DEVICE_ID_H_
+#ifndef GENERIC_ATTR_STRING_H_
+#define GENERIC_ATTR_STRING_H_
-typedef struct ita_attr_device_id_t ita_attr_device_id_t;
+typedef struct generic_attr_string_t generic_attr_string_t;
+#include <pen/pen.h>
#include "pa_tnc/pa_tnc_attr.h"
/**
- * Class implementing the ITA Device ID PA-TNC attribute.
- *
+ * Class implementing a generic PA-TNC attribute containing a non-nul
+ * terminated string
*/
-struct ita_attr_device_id_t {
+struct generic_attr_string_t {
/**
* Public PA-TNC attribute interface
*/
pa_tnc_attr_t pa_tnc_attribute;
-
};
/**
- * Creates an ita_attr_device_id_t object
+ * Creates a generic_attr_string_t object
*
- * @param value ITA Device ID attribute value
+ * @param string Non-nul terminated string
+ * @param type Vendor ID / Attribute Type
*/
-pa_tnc_attr_t* ita_attr_device_id_create(chunk_t value);
+pa_tnc_attr_t* generic_attr_string_create(chunk_t string, pen_type_t type);
/**
- * Creates an ita_attr_device_id_t object from received data
+ * Creates an generic_attr_string_t object from received data
*
* @param length Total length of attribute value
* @param value Unparsed attribute value (might be a segment)
+ * @param type Vendor ID / Attribute Type
*/
-pa_tnc_attr_t* ita_attr_device_id_create_from_data(size_t length, chunk_t value);
+pa_tnc_attr_t* generic_attr_string_create_from_data(size_t length,
+ chunk_t value, pen_type_t type);
-#endif /** ITA_ATTR_DEVICE_ID_H_ @}*/
+#endif /** GENERIC_ATTR_STRING_H_ @}*/
diff --git a/src/libimcv/ita/ita_attr.c b/src/libimcv/ita/ita_attr.c
index 9d7706dba..35c882c37 100644
--- a/src/libimcv/ita/ita_attr.c
+++ b/src/libimcv/ita/ita_attr.c
@@ -19,7 +19,7 @@
#include "ita/ita_attr_get_settings.h"
#include "ita/ita_attr_settings.h"
#include "ita/ita_attr_angel.h"
-#include "ita/ita_attr_device_id.h"
+#include "generic/generic_attr_string.h"
ENUM(ita_attr_names, ITA_ATTR_COMMAND, ITA_ATTR_DEVICE_ID,
"Command",
@@ -53,7 +53,8 @@ pa_tnc_attr_t* ita_attr_create_from_data(u_int32_t type, size_t length,
case ITA_ATTR_STOP_ANGEL:
return ita_attr_angel_create_from_data(FALSE);
case ITA_ATTR_DEVICE_ID:
- return ita_attr_device_id_create_from_data(length, value);
+ return generic_attr_string_create_from_data(length, value,
+ pen_type_create(PEN_ITA, type));
default:
return NULL;
}
diff --git a/src/libimcv/plugins/imc_os/imc_os.c b/src/libimcv/plugins/imc_os/imc_os.c
index 1cb3848c4..86cf06dbd 100644
--- a/src/libimcv/plugins/imc_os/imc_os.c
+++ b/src/libimcv/plugins/imc_os/imc_os.c
@@ -19,6 +19,7 @@
#include <imc/imc_msg.h>
#include <imc/imc_os_info.h>
#include <generic/generic_attr_bool.h>
+#include <generic/generic_attr_string.h>
#include <ietf/ietf_attr.h>
#include <ietf/ietf_attr_attr_request.h>
#include <ietf/ietf_attr_installed_packages.h>
@@ -29,7 +30,6 @@
#include <ita/ita_attr.h>
#include <ita/ita_attr_get_settings.h>
#include <ita/ita_attr_settings.h>
-#include <ita/ita_attr_device_id.h>
#include <tncif_pa_subtypes.h>
@@ -331,7 +331,8 @@ static void add_device_id(imc_msg_t *msg)
}
DBG1(DBG_IMC, "device ID is %.*s", value.len, value.ptr);
- attr = ita_attr_device_id_create(value);
+ attr = generic_attr_string_create(value, pen_type_create(PEN_ITA,
+ ITA_ATTR_DEVICE_ID));
msg->add_attribute(msg, attr);
free(value.ptr);
}
diff --git a/src/libimcv/plugins/imv_attestation/imv_attestation_agent.c b/src/libimcv/plugins/imv_attestation/imv_attestation_agent.c
index 9656306ca..28ebd0069 100644
--- a/src/libimcv/plugins/imv_attestation/imv_attestation_agent.c
+++ b/src/libimcv/plugins/imv_attestation/imv_attestation_agent.c
@@ -27,13 +27,13 @@
#include <imv/imv_msg.h>
#include <imv/imv_session.h>
#include <imv/imv_os_info.h>
+#include <generic/generic_attr_string.h>
#include <ietf/ietf_attr.h>
#include <ietf/ietf_attr_attr_request.h>
#include <ietf/ietf_attr_pa_tnc_error.h>
#include <ietf/ietf_attr_product_info.h>
#include <ietf/ietf_attr_string_version.h>
#include <ita/ita_attr.h>
-#include <ita/ita_attr_device_id.h>
#include <tcg/tcg_attr.h>
#include <tcg/pts/tcg_pts_attr_meas_algo.h>
#include <tcg/pts/tcg_pts_attr_proto_caps.h>
diff --git a/src/libimcv/plugins/imv_os/imv_os_agent.c b/src/libimcv/plugins/imv_os/imv_os_agent.c
index 41b9d0bef..4bf6c7e21 100644
--- a/src/libimcv/plugins/imv_os/imv_os_agent.c
+++ b/src/libimcv/plugins/imv_os/imv_os_agent.c
@@ -24,6 +24,7 @@
#include <imv/imv_agent.h>
#include <imv/imv_msg.h>
#include <generic/generic_attr_bool.h>
+#include <generic/generic_attr_string.h>
#include <ietf/ietf_attr.h>
#include <ietf/ietf_attr_attr_request.h>
#include <ietf/ietf_attr_installed_packages.h>
@@ -36,7 +37,6 @@
#include <ita/ita_attr.h>
#include <ita/ita_attr_get_settings.h>
#include <ita/ita_attr_settings.h>
-#include <ita/ita_attr_device_id.h>
#include "tcg/seg/tcg_seg_attr_max_size.h"
#include "tcg/seg/tcg_seg_attr_seg_env.h"
diff --git a/src/libimcv/pwg/pwg_attr.c b/src/libimcv/pwg/pwg_attr.c
index bbc8e02c5..0301cc76d 100644
--- a/src/libimcv/pwg/pwg_attr.c
+++ b/src/libimcv/pwg/pwg_attr.c
@@ -83,28 +83,30 @@ pa_tnc_attr_t* pwg_attr_create_from_data(u_int32_t type, size_t length, chunk_t
case PWG_HCD_PSTN_FAX_ENABLED:
return generic_attr_bool_create_from_data(length, value,
pen_type_create(PEN_PWG, type));
- case PWG_HCD_FIREWALL_SETTING:
- return ietf_attr_port_filter_create_from_data(length, value,
- pen_type_create(PEN_PWG, type));
case PWG_HCD_ATTRS_NATURAL_LANG:
case PWG_HCD_MACHINE_TYPE_MODEL:
case PWG_HCD_VENDOR_NAME:
- case PWG_HCD_VENDOR_SMI_CODE:
- case PWG_HCD_TIME_SOURCE:
case PWG_HCD_FIRMWARE_NAME:
case PWG_HCD_FIRMWARE_PATCHES:
case PWG_HCD_FIRMWARE_STRING_VERSION:
- case PWG_HCD_FIRMWARE_VERSION:
- case PWG_HCD_RESIDENT_APP_NAME:
- case PWG_HCD_RESIDENT_APP_PATCHES:
- case PWG_HCD_RESIDENT_APP_STRING_VERSION:
- case PWG_HCD_RESIDENT_APP_VERSION:
+ case PWG_HCD_TIME_SOURCE:
case PWG_HCD_USER_APP_NAME:
case PWG_HCD_USER_APP_PATCHES:
case PWG_HCD_USER_APP_STRING_VERSION:
- case PWG_HCD_USER_APP_VERSION:
+ case PWG_HCD_RESIDENT_APP_NAME:
+ case PWG_HCD_RESIDENT_APP_PATCHES:
+ case PWG_HCD_RESIDENT_APP_STRING_VERSION:
case PWG_HCD_CERTIFICATION_STATE:
case PWG_HCD_CONFIGURATION_STATE:
+ return generic_attr_string_create_from_data(length, value,
+ pen_type_create(PEN_PWG, type));
+ case PWG_HCD_FIREWALL_SETTING:
+ return ietf_attr_port_filter_create_from_data(length, value,
+ pen_type_create(PEN_PWG, type));
+ case PWG_HCD_VENDOR_SMI_CODE:
+ case PWG_HCD_FIRMWARE_VERSION:
+ case PWG_HCD_RESIDENT_APP_VERSION:
+ case PWG_HCD_USER_APP_VERSION:
default:
return NULL;
}