Function added that parses EAP method strings ([eap-]type[-vendor])
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Tobias Brunner
|
||||
* Copyright (C) 2006 Martin Willi
|
||||
* Hochschule fuer Technik Rapperswil
|
||||
*
|
||||
@@ -13,8 +14,13 @@
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "eap.h"
|
||||
|
||||
#include <debug.h>
|
||||
|
||||
ENUM(eap_code_names, EAP_REQUEST, EAP_FAILURE,
|
||||
"EAP_REQUEST",
|
||||
"EAP_RESPONSE",
|
||||
@@ -120,3 +126,56 @@ eap_type_t eap_type_from_string(char *name)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* See header
|
||||
*/
|
||||
eap_vendor_type_t *eap_vendor_type_from_string(char *str)
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
eap_vendor_type_t *result = NULL;
|
||||
eap_type_t type = 0;
|
||||
u_int32_t vendor = 0;
|
||||
char *part, *end;
|
||||
|
||||
/* parse EAP method string of the form: [eap-]type[-vendor] */
|
||||
enumerator = enumerator_create_token(str, "-", " ");
|
||||
while (enumerator->enumerate(enumerator, &part))
|
||||
{
|
||||
if (!type)
|
||||
{
|
||||
if (streq(part, "eap"))
|
||||
{ /* skip 'eap' at the beginning */
|
||||
continue;
|
||||
}
|
||||
type = eap_type_from_string(part);
|
||||
if (!type)
|
||||
{
|
||||
type = strtoul(part, &end, 0);
|
||||
if (*end != '\0' || errno)
|
||||
{
|
||||
DBG1(DBG_LIB, "unknown or invalid EAP method: %s", part);
|
||||
break;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
vendor = strtoul(part, &end, 0);
|
||||
if (*end != '\0' || errno)
|
||||
{
|
||||
DBG1(DBG_LIB, "invalid EAP vendor: %s", part);
|
||||
type = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
enumerator->destroy(enumerator);
|
||||
|
||||
if (type)
|
||||
{
|
||||
INIT(result,
|
||||
.type = type,
|
||||
.vendor = vendor,
|
||||
);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user