From: Andreas Steffen Date: Sun, 17 May 2015 06:41:59 +0000 (+0200) Subject: Defined generic boolean PA-TNC attribute X-Git-Tag: 5.3.3dr6~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=abb8a1ecd22a95d56757c0e90ba064c3877c8dcd;p=thirdparty%2Fstrongswan.git Defined generic boolean PA-TNC attribute --- diff --git a/src/libimcv/Makefile.am b/src/libimcv/Makefile.am index 6dd5663c61..d2175a3b05 100644 --- a/src/libimcv/Makefile.am +++ b/src/libimcv/Makefile.am @@ -36,11 +36,10 @@ libimcv_la_SOURCES = \ imv/imv_session.h imv/imv_session.c \ 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 \ 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 \ - ietf/ietf_attr_fwd_enabled.h ietf/ietf_attr_fwd_enabled.c \ - ietf/ietf_attr_default_pwd_enabled.h ietf/ietf_attr_default_pwd_enabled.c \ ietf/ietf_attr_installed_packages.h ietf/ietf_attr_installed_packages.c \ ietf/ietf_attr_numeric_version.h ietf/ietf_attr_numeric_version.c \ ietf/ietf_attr_op_status.h ietf/ietf_attr_op_status.c \ diff --git a/src/libimcv/ietf/ietf_attr_default_pwd_enabled.c b/src/libimcv/generic/generic_attr_bool.c similarity index 65% rename from src/libimcv/ietf/ietf_attr_default_pwd_enabled.c rename to src/libimcv/generic/generic_attr_bool.c index ee5864d294..589b5e4a83 100644 --- a/src/libimcv/ietf/ietf_attr_default_pwd_enabled.c +++ b/src/libimcv/generic/generic_attr_bool.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-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 @@ -13,36 +13,37 @@ * for more details. */ -#include "ietf_attr_default_pwd_enabled.h" +#include "generic_attr_bool.h" +#include #include #include #include #include -typedef struct private_ietf_attr_default_pwd_enabled_t private_ietf_attr_default_pwd_enabled_t; +typedef struct private_generic_attr_bool_t private_generic_attr_bool_t; /** - * PA-TNC Factory Default Password Enabled type (see section 4.2.12 of RFC 5792) + * Generic PA-TNC attribute containing boolean status value in 32 bit encoding * * 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Factory Default Password Enabled | + * | Boolean Value | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ -#define DEFAULT_PWD_ENABLED_SIZE 4 +#define ATTR_BOOL_SIZE 4 /** - * Private data of an ietf_attr_default_pwd_enabled_t object. + * Private data of an generic_attr_bool_t object. */ -struct private_ietf_attr_default_pwd_enabled_t { +struct private_generic_attr_bool_t { /** - * Public members of ietf_attr_default_pwd_enabled_t + * Public members of generic_attr_bool_t */ - ietf_attr_default_pwd_enabled_t public; + generic_attr_bool_t public; /** * Vendor-specific attribute type @@ -65,7 +66,7 @@ struct private_ietf_attr_default_pwd_enabled_t { bool noskip_flag; /** - * Factory Default Password Enabled status + * Boolean status value */ bool status; @@ -76,31 +77,31 @@ struct private_ietf_attr_default_pwd_enabled_t { }; METHOD(pa_tnc_attr_t, get_type, pen_type_t, - private_ietf_attr_default_pwd_enabled_t *this) + private_generic_attr_bool_t *this) { return this->type; } METHOD(pa_tnc_attr_t, get_value, chunk_t, - private_ietf_attr_default_pwd_enabled_t *this) + private_generic_attr_bool_t *this) { return this->value; } METHOD(pa_tnc_attr_t, get_noskip_flag, bool, - private_ietf_attr_default_pwd_enabled_t *this) + private_generic_attr_bool_t *this) { return this->noskip_flag; } METHOD(pa_tnc_attr_t, set_noskip_flag,void, - private_ietf_attr_default_pwd_enabled_t *this, bool noskip) + private_generic_attr_bool_t *this, bool noskip) { this->noskip_flag = noskip; } METHOD(pa_tnc_attr_t, build, void, - private_ietf_attr_default_pwd_enabled_t *this) + private_generic_attr_bool_t *this) { bio_writer_t *writer; @@ -108,7 +109,7 @@ METHOD(pa_tnc_attr_t, build, void, { return; } - writer = bio_writer_create(DEFAULT_PWD_ENABLED_SIZE); + writer = bio_writer_create(ATTR_BOOL_SIZE); writer->write_uint32(writer, this->status); this->value = writer->extract_buf(writer); @@ -117,31 +118,35 @@ METHOD(pa_tnc_attr_t, build, void, } METHOD(pa_tnc_attr_t, process, status_t, - private_ietf_attr_default_pwd_enabled_t *this, u_int32_t *offset) + private_generic_attr_bool_t *this, u_int32_t *offset) { + enum_name_t *pa_attr_names; 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; } - if (this->value.len != DEFAULT_PWD_ENABLED_SIZE) + if (this->value.len != ATTR_BOOL_SIZE) { - DBG1(DBG_TNC, "incorrect size for IETF factory default password " - "enabled attribute"); + DBG1(DBG_TNC, "incorrect attribute size for %N/%N", + pen_names, this->type.vendor_id, pa_attr_names, this->type.type); return FAILED; } reader = bio_reader_create(this->value); reader->read_uint32(reader, &status); reader->destroy(reader); - if (status > TRUE) + if (status > 1) { - DBG1(DBG_TNC, "IETF factory default password enabled field " - "has unknown value %u", status); + DBG1(DBG_TNC, "%N/%N attribute contains invalid non-boolean value %u", + pen_names, this->type.vendor_id, pa_attr_names, this->type.type, + status); return FAILED; } this->status = status; @@ -150,20 +155,20 @@ METHOD(pa_tnc_attr_t, process, status_t, } METHOD(pa_tnc_attr_t, add_segment, void, - private_ietf_attr_default_pwd_enabled_t *this, chunk_t segment) + private_generic_attr_bool_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_ietf_attr_default_pwd_enabled_t *this) + private_generic_attr_bool_t *this) { ref_get(&this->ref); return &this->public.pa_tnc_attribute; } METHOD(pa_tnc_attr_t, destroy, void, - private_ietf_attr_default_pwd_enabled_t *this) + private_generic_attr_bool_t *this) { if (ref_put(&this->ref)) { @@ -172,8 +177,8 @@ METHOD(pa_tnc_attr_t, destroy, void, } } -METHOD(ietf_attr_default_pwd_enabled_t, get_status, bool, - private_ietf_attr_default_pwd_enabled_t *this) +METHOD(generic_attr_bool_t, get_status, bool, + private_generic_attr_bool_t *this) { return this->status; } @@ -181,9 +186,9 @@ METHOD(ietf_attr_default_pwd_enabled_t, get_status, bool, /** * Described in header. */ -pa_tnc_attr_t *ietf_attr_default_pwd_enabled_create(bool status) +pa_tnc_attr_t *generic_attr_bool_create(bool status, pen_type_t type) { - private_ietf_attr_default_pwd_enabled_t *this; + private_generic_attr_bool_t *this; INIT(this, .public = { @@ -200,7 +205,7 @@ pa_tnc_attr_t *ietf_attr_default_pwd_enabled_create(bool status) }, .get_status = _get_status, }, - .type = { PEN_IETF, IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED }, + .type = type, .status = status, .ref = 1, ); @@ -211,10 +216,10 @@ pa_tnc_attr_t *ietf_attr_default_pwd_enabled_create(bool status) /** * Described in header. */ -pa_tnc_attr_t *ietf_attr_default_pwd_enabled_create_from_data(size_t length, - chunk_t data) +pa_tnc_attr_t *generic_attr_bool_create_from_data(size_t length, chunk_t data, + pen_type_t type) { - private_ietf_attr_default_pwd_enabled_t *this; + private_generic_attr_bool_t *this; INIT(this, .public = { @@ -231,7 +236,7 @@ pa_tnc_attr_t *ietf_attr_default_pwd_enabled_create_from_data(size_t length, }, .get_status = _get_status, }, - .type = { PEN_IETF, IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED }, + .type = type, .length = length, .value = chunk_clone(data), .ref = 1, diff --git a/src/libimcv/generic/generic_attr_bool.h b/src/libimcv/generic/generic_attr_bool.h new file mode 100644 index 0000000000..93754bf9d7 --- /dev/null +++ b/src/libimcv/generic/generic_attr_bool.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2015 Andreas Steffen + * HSR Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See . + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +/** + * @defgroup generic_attr_bool generic_attr_bool + * @{ @ingroup generic_attr + */ + +#ifndef GENERIC_ATTR_BOOL_H_ +#define GENERIC_ATTR_BOOL_H_ + +typedef struct generic_attr_bool_t generic_attr_bool_t; + +#include +#include "pa_tnc/pa_tnc_attr.h" + +/** + * Class implementing a generic PA-TNC attribute containing a boolean status + * value encoded as a 32 bit unsigned integer (0,1) in network order + */ +struct generic_attr_bool_t { + + /** + * Public PA-TNC attribute interface + */ + pa_tnc_attr_t pa_tnc_attribute; + + /** + * Gets boolean value + * + * @return Boolean status value + */ + bool (*get_status)(generic_attr_bool_t *this); + +}; + +/** + * Creates a generic_attr_bool_t object + * + * @param status Boolean status value + * @param type Vendor ID / Attribute Type + */ +pa_tnc_attr_t* generic_attr_bool_create(bool status, pen_type_t type); + +/** + * Creates an generic_attr_bool_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* generic_attr_bool_create_from_data(size_t length, chunk_t value, + pen_type_t type); + +#endif /** GENERIC_ATTR_BOOL_H_ @}*/ diff --git a/src/libimcv/ietf/ietf_attr.c b/src/libimcv/ietf/ietf_attr.c index 67269af53a..d0f04393bd 100644 --- a/src/libimcv/ietf/ietf_attr.c +++ b/src/libimcv/ietf/ietf_attr.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2014 Andreas Steffen + * Copyright (C) 2011-2015 Andreas Steffen * HSR Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it @@ -16,8 +16,6 @@ #include "ietf_attr.h" #include "ietf/ietf_attr_assess_result.h" #include "ietf/ietf_attr_attr_request.h" -#include "ietf/ietf_attr_fwd_enabled.h" -#include "ietf/ietf_attr_default_pwd_enabled.h" #include "ietf/ietf_attr_installed_packages.h" #include "ietf/ietf_attr_numeric_version.h" #include "ietf/ietf_attr_op_status.h" @@ -26,6 +24,7 @@ #include "ietf/ietf_attr_product_info.h" #include "ietf/ietf_attr_remediation_instr.h" #include "ietf/ietf_attr_string_version.h" +#include "generic/generic_attr_bool.h" ENUM(ietf_attr_names, IETF_ATTR_TESTING, IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED, @@ -73,9 +72,9 @@ pa_tnc_attr_t* ietf_attr_create_from_data(u_int32_t type, size_t length, case IETF_ATTR_REMEDIATION_INSTRUCTIONS: return ietf_attr_remediation_instr_create_from_data(length, value); case IETF_ATTR_FORWARDING_ENABLED: - return ietf_attr_fwd_enabled_create_from_data(length, value); case IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED: - return ietf_attr_default_pwd_enabled_create_from_data(length, value); + return generic_attr_bool_create_from_data(length, value, + pen_type_create(PEN_IETF, type)); case IETF_ATTR_TESTING: case IETF_ATTR_RESERVED: default: diff --git a/src/libimcv/ietf/ietf_attr_default_pwd_enabled.h b/src/libimcv/ietf/ietf_attr_default_pwd_enabled.h deleted file mode 100644 index 3999590d40..0000000000 --- a/src/libimcv/ietf/ietf_attr_default_pwd_enabled.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2012 Andreas Steffen - * HSR Hochschule fuer Technik Rapperswil - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. See . - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -/** - * @defgroup ietf_attr_default_pwd_enabled ietf_attr_default_pwd_enabled - * @{ @ingroup ietf_attr - */ - -#ifndef IETF_ATTR_PWD_ENABLED_H_ -#define IETF_ATTR_PWD_ENABLED_H_ - -typedef struct ietf_attr_default_pwd_enabled_t ietf_attr_default_pwd_enabled_t; - -#include "ietf_attr.h" -#include "pa_tnc/pa_tnc_attr.h" - -/** - * Class implementing the IETF PA-TNC Factory Default Password Enabled attribute. - * - */ -struct ietf_attr_default_pwd_enabled_t { - - /** - * Public PA-TNC attribute interface - */ - pa_tnc_attr_t pa_tnc_attribute; - - /** - * Gets the Factory Default Password Enabled status - * - * @return Factory Default Password Enabled status - */ - bool (*get_status)(ietf_attr_default_pwd_enabled_t *this); - -}; - -/** - * Creates an ietf_attr_default_pwd_enabled_t object - * - * @param status Factory Default Password Enabled status - */ -pa_tnc_attr_t* ietf_attr_default_pwd_enabled_create(bool status); - -/** - * Creates an ietf_attr_default_pwd_enabled_t object from received data - * - * @param length Total length of attribute value - * @param value Unparsed attribute value (might be a segment) - */ -pa_tnc_attr_t* ietf_attr_default_pwd_enabled_create_from_data(size_t length, - chunk_t value); - -#endif /** IETF_ATTR_PWD_ENABLED_H_ @}*/ diff --git a/src/libimcv/ietf/ietf_attr_fwd_enabled.c b/src/libimcv/ietf/ietf_attr_fwd_enabled.c deleted file mode 100644 index c00a5efc29..0000000000 --- a/src/libimcv/ietf/ietf_attr_fwd_enabled.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (C) 2012-2014 Andreas Steffen - * HSR Hochschule fuer Technik Rapperswil - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. See . - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -#include "ietf_attr_fwd_enabled.h" - -#include -#include -#include -#include - -typedef struct private_ietf_attr_fwd_enabled_t private_ietf_attr_fwd_enabled_t; - -/** - * PA-TNC Forwarding Enabled type (see section 4.2.11 of RFC 5792) - * - * 1 2 3 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - * | Forwarding Enabled | - * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - -#define FORWARDING_ENABLED_SIZE 4 - -/** - * Private data of an ietf_attr_fwd_enabled_t object. - */ -struct private_ietf_attr_fwd_enabled_t { - - /** - * Public members of ietf_attr_fwd_enabled_t - */ - ietf_attr_fwd_enabled_t public; - - /** - * Vendor-specific attribute type - */ - pen_type_t type; - - /** - * Length of attribute value - */ - size_t length; - - /** - * Attribute value or segment - */ - chunk_t value; - - /** - * Noskip flag - */ - bool noskip_flag; - - /** - * Forwarding Enabled status - */ - os_fwd_status_t fwd_status; - - /** - * Reference count - */ - refcount_t ref; -}; - -METHOD(pa_tnc_attr_t, get_type, pen_type_t, - private_ietf_attr_fwd_enabled_t *this) -{ - return this->type; -} - -METHOD(pa_tnc_attr_t, get_value, chunk_t, - private_ietf_attr_fwd_enabled_t *this) -{ - return this->value; -} - -METHOD(pa_tnc_attr_t, get_noskip_flag, bool, - private_ietf_attr_fwd_enabled_t *this) -{ - return this->noskip_flag; -} - -METHOD(pa_tnc_attr_t, set_noskip_flag,void, - private_ietf_attr_fwd_enabled_t *this, bool noskip) -{ - this->noskip_flag = noskip; -} - -METHOD(pa_tnc_attr_t, build, void, - private_ietf_attr_fwd_enabled_t *this) -{ - bio_writer_t *writer; - - if (this->value.ptr) - { - return; - } - writer = bio_writer_create(FORWARDING_ENABLED_SIZE); - writer->write_uint32(writer, this->fwd_status); - - this->value = writer->extract_buf(writer); - this->length = this->value.len; - writer->destroy(writer); -} - -METHOD(pa_tnc_attr_t, process, status_t, - private_ietf_attr_fwd_enabled_t *this, u_int32_t *offset) -{ - bio_reader_t *reader; - u_int32_t fwd_status; - - *offset = 0; - - if (this->value.len < this->length) - { - return NEED_MORE; - } - if (this->value.len != FORWARDING_ENABLED_SIZE) - { - DBG1(DBG_TNC, "incorrect size for IETF forwarding enabled attribute"); - return FAILED; - } - reader = bio_reader_create(this->value); - reader->read_uint32(reader, &fwd_status); - reader->destroy(reader); - - if (fwd_status > OS_FWD_UNKNOWN) - { - DBG1(DBG_TNC, "IETF forwarding enabled field has unknown value %u", - fwd_status); - return FAILED; - } - this->fwd_status = fwd_status; - - return SUCCESS; -} - -METHOD(pa_tnc_attr_t, add_segment, void, - private_ietf_attr_fwd_enabled_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_ietf_attr_fwd_enabled_t *this) -{ - ref_get(&this->ref); - return &this->public.pa_tnc_attribute; -} - -METHOD(pa_tnc_attr_t, destroy, void, - private_ietf_attr_fwd_enabled_t *this) -{ - if (ref_put(&this->ref)) - { - free(this->value.ptr); - free(this); - } -} - -METHOD(ietf_attr_fwd_enabled_t, get_status, os_fwd_status_t, - private_ietf_attr_fwd_enabled_t *this) -{ - return this->fwd_status; -} - -/** - * Described in header. - */ -pa_tnc_attr_t *ietf_attr_fwd_enabled_create(os_fwd_status_t fwd_status) -{ - private_ietf_attr_fwd_enabled_t *this; - - INIT(this, - .public = { - .pa_tnc_attribute = { - .get_type = _get_type, - .get_value = _get_value, - .get_noskip_flag = _get_noskip_flag, - .set_noskip_flag = _set_noskip_flag, - .build = _build, - .process = _process, - .add_segment = _add_segment, - .get_ref = _get_ref, - .destroy = _destroy, - }, - .get_status = _get_status, - }, - .type = { PEN_IETF, IETF_ATTR_FORWARDING_ENABLED }, - .fwd_status = fwd_status, - .ref = 1, - ); - - return &this->public.pa_tnc_attribute; -} - -/** - * Described in header. - */ -pa_tnc_attr_t *ietf_attr_fwd_enabled_create_from_data(size_t length, - chunk_t data) -{ - private_ietf_attr_fwd_enabled_t *this; - - INIT(this, - .public = { - .pa_tnc_attribute = { - .get_type = _get_type, - .get_value = _get_value, - .get_noskip_flag = _get_noskip_flag, - .set_noskip_flag = _set_noskip_flag, - .build = _build, - .process = _process, - .add_segment = _add_segment, - .get_ref = _get_ref, - .destroy = _destroy, - }, - .get_status = _get_status, - }, - .type = { PEN_IETF, IETF_ATTR_FORWARDING_ENABLED }, - .length = length, - .value = chunk_clone(data), - .ref = 1, - ); - - return &this->public.pa_tnc_attribute; -} - diff --git a/src/libimcv/ietf/ietf_attr_fwd_enabled.h b/src/libimcv/ietf/ietf_attr_fwd_enabled.h deleted file mode 100644 index 3d554369b8..0000000000 --- a/src/libimcv/ietf/ietf_attr_fwd_enabled.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2012-2014 Andreas Steffen - * HSR Hochschule fuer Technik Rapperswil - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. See . - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -/** - * @defgroup ietf_attr_fwd_enabled ietf_attr_fwd_enabled - * @{ @ingroup ietf_attr - */ - -#ifndef IETF_ATTR_FWD_ENABLED_H_ -#define IETF_ATTR_FWD_ENABLED_H_ - -typedef struct ietf_attr_fwd_enabled_t ietf_attr_fwd_enabled_t; - -#include "ietf_attr.h" -#include "pa_tnc/pa_tnc_attr.h" -#include "os_info/os_info.h" - -/** - * Class implementing the IETF PA-TNC Forwarding Enabled attribute. - * - */ -struct ietf_attr_fwd_enabled_t { - - /** - * Public PA-TNC attribute interface - */ - pa_tnc_attr_t pa_tnc_attribute; - - /** - * Gets the Forwarding Enabled status - * - * @return Forwarding Enabled status - */ - os_fwd_status_t (*get_status)(ietf_attr_fwd_enabled_t *this); - -}; - -/** - * Creates an ietf_attr_fwd_enabled_t object - * - * @param fwd_status Forwarding Enabled status - */ -pa_tnc_attr_t* ietf_attr_fwd_enabled_create(os_fwd_status_t fwd_status); - -/** - * Creates an ietf_attr_fwd_enabled_t object from received data - * - * @param length Total length of attribute value - * @param value Unparsed attribute value (might be a segment) - */ -pa_tnc_attr_t* ietf_attr_fwd_enabled_create_from_data(size_t length, - chunk_t value); - -#endif /** IETF_ATTR_FWD_ENABLED_H_ @}*/ diff --git a/src/libimcv/plugins/imc_os/imc_os.c b/src/libimcv/plugins/imc_os/imc_os.c index 4fe8856e6d..1cb3848c48 100644 --- a/src/libimcv/plugins/imc_os/imc_os.c +++ b/src/libimcv/plugins/imc_os/imc_os.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2014 Andreas Steffen + * Copyright (C) 2011-2015 Andreas Steffen * HSR Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it @@ -18,10 +18,9 @@ #include #include #include +#include #include #include -#include -#include #include #include #include @@ -214,7 +213,8 @@ static void add_fwd_enabled(imc_msg_t *msg) fwd_status = os->get_fwd_status(os); DBG1(DBG_IMC, "IPv4 forwarding is %N", os_fwd_status_names, fwd_status); - attr = ietf_attr_fwd_enabled_create(fwd_status); + attr = generic_attr_bool_create(fwd_status, pen_type_create(PEN_IETF, + IETF_ATTR_FORWARDING_ENABLED)); msg->add_attribute(msg, attr); } @@ -226,7 +226,8 @@ static void add_default_pwd_enabled(imc_msg_t *msg) pa_tnc_attr_t *attr; DBG1(DBG_IMC, "factory default password is disabled"); - attr = ietf_attr_default_pwd_enabled_create(FALSE); + attr = generic_attr_bool_create(FALSE, pen_type_create(PEN_IETF, + IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED)); msg->add_attribute(msg, attr); } diff --git a/src/libimcv/plugins/imv_os/imv_os_agent.c b/src/libimcv/plugins/imv_os/imv_os_agent.c index 5eefb51ad9..41b9d0bef9 100644 --- a/src/libimcv/plugins/imv_os/imv_os_agent.c +++ b/src/libimcv/plugins/imv_os/imv_os_agent.c @@ -23,10 +23,9 @@ #include #include #include +#include #include #include -#include -#include #include #include #include @@ -270,12 +269,12 @@ static TNC_Result receive_msg(private_imv_os_agent_t *this, imv_state_t *state, } case IETF_ATTR_FORWARDING_ENABLED: { - ietf_attr_fwd_enabled_t *attr_cast; + generic_attr_bool_t *attr_cast; os_fwd_status_t fwd_status; state->set_action_flags(state, IMV_OS_ATTR_FORWARDING_ENABLED); - attr_cast = (ietf_attr_fwd_enabled_t*)attr; + attr_cast = (generic_attr_bool_t*)attr; fwd_status = attr_cast->get_status(attr_cast); DBG1(DBG_IMV, "IPv4 forwarding is %N", os_fwd_status_names, fwd_status); @@ -288,12 +287,12 @@ static TNC_Result receive_msg(private_imv_os_agent_t *this, imv_state_t *state, } case IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED: { - ietf_attr_default_pwd_enabled_t *attr_cast; + generic_attr_bool_t *attr_cast; bool default_pwd_status; state->set_action_flags(state, IMV_OS_ATTR_FACTORY_DEFAULT_PWD_ENABLED); - attr_cast = (ietf_attr_default_pwd_enabled_t*)attr; + attr_cast = (generic_attr_bool_t*)attr; default_pwd_status = attr_cast->get_status(attr_cast); DBG1(DBG_IMV, "factory default password is %sabled", default_pwd_status ? "en":"dis"); diff --git a/src/libimcv/pwg/pwg_attr.c b/src/libimcv/pwg/pwg_attr.c index 5fd887babd..9056a285f1 100644 --- a/src/libimcv/pwg/pwg_attr.c +++ b/src/libimcv/pwg/pwg_attr.c @@ -15,6 +15,8 @@ #include "pwg_attr.h" +#include + ENUM_BEGIN(pwg_attr_names, PWG_HCD_ATTRS_NATURAL_LANG, PWG_HCD_VENDOR_SMI_CODE, "HCD AttributesNaturalLanguage", @@ -72,17 +74,21 @@ pa_tnc_attr_t* pwg_attr_create_from_data(u_int32_t type, size_t length, chunk_t { switch (type) { + case PWG_HCD_DEFAULT_PWD_ENABLED: + case PWG_HCD_FORWARDING_ENABLED: + case PWG_HCD_USER_APP_ENABLED: + case PWG_HCD_USER_APP_PERSIST_ENABLED: + case PWG_HCD_PSTN_FAX_ENABLED: + return generic_attr_bool_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_DEFAULT_PWD_ENABLED: case PWG_HCD_FIREWALL_SETTING: - case PWG_HCD_FORWARDING_ENABLED: - case PWG_HCD_PSTN_FAX_ENABLED: case PWG_HCD_TIME_SOURCE: - case PWG_HCD_FIRMWARE_NAME: - case PWG_HCD_FIRMWARE_PATCHES: + 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: @@ -93,8 +99,6 @@ pa_tnc_attr_t* pwg_attr_create_from_data(u_int32_t type, size_t length, chunk_t case PWG_HCD_USER_APP_PATCHES: case PWG_HCD_USER_APP_STRING_VERSION: case PWG_HCD_USER_APP_VERSION: - case PWG_HCD_USER_APP_ENABLE: - case PWG_HCD_USER_APP_PERSIST_ENABLED: case PWG_HCD_CERTIFICATION_STATE: case PWG_HCD_CONFIGURATION_STATE: default: