cleaned up XML code in tnccs-11 plugin

This commit is contained in:
Andreas Steffen 2013-04-04 17:12:00 +02:00
parent 9c84bbcbc0
commit 2a4915e87a
13 changed files with 95 additions and 92 deletions

View File

@ -23,6 +23,10 @@
#include <libxml/parser.h>
#define TNCCS_NS "http://www.trustedcomputinggroup.org/IWG/TNC/1_0/IF_TNCCS#"
#define SCHEMA_NS "http://www.w3.org/2001/XMLSchema-instance"
#define TNCCS_XSD "https://www.trustedcomputinggroup.org/XML/SCHEMA/TNCCS_1.0.xsd"
typedef struct private_tnccs_batch_t private_tnccs_batch_t;
/**
@ -91,7 +95,7 @@ METHOD(tnccs_batch_t, build, void,
int buf_size;
xmlDocDumpFormatMemory(this->doc, &xmlbuf, &buf_size, 1);
this->encoding = chunk_create((u_char*)xmlbuf, buf_size);
this->encoding = chunk_create(xmlbuf, buf_size);
this->encoding = chunk_clone(this->encoding);
xmlFree(xmlbuf);
}
@ -125,8 +129,7 @@ METHOD(tnccs_batch_t, process, status_t,
}
/* check TNCCS namespace */
ns = xmlSearchNsByHref(this->doc, cur, (const xmlChar*)
"http://www.trustedcomputinggroup.org/IWG/TNC/1_0/IF_TNCCS#");
ns = xmlSearchNsByHref(this->doc, cur, TNCCS_NS);
if (!ns)
{
error_type = TNCCS_ERROR_MALFORMED_BATCH;
@ -135,7 +138,7 @@ METHOD(tnccs_batch_t, process, status_t,
}
/* check XML document type */
if (xmlStrcmp(cur->name, (const xmlChar*)"TNCCS-Batch"))
if (xmlStrcmp(cur->name, "TNCCS-Batch"))
{
error_type = TNCCS_ERROR_MALFORMED_BATCH;
error_msg = buf;
@ -145,7 +148,7 @@ METHOD(tnccs_batch_t, process, status_t,
}
/* check presence of BatchID property */
batchid = xmlGetProp(cur, (const xmlChar*)"BatchId");
batchid = xmlGetProp(cur, "BatchId");
if (!batchid)
{
error_type = TNCCS_ERROR_INVALID_BATCH_ID;
@ -166,7 +169,7 @@ METHOD(tnccs_batch_t, process, status_t,
}
/* check presence of Recipient property */
recipient = xmlGetProp(cur, (const xmlChar*)"Recipient");
recipient = xmlGetProp(cur, "Recipient");
if (!recipient)
{
error_type = TNCCS_ERROR_INVALID_RECIPIENT_TYPE;
@ -175,12 +178,12 @@ METHOD(tnccs_batch_t, process, status_t,
}
/* check recipient */
if (!streq((char*)recipient, this->is_server ? "TNCS" : "TNCC"))
if (!streq(recipient, this->is_server ? "TNCS" : "TNCC"))
{
error_type = TNCCS_ERROR_INVALID_RECIPIENT_TYPE;
error_msg = buf;
snprintf(buf, BUF_LEN, "message recipient expected '%s', got '%s'",
this->is_server ? "TNCS" : "TNCC", (char*)recipient);
this->is_server ? "TNCS" : "TNCC", recipient);
xmlFree(recipient);
goto fatal;
}
@ -201,7 +204,7 @@ METHOD(tnccs_batch_t, process, status_t,
if (cur->ns != ns)
{
DBG1(DBG_TNC, "ignoring message node '%s' having wrong namespace",
(char*)cur->name);
cur->name);
continue;
}
@ -260,8 +263,8 @@ tnccs_batch_t* tnccs_batch_create(bool is_server, int batch_id)
{
private_tnccs_batch_t *this;
xmlNodePtr n;
xmlNsPtr ns_xsi;
char buf[12];
const char *recipient;
INIT(this,
.public = {
@ -277,19 +280,17 @@ tnccs_batch_t* tnccs_batch_create(bool is_server, int batch_id)
.messages = linked_list_create(),
.errors = linked_list_create(),
.batch_id = batch_id,
.doc = xmlNewDoc(BAD_CAST "1.0"),
.doc = xmlNewDoc("1.0"),
);
DBG2(DBG_TNC, "creating TNCCS Batch #%d", this->batch_id);
n = xmlNewNode(NULL, BAD_CAST "TNCCS-Batch");
n = xmlNewNode(NULL, "TNCCS-Batch");
xmlNewNs(n, TNCCS_NS, NULL);
ns_xsi = xmlNewNs(n, SCHEMA_NS, "xsi");
snprintf(buf, sizeof(buf), "%d", batch_id);
recipient = this->is_server ? "TNCC" : "TNCS";
xmlNewProp(n, BAD_CAST "BatchId", BAD_CAST buf);
xmlNewProp(n, BAD_CAST "Recipient", BAD_CAST recipient);
xmlNewProp(n, BAD_CAST "xmlns", BAD_CAST "http://www.trustedcomputinggroup.org/IWG/TNC/1_0/IF_TNCCS#");
xmlNewProp(n, BAD_CAST "xmlns:xsi", BAD_CAST "http://www.w3.org/2001/XMLSchema-instance");
xmlNewProp(n, BAD_CAST "xsi:schemaLocation", BAD_CAST "http://www.trustedcomputinggroup.org/IWG/TNC/1_0/IF_TNCCS# "
"https://www.trustedcomputinggroup.org/XML/SCHEMA/TNCCS_1.0.xsd");
xmlNewProp(n, "BatchId", buf);
xmlNewProp(n, "Recipient", this->is_server ? "TNCC" : "TNCS");
xmlNewNsProp(n, ns_xsi, "schemaLocation", TNCCS_NS " " TNCCS_XSD);
xmlDocSetRootElement(this->doc, n);
return &this->public;

View File

@ -181,16 +181,16 @@ tnccs_msg_t *imc_imv_msg_create_from_node(xmlNodePtr node, linked_list_t *errors
cur = node->xmlChildrenNode;
while (cur)
{
if (streq((char*)cur->name, "Type") && cur->ns == ns)
if (streq(cur->name, "Type") && cur->ns == ns)
{
content = xmlNodeGetContent(cur);
this->msg_type = strtoul((char*)content, NULL, 16);
this->msg_type = strtoul(content, NULL, 16);
xmlFree(content);
}
else if (streq((char*)cur->name, "Base64") && cur->ns == ns)
else if (streq(cur->name, "Base64") && cur->ns == ns)
{
content = xmlNodeGetContent(cur);
b64_body = chunk_create((char*)content, strlen((char*)content));
b64_body = chunk_create(content, strlen(content));
this->msg_body = decode_base64(b64_body);
xmlFree(content);
}
@ -221,21 +221,21 @@ tnccs_msg_t *imc_imv_msg_create(TNC_MessageType msg_type, chunk_t msg_body)
.get_msg_body = _get_msg_body,
},
.type = IMC_IMV_MSG,
.node = xmlNewNode(NULL, BAD_CAST "IMC-IMV-Message"),
.node = xmlNewNode(NULL, "IMC-IMV-Message"),
.msg_type = msg_type,
.msg_body = chunk_clone(msg_body),
);
/* add the message type number in hex */
n = xmlNewNode(NULL, BAD_CAST "Type");
n = xmlNewNode(NULL, "Type");
snprintf(buf, 10, "%08x", this->msg_type);
xmlNodeSetContent(n, BAD_CAST buf);
xmlNodeSetContent(n, buf);
xmlAddChild(this->node, n);
/* encode the message as a Base64 node */
n = xmlNewNode(NULL, BAD_CAST "Base64");
n = xmlNewNode(NULL, "Base64");
b64_body = encode_base64(this->msg_body);
xmlNodeSetContent(n, BAD_CAST b64_body.ptr);
xmlNodeSetContent(n, b64_body.ptr);
xmlAddChild(this->node, n);
free(b64_body.ptr);

View File

@ -125,11 +125,11 @@ tnccs_msg_t *tnccs_error_msg_create_from_node(xmlNodePtr node)
.error_type = TNCCS_ERROR_OTHER,
);
error_type_name = xmlGetProp(node, (const xmlChar*)"type");
error_type_name = xmlGetProp(node, "type");
if (error_type_name)
{
this->error_type = enum_from_name(tnccs_error_type_names,
(char*)error_type_name);
error_type_name);
if (this->error_type == -1)
{
this->error_type = TNCCS_ERROR_OTHER;
@ -140,7 +140,7 @@ tnccs_msg_t *tnccs_error_msg_create_from_node(xmlNodePtr node)
error_msg = xmlNodeGetContent(node);
if (error_msg)
{
this->error_msg = strdup((char*)error_msg);
this->error_msg = strdup(error_msg);
xmlFree(error_msg);
}
@ -167,24 +167,23 @@ tnccs_msg_t *tnccs_error_msg_create(tnccs_error_type_t type, char *msg)
},
.type = TNCCS_MSG_ERROR,
.ref = 1,
.node = xmlNewNode(NULL, BAD_CAST "TNCC-TNCS-Message"),
.node = xmlNewNode(NULL, "TNCC-TNCS-Message"),
.error_type = type,
.error_msg = strdup(msg),
);
DBG1(DBG_TNC, "%s", msg);
n = xmlNewNode(NULL, BAD_CAST "Type");
xmlNodeSetContent(n, BAD_CAST "00000002");
n = xmlNewNode(NULL, "Type");
xmlNodeSetContent(n, "00000002");
xmlAddChild(this->node, n);
n = xmlNewNode(NULL, BAD_CAST "XML");
n = xmlNewNode(NULL, "XML");
xmlAddChild(this->node, n);
n2 = xmlNewNode(NULL, BAD_CAST enum_to_name(tnccs_msg_type_names, this->type));
xmlNewProp(n2, BAD_CAST "type",
BAD_CAST enum_to_name(tnccs_error_type_names, type));
xmlNodeSetContent(n2, BAD_CAST msg);
n2 = xmlNewNode(NULL, enum_to_name(tnccs_msg_type_names, this->type));
xmlNewProp(n2, "type", enum_to_name(tnccs_error_type_names, type));
xmlNodeSetContent(n2, msg);
xmlAddChild(n, n2);
return &this->public.tnccs_msg_interface;

View File

@ -57,15 +57,15 @@ tnccs_msg_t* tnccs_msg_create_from_node(xmlNodePtr node, linked_list_t *errors)
while (cur)
{
if (streq((char*)cur->name, "Type") && cur->ns == ns)
if (streq(cur->name, "Type") && cur->ns == ns)
{
xmlChar *content = xmlNodeGetContent(cur);
type = strtol((char*)content, NULL, 16);
type = strtol(content, NULL, 16);
xmlFree(content);
found = TRUE;
}
else if (streq((char*)cur->name, "XML") && cur->ns == ns)
else if (streq(cur->name, "XML") && cur->ns == ns)
{
xml_msg_node = cur->xmlChildrenNode;
}

View File

@ -93,7 +93,7 @@ tnccs_msg_t *tnccs_preferred_language_msg_create_from_node(xmlNodePtr node,
);
language = xmlNodeGetContent(node);
this->preferred_language = strdup((char*)language);
this->preferred_language = strdup(language);
xmlFree(language);
return &this->public.tnccs_msg_interface;
@ -117,20 +117,20 @@ tnccs_msg_t *tnccs_preferred_language_msg_create(char *language)
.get_preferred_language = _get_preferred_language,
},
.type = TNCCS_MSG_PREFERRED_LANGUAGE,
.node = xmlNewNode(NULL, BAD_CAST "TNCC-TNCS-Message"),
.node = xmlNewNode(NULL, "TNCC-TNCS-Message"),
.preferred_language = strdup(language),
);
/* add the message type number in hex */
n = xmlNewNode(NULL, BAD_CAST "Type");
xmlNodeSetContent(n, BAD_CAST "00000003");
n = xmlNewNode(NULL, "Type");
xmlNodeSetContent(n, "00000003");
xmlAddChild(this->node, n);
n = xmlNewNode(NULL, BAD_CAST "XML");
n = xmlNewNode(NULL, "XML");
xmlAddChild(this->node, n);
n2 = xmlNewNode(NULL, BAD_CAST enum_to_name(tnccs_msg_type_names, this->type));
xmlNodeSetContent(n2, BAD_CAST language);
n2 = xmlNewNode(NULL, enum_to_name(tnccs_msg_type_names, this->type));
xmlNodeSetContent(n2, language);
xmlAddChild(n, n2);
return &this->public.tnccs_msg_interface;

View File

@ -104,7 +104,7 @@ tnccs_msg_t *tnccs_reason_strings_msg_create_from_node(xmlNodePtr node,
.node = node,
);
if (xmlStrcmp(node->name, (const xmlChar*)"TNCCS-ReasonStrings"))
if (xmlStrcmp(node->name, "TNCCS-ReasonStrings"))
{
error_msg = "TNCCS-ReasonStrings tag expected";
goto fatal;
@ -118,7 +118,7 @@ tnccs_msg_t *tnccs_reason_strings_msg_create_from_node(xmlNodePtr node,
child = child->next;
continue;
}
if (xmlStrcmp(child->name, (const xmlChar*)"ReasonString"))
if (xmlStrcmp(child->name, "ReasonString"))
{
error_msg = "ReasonString tag expected";
goto fatal;
@ -126,15 +126,17 @@ tnccs_msg_t *tnccs_reason_strings_msg_create_from_node(xmlNodePtr node,
break;
}
lang_string = (char*)xmlGetProp(child, (const xmlChar*)"lang");
lang_string = xmlGetProp(child, "lang");
if (!lang_string)
{
lang_string = "";
lang_string = strdup("");
}
this->language = chunk_create(strdup(lang_string), strlen(lang_string));
this->language = chunk_clone(chunk_from_str(lang_string));
xmlFree(lang_string);
reason_string = (char*)xmlNodeGetContent(child);
this->reason = chunk_create(strdup(reason_string), strlen(reason_string));
reason_string = xmlNodeGetContent(child);
this->reason = chunk_clone(chunk_from_str(reason_string));
xmlFree(reason_string);
return &this->public.tnccs_msg_interface;
@ -163,7 +165,7 @@ tnccs_msg_t *tnccs_reason_strings_msg_create(chunk_t reason, chunk_t language)
.get_reason = _get_reason,
},
.type = TNCCS_MSG_REASON_STRINGS,
.node = xmlNewNode(NULL, BAD_CAST "TNCC-TNCS-Message"),
.node = xmlNewNode(NULL, "TNCC-TNCS-Message"),
.reason = chunk_create_clone(malloc(reason.len + 1), reason),
.language = chunk_create_clone(malloc(language.len + 1), language),
);
@ -173,20 +175,20 @@ tnccs_msg_t *tnccs_reason_strings_msg_create(chunk_t reason, chunk_t language)
this->language.ptr[this->language.len] = '\0';
/* add the message type number in hex */
n = xmlNewNode(NULL, BAD_CAST "Type");
xmlNodeSetContent(n, BAD_CAST "00000004");
n = xmlNewNode(NULL, "Type");
xmlNodeSetContent(n, "00000004");
xmlAddChild(this->node, n);
n = xmlNewNode(NULL, BAD_CAST "XML");
n = xmlNewNode(NULL, "XML");
xmlAddChild(this->node, n);
n2 = xmlNewNode(NULL, BAD_CAST enum_to_name(tnccs_msg_type_names, this->type));
n2 = xmlNewNode(NULL, enum_to_name(tnccs_msg_type_names, this->type));
/* could add multiple reasons here, if we had them */
n3 = xmlNewNode(NULL, BAD_CAST "ReasonString");
xmlNewProp(n3, BAD_CAST "xml:lang", BAD_CAST this->language.ptr);
xmlNodeSetContent(n3, BAD_CAST this->reason.ptr);
n3 = xmlNewNode(NULL, "ReasonString");
xmlNewProp(n3, "xml:lang", this->language.ptr);
xmlNodeSetContent(n3, this->reason.ptr);
xmlAddChild(n2, n3);
xmlAddChild(n, n2);

View File

@ -95,21 +95,21 @@ tnccs_msg_t *tnccs_recommendation_msg_create_from_node(xmlNodePtr node,
.node = node,
);
rec_string = xmlGetProp(node, (const xmlChar*)"type");
rec_string = xmlGetProp(node, "type");
if (!rec_string)
{
error_msg = "type property in TNCCS-Recommendation is missing";
goto fatal;
}
else if (streq((char*)rec_string, "allow"))
else if (streq(rec_string, "allow"))
{
this->rec = TNC_IMV_ACTION_RECOMMENDATION_ALLOW;
}
else if (streq((char*)rec_string, "isolate"))
else if (streq(rec_string, "isolate"))
{
this->rec = TNC_IMV_ACTION_RECOMMENDATION_ISOLATE;
}
else if (streq((char*)rec_string, "none"))
else if (streq(rec_string, "none"))
{
this->rec = TNC_IMV_ACTION_RECOMMENDATION_NO_ACCESS;
}
@ -151,16 +151,16 @@ tnccs_msg_t *tnccs_recommendation_msg_create(TNC_IMV_Action_Recommendation rec)
.get_recommendation = _get_recommendation,
},
.type = TNCCS_MSG_RECOMMENDATION,
.node = xmlNewNode(NULL, BAD_CAST "TNCC-TNCS-Message"),
.node = xmlNewNode(NULL, "TNCC-TNCS-Message"),
.rec = rec,
);
/* add the message type number in hex */
n = xmlNewNode(NULL, BAD_CAST "Type");
xmlNodeSetContent(n, BAD_CAST "00000001");
n = xmlNewNode(NULL, "Type");
xmlNodeSetContent(n, "00000001");
xmlAddChild(this->node, n);
n = xmlNewNode(NULL, BAD_CAST "XML");
n = xmlNewNode(NULL, "XML");
xmlAddChild(this->node, n);
switch (rec)
@ -177,8 +177,8 @@ tnccs_msg_t *tnccs_recommendation_msg_create(TNC_IMV_Action_Recommendation rec)
rec_string = "none";
}
n2 = xmlNewNode(NULL, BAD_CAST enum_to_name(tnccs_msg_type_names, this->type));
xmlNewProp(n2, BAD_CAST "type", BAD_CAST rec_string);
n2 = xmlNewNode(NULL, enum_to_name(tnccs_msg_type_names, this->type));
xmlNewProp(n2, BAD_CAST "type", rec_string);
xmlNodeSetContent(n2, "");
xmlAddChild(n, n2);

View File

@ -97,20 +97,20 @@ tnccs_msg_t *tnccs_tncs_contact_info_msg_create(void)
},
},
.type = TNCCS_MSG_TNCS_CONTACT_INFO,
.node = xmlNewNode(NULL, BAD_CAST "TNCC-TNCS-Message"),
.node = xmlNewNode(NULL, "TNCC-TNCS-Message"),
);
/* add the message type number in hex */
n = xmlNewNode(NULL, BAD_CAST "Type");
xmlNodeSetContent(n, BAD_CAST "00000005");
n = xmlNewNode(NULL, "Type");
xmlNodeSetContent(n, "00000005");
xmlAddChild(this->node, n);
n = xmlNewNode(NULL, BAD_CAST "XML");
n = xmlNewNode(NULL, "XML");
xmlAddChild(this->node, n);
/* TODO
n2 = xmlNewNode(NULL, BAD_CAST enum_to_name(tnccs_msg_type_names, this->type));
xmlNodeSetContent(n2, BAD_CAST language);
n2 = xmlNewNode(NULL, enum_to_name(tnccs_msg_type_names, this->type));
xmlNodeSetContent(n2, language);
xmlAddChild(n, n2);
*/

View File

@ -60,11 +60,12 @@ done
##########################################################################
# clear radius.log on FreeRadius servers
# clear daemon.log and radius.log on FreeRadius servers
#
for host in $RADIUSHOSTS
do
eval HOSTLOGIN="root@`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $1 }' | awk '{ print $1 }'`"
ssh $SSHCONF $HOSTLOGIN 'rm -f /var/log/freeradius/radius.log' > /dev/null 2>&1
ssh $SSHCONF $HOSTLOGIN 'rm -f /var/log/daemon.log /var/log/freeradius/radius.log; \
kill -SIGHUP `cat /var/run/rsyslogd.pid`' > /dev/null 2>&1
done

View File

@ -6,9 +6,9 @@ carol::cat /etc/tnc_config
dave::cat /etc/tnc_config
carol::cat /etc/tnc/dummyimc.file
dave::cat /etc/tnc/dummyimc.file
moon::LEAK_DETECTIVE_DISABLE=1 LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties ipsec start
carol::LEAK_DETECTIVE_DISABLE=1 LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties ipsec start
dave::LEAK_DETECTIVE_DISABLE=1 LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties ipsec start
moon::LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties ipsec start
carol::LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties ipsec start
dave::LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties ipsec start
carol::sleep 1
carol::ipsec up home
dave::ipsec up home

View File

@ -6,8 +6,8 @@ alice::ln -s /etc/freeradius/sites-available/inner-tunnel-second /etc/freeradius
alice::cat /etc/freeradius/sites-enabled/inner-tunnel-second
alice::LEAK_DETECTIVE_DISABLE=1 LOG4CXX_CONFIGURATION=/etc/tnc/log4cxx.properties radiusd
moon::ipsec start
carol::LEAK_DETECTIVE_DISABLE=1 ipsec start
dave::LEAK_DETECTIVE_DISABLE=1 ipsec start
carol::ipsec start
dave::ipsec start
carol::sleep 1
carol::ipsec up home
dave::ipsec up home

View File

@ -8,8 +8,8 @@ alice::cat /etc/tnc_config
carol::cat /etc/tnc_config
dave::cat /etc/tnc_config
moon::ipsec start
carol::LEAK_DETECTIVE_DISABLE=1 ipsec start
dave::LEAK_DETECTIVE_DISABLE=1 ipsec start
carol::ipsec start
dave::ipsec start
carol::sleep 1
carol::ipsec up home
dave::ipsec up home

View File

@ -4,9 +4,9 @@ dave::iptables-restore < /etc/iptables.rules
moon::cat /etc/tnc_config
carol::cat /etc/tnc_config
dave::cat /etc/tnc_config
moon::LEAK_DETECTIVE_DISABLE=1 ipsec start
carol::LEAK_DETECTIVE_DISABLE=1 ipsec start
dave::LEAK_DETECTIVE_DISABLE=1 ipsec start
moon::ipsec start
carol::ipsec start
dave::ipsec start
carol::sleep 1
carol::ipsec up home
dave::ipsec up home