GAS: Check protected/unprotected drop after action code check
[mech_eap.git] / wpa_supplicant / interworking.c
index 6a54d1e..589ee57 100644 (file)
@@ -1451,7 +1451,24 @@ static int interworking_set_eap_params(struct wpa_ssid *ssid,
                os_free(anon);
        }
 
-       if (cred->username && cred->username[0] &&
+       if (!ttls && cred->username && cred->username[0] && cred->realm &&
+           !os_strchr(cred->username, '@')) {
+               char *id;
+               size_t buflen;
+               int res;
+
+               buflen = os_strlen(cred->username) + 1 +
+                       os_strlen(cred->realm) + 1;
+
+               id = os_malloc(buflen);
+               if (!id)
+                       return -1;
+               os_snprintf(id, buflen, "%s@%s", cred->username, cred->realm);
+               res = wpa_config_set_quoted(ssid, "identity", id);
+               os_free(id);
+               if (res < 0)
+                       return -1;
+       } else if (cred->username && cred->username[0] &&
            wpa_config_set_quoted(ssid, "identity", cred->username) < 0)
                return -1;
 
@@ -2775,7 +2792,8 @@ static void anqp_add_extra(struct wpa_supplicant *wpa_s,
 static void interworking_parse_rx_anqp_resp(struct wpa_supplicant *wpa_s,
                                            struct wpa_bss *bss, const u8 *sa,
                                            u16 info_id,
-                                           const u8 *data, size_t slen)
+                                           const u8 *data, size_t slen,
+                                           u8 dialog_token)
 {
        const u8 *pos = data;
        struct wpa_bss_anqp *anqp = NULL;
@@ -2885,7 +2903,8 @@ static void interworking_parse_rx_anqp_resp(struct wpa_supplicant *wpa_s,
                        switch (type) {
                        case HS20_ANQP_OUI_TYPE:
                                hs20_parse_rx_hs20_anqp_resp(wpa_s, bss, sa,
-                                                            pos, slen);
+                                                            pos, slen,
+                                                            dialog_token);
                                break;
                        default:
                                wpa_msg(wpa_s, MSG_DEBUG,
@@ -2988,7 +3007,7 @@ void anqp_resp_cb(void *ctx, const u8 *dst, u8 dialog_token,
                        goto out_parse_done;
                }
                interworking_parse_rx_anqp_resp(wpa_s, bss, dst, info_id, pos,
-                                               slen);
+                                               slen, dialog_token);
                pos += slen;
        }