Include peer certificate always in EAP events
[mech_eap.git] / wpa_supplicant / wpas_glue.c
index 172b5f2..8029ae5 100644 (file)
@@ -115,7 +115,7 @@ static int wpa_ether_send(struct wpa_supplicant *wpa_s, const u8 *dest,
                return l2_packet_send(wpa_s->l2, dest, proto, buf, len);
        }
 
-       return wpa_drv_send_eapol(wpa_s, dest, proto, buf, len);
+       return -1;
 }
 #endif /* IEEE8021X_EAPOL || !CONFIG_NO_WPA */
 
@@ -609,12 +609,14 @@ static int wpa_supplicant_mark_authenticated(void *ctx, const u8 *target_ap)
 #ifdef CONFIG_TDLS
 
 static int wpa_supplicant_tdls_get_capa(void *ctx, int *tdls_supported,
-                                       int *tdls_ext_setup)
+                                       int *tdls_ext_setup,
+                                       int *tdls_chan_switch)
 {
        struct wpa_supplicant *wpa_s = ctx;
 
        *tdls_supported = 0;
        *tdls_ext_setup = 0;
+       *tdls_chan_switch = 0;
 
        if (!wpa_s->drv_capa_known)
                return -1;
@@ -625,6 +627,9 @@ static int wpa_supplicant_tdls_get_capa(void *ctx, int *tdls_supported,
        if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_TDLS_EXTERNAL_SETUP)
                *tdls_ext_setup = 1;
 
+       if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_TDLS_CHANNEL_SWITCH)
+               *tdls_chan_switch = 1;
+
        return 0;
 }
 
@@ -692,6 +697,25 @@ static int wpa_supplicant_tdls_peer_addset(
        return wpa_drv_sta_add(wpa_s, &params);
 }
 
+
+static int wpa_supplicant_tdls_enable_channel_switch(
+       void *ctx, const u8 *addr, u8 oper_class,
+       const struct hostapd_freq_params *params)
+{
+       struct wpa_supplicant *wpa_s = ctx;
+
+       return wpa_drv_tdls_enable_channel_switch(wpa_s, addr, oper_class,
+                                                 params);
+}
+
+
+static int wpa_supplicant_tdls_disable_channel_switch(void *ctx, const u8 *addr)
+{
+       struct wpa_supplicant *wpa_s = ctx;
+
+       return wpa_drv_tdls_disable_channel_switch(wpa_s, addr);
+}
+
 #endif /* CONFIG_TDLS */
 
 #endif /* CONFIG_NO_WPA */
@@ -800,7 +824,7 @@ static void wpa_supplicant_eap_param_needed(void *ctx,
        len = os_snprintf(buf, buflen,
                          WPA_CTRL_REQ "%s-%d:%s needed for SSID ",
                          field_name, ssid->id, txt);
-       if (len < 0 || (size_t) len >= buflen) {
+       if (os_snprintf_error(buflen, len)) {
                os_free(buf);
                return;
        }
@@ -924,6 +948,7 @@ int wpa_supplicant_init_eapol(struct wpa_supplicant *wpa_s)
        ctx->port_cb = wpa_supplicant_port_cb;
        ctx->cb = wpa_supplicant_eapol_cb;
        ctx->cert_cb = wpa_supplicant_cert_cb;
+       ctx->cert_in_cb = wpa_s->conf->cert_in_cb;
        ctx->status_cb = wpa_supplicant_status_cb;
        ctx->set_anon_id = wpa_supplicant_set_anon_id;
        ctx->cb_ctx = wpa_s;
@@ -1004,6 +1029,10 @@ int wpa_supplicant_init_wpa(struct wpa_supplicant *wpa_s)
        ctx->send_tdls_mgmt = wpa_supplicant_send_tdls_mgmt;
        ctx->tdls_oper = wpa_supplicant_tdls_oper;
        ctx->tdls_peer_addset = wpa_supplicant_tdls_peer_addset;
+       ctx->tdls_enable_channel_switch =
+               wpa_supplicant_tdls_enable_channel_switch;
+       ctx->tdls_disable_channel_switch =
+               wpa_supplicant_tdls_disable_channel_switch;
 #endif /* CONFIG_TDLS */
        ctx->set_rekey_offload = wpa_supplicant_set_rekey_offload;
        ctx->key_mgmt_set_pmk = wpa_supplicant_key_mgmt_set_pmk;
@@ -1012,6 +1041,7 @@ int wpa_supplicant_init_wpa(struct wpa_supplicant *wpa_s)
        if (wpa_s->wpa == NULL) {
                wpa_printf(MSG_ERROR, "Failed to initialize WPA state "
                           "machine");
+               os_free(ctx);
                return -1;
        }
 #endif /* CONFIG_NO_WPA */