RADIUS DAS: Support Chargeable-User-Identity with Disconnect-Request
authorJouni Malinen <j@w1.fi>
Sun, 17 Jun 2012 16:44:46 +0000 (19:44 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 17 Jun 2012 16:44:46 +0000 (19:44 +0300)
Chargeable-User-Identity can now be used in Disconnect-Request to
identify the station to be disconnected.

Signed-hostap: Jouni Malinen <j@w1.fi>

src/ap/hostapd.c
src/radius/radius_das.c
src/radius/radius_das.h

index 3f007ff..22c5e65 100644 (file)
@@ -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;
index a9fcb69..8ecfffc 100644 (file)
@@ -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:
index d0719ed..738b18b 100644 (file)
@@ -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 {