From 302fc0a3c77c96f06722dc09b00d792e7029ab5d Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 17 Jun 2012 19:44:46 +0300 Subject: [PATCH] RADIUS DAS: Support Chargeable-User-Identity with Disconnect-Request Chargeable-User-Identity can now be used in Disconnect-Request to identify the station to be disconnected. Signed-hostap: Jouni Malinen --- src/ap/hostapd.c | 11 +++++++++++ src/radius/radius_das.c | 6 ++++++ src/radius/radius_das.h | 2 ++ 3 files changed, 19 insertions(+) diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index 3f007ff24..22c5e654a 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -541,6 +541,17 @@ static struct sta_info * hostapd_das_find_sta(struct hostapd_data *hapd, } } + if (sta == NULL && attr->cui) { + for (sta = hapd->sta_list; sta; sta = sta->next) { + struct wpabuf *cui; + cui = ieee802_1x_get_radius_cui(sta->eapol_sm); + if (cui && wpabuf_len(cui) == attr->cui_len && + os_memcmp(wpabuf_head(cui), attr->cui, + attr->cui_len) == 0) + break; + } + } + if (sta == NULL && attr->user_name) { for (sta = hapd->sta_list; sta; sta = sta->next) { u8 *identity; diff --git a/src/radius/radius_das.c b/src/radius/radius_das.c index a9fcb6925..8ecfffc97 100644 --- a/src/radius/radius_das.c +++ b/src/radius/radius_das.c @@ -97,6 +97,12 @@ static struct radius_msg * radius_das_disconnect(struct radius_das_data *das, attrs.acct_session_id_len = len; } + if (radius_msg_get_attr_ptr(msg, RADIUS_ATTR_CHARGEABLE_USER_IDENTITY, + &buf, &len, NULL) == 0) { + attrs.cui = buf; + attrs.cui_len = len; + } + res = das->disconnect(das->ctx, &attrs); switch (res) { case RADIUS_DAS_NAS_MISMATCH: diff --git a/src/radius/radius_das.h b/src/radius/radius_das.h index d0719eddc..738b18b05 100644 --- a/src/radius/radius_das.h +++ b/src/radius/radius_das.h @@ -23,6 +23,8 @@ struct radius_das_attrs { size_t user_name_len; const u8 *acct_session_id; size_t acct_session_id_len; + const u8 *cui; + size_t cui_len; }; struct radius_das_conf {