Move hostapd_parse_radius_attr() into ap_config.c
We will want to parse RADIUS attributes in config file format when retrieving them from an SQLite database. Signed-off-by: Terry Burton <tez@terryburton.co.uk>
This commit is contained in:
parent
1e5ea68d1f
commit
74707def8f
3 changed files with 70 additions and 77 deletions
|
@ -24,14 +24,6 @@
|
|||
#include "config_file.h"
|
||||
|
||||
|
||||
#ifndef CONFIG_NO_RADIUS
|
||||
#ifdef EAP_SERVER
|
||||
static struct hostapd_radius_attr *
|
||||
hostapd_parse_radius_attr(const char *value);
|
||||
#endif /* EAP_SERVER */
|
||||
#endif /* CONFIG_NO_RADIUS */
|
||||
|
||||
|
||||
#ifndef CONFIG_NO_VLAN
|
||||
static int hostapd_config_read_vlan_file(struct hostapd_bss_config *bss,
|
||||
const char *fname)
|
||||
|
@ -660,75 +652,6 @@ hostapd_config_read_radius_addr(struct hostapd_radius_server **server,
|
|||
}
|
||||
|
||||
|
||||
static struct hostapd_radius_attr *
|
||||
hostapd_parse_radius_attr(const char *value)
|
||||
{
|
||||
const char *pos;
|
||||
char syntax;
|
||||
struct hostapd_radius_attr *attr;
|
||||
size_t len;
|
||||
|
||||
attr = os_zalloc(sizeof(*attr));
|
||||
if (attr == NULL)
|
||||
return NULL;
|
||||
|
||||
attr->type = atoi(value);
|
||||
|
||||
pos = os_strchr(value, ':');
|
||||
if (pos == NULL) {
|
||||
attr->val = wpabuf_alloc(1);
|
||||
if (attr->val == NULL) {
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
wpabuf_put_u8(attr->val, 0);
|
||||
return attr;
|
||||
}
|
||||
|
||||
pos++;
|
||||
if (pos[0] == '\0' || pos[1] != ':') {
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
syntax = *pos++;
|
||||
pos++;
|
||||
|
||||
switch (syntax) {
|
||||
case 's':
|
||||
attr->val = wpabuf_alloc_copy(pos, os_strlen(pos));
|
||||
break;
|
||||
case 'x':
|
||||
len = os_strlen(pos);
|
||||
if (len & 1)
|
||||
break;
|
||||
len /= 2;
|
||||
attr->val = wpabuf_alloc(len);
|
||||
if (attr->val == NULL)
|
||||
break;
|
||||
if (hexstr2bin(pos, wpabuf_put(attr->val, len), len) < 0) {
|
||||
wpabuf_free(attr->val);
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
attr->val = wpabuf_alloc(4);
|
||||
if (attr->val)
|
||||
wpabuf_put_be32(attr->val, atoi(pos));
|
||||
break;
|
||||
default:
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (attr->val == NULL) {
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return attr;
|
||||
}
|
||||
|
||||
|
||||
static int hostapd_parse_das_client(struct hostapd_bss_config *bss, char *val)
|
||||
{
|
||||
|
|
|
@ -476,6 +476,75 @@ hostapd_config_get_radius_attr(struct hostapd_radius_attr *attr, u8 type)
|
|||
}
|
||||
|
||||
|
||||
struct hostapd_radius_attr * hostapd_parse_radius_attr(const char *value)
|
||||
{
|
||||
const char *pos;
|
||||
char syntax;
|
||||
struct hostapd_radius_attr *attr;
|
||||
size_t len;
|
||||
|
||||
attr = os_zalloc(sizeof(*attr));
|
||||
if (!attr)
|
||||
return NULL;
|
||||
|
||||
attr->type = atoi(value);
|
||||
|
||||
pos = os_strchr(value, ':');
|
||||
if (!pos) {
|
||||
attr->val = wpabuf_alloc(1);
|
||||
if (!attr->val) {
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
wpabuf_put_u8(attr->val, 0);
|
||||
return attr;
|
||||
}
|
||||
|
||||
pos++;
|
||||
if (pos[0] == '\0' || pos[1] != ':') {
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
syntax = *pos++;
|
||||
pos++;
|
||||
|
||||
switch (syntax) {
|
||||
case 's':
|
||||
attr->val = wpabuf_alloc_copy(pos, os_strlen(pos));
|
||||
break;
|
||||
case 'x':
|
||||
len = os_strlen(pos);
|
||||
if (len & 1)
|
||||
break;
|
||||
len /= 2;
|
||||
attr->val = wpabuf_alloc(len);
|
||||
if (!attr->val)
|
||||
break;
|
||||
if (hexstr2bin(pos, wpabuf_put(attr->val, len), len) < 0) {
|
||||
wpabuf_free(attr->val);
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
attr->val = wpabuf_alloc(4);
|
||||
if (attr->val)
|
||||
wpabuf_put_be32(attr->val, atoi(pos));
|
||||
break;
|
||||
default:
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!attr->val) {
|
||||
os_free(attr);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return attr;
|
||||
}
|
||||
|
||||
|
||||
static void hostapd_config_free_radius_attr(struct hostapd_radius_attr *attr)
|
||||
{
|
||||
struct hostapd_radius_attr *prev;
|
||||
|
|
|
@ -1092,6 +1092,7 @@ const char * hostapd_get_vlan_id_ifname(struct hostapd_vlan *vlan,
|
|||
int vlan_id);
|
||||
struct hostapd_radius_attr *
|
||||
hostapd_config_get_radius_attr(struct hostapd_radius_attr *attr, u8 type);
|
||||
struct hostapd_radius_attr * hostapd_parse_radius_attr(const char *value);
|
||||
int hostapd_config_check(struct hostapd_config *conf, int full_config);
|
||||
void hostapd_set_security_params(struct hostapd_bss_config *bss,
|
||||
int full_config);
|
||||
|
|
Loading…
Reference in a new issue