From: Jouni Malinen Date: Sun, 17 Jun 2012 16:44:46 +0000 (+0300) Subject: RADIUS DAS: Support Chargeable-User-Identity with Disconnect-Request X-Git-Tag: hostap_2_0~621 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=302fc0a3c77c96f06722dc09b00d792e7029ab5d;p=thirdparty%2Fhostap.git 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 --- 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 {