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
|
* Copyright (C) 2006 Martin Willi
|
||||||
* Hochschule fuer Technik Rapperswil
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
@@ -13,8 +14,13 @@
|
|||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "eap.h"
|
#include "eap.h"
|
||||||
|
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
ENUM(eap_code_names, EAP_REQUEST, EAP_FAILURE,
|
ENUM(eap_code_names, EAP_REQUEST, EAP_FAILURE,
|
||||||
"EAP_REQUEST",
|
"EAP_REQUEST",
|
||||||
"EAP_RESPONSE",
|
"EAP_RESPONSE",
|
||||||
@@ -120,3 +126,56 @@ eap_type_t eap_type_from_string(char *name)
|
|||||||
}
|
}
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2012 Tobias Brunner
|
||||||
* Copyright (C) 2010 Martin Willi
|
* Copyright (C) 2010 Martin Willi
|
||||||
* Copyright (C) 2010 revosec AG
|
* Copyright (C) 2010 revosec AG
|
||||||
|
* Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License as published by the
|
||||||
@@ -23,6 +25,7 @@
|
|||||||
|
|
||||||
typedef enum eap_code_t eap_code_t;
|
typedef enum eap_code_t eap_code_t;
|
||||||
typedef enum eap_type_t eap_type_t;
|
typedef enum eap_type_t eap_type_t;
|
||||||
|
typedef struct eap_vendor_type_t eap_vendor_type_t;
|
||||||
|
|
||||||
#include <library.h>
|
#include <library.h>
|
||||||
|
|
||||||
@@ -82,6 +85,22 @@ extern enum_name_t *eap_type_names;
|
|||||||
*/
|
*/
|
||||||
extern enum_name_t *eap_type_short_names;
|
extern enum_name_t *eap_type_short_names;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Struct that stores EAP type and vendor ID
|
||||||
|
*/
|
||||||
|
struct eap_vendor_type_t {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EAP type
|
||||||
|
*/
|
||||||
|
eap_type_t type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vendor Id
|
||||||
|
*/
|
||||||
|
u_int32_t vendor;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EAP packet format
|
* EAP packet format
|
||||||
*/
|
*/
|
||||||
@@ -101,4 +120,12 @@ typedef struct __attribute__((packed)) {
|
|||||||
*/
|
*/
|
||||||
eap_type_t eap_type_from_string(char *name);
|
eap_type_t eap_type_from_string(char *name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a string of the form [eap-]type[-vendor].
|
||||||
|
*
|
||||||
|
* @param str EAP method string
|
||||||
|
* @return parsed type (gets allocated), NULL if unknown or failed
|
||||||
|
*/
|
||||||
|
eap_vendor_type_t *eap_vendor_type_from_string(char *str);
|
||||||
|
|
||||||
#endif /** EAP_H_ @}*/
|
#endif /** EAP_H_ @}*/
|
||||||
|
|||||||
Reference in New Issue
Block a user