From 74707def8f1b8cdb1755f4f5698bb52b9c8a5442 Mon Sep 17 00:00:00 2001 From: Terry Burton Date: Sun, 21 Jul 2019 13:05:55 +0100 Subject: [PATCH] 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 --- hostapd/config_file.c | 77 ------------------------------------------- src/ap/ap_config.c | 69 ++++++++++++++++++++++++++++++++++++++ src/ap/ap_config.h | 1 + 3 files changed, 70 insertions(+), 77 deletions(-) diff --git a/hostapd/config_file.c b/hostapd/config_file.c index df41f1424..29ea92e0d 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -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) { diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c index a061bd863..258a20572 100644 --- a/src/ap/ap_config.c +++ b/src/ap/ap_config.c @@ -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; diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index eebf8981d..f42505e44 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -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);