From 07d9a55297a49b7e001452d20982105bf2da55d8 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Mon, 20 Apr 2009 16:11:08 +0300 Subject: [PATCH] wpa_supplicant AP: Update WPA/RSN configuration Couple of additional operations are needed to make hostapd configuration valid for WPA. --- wpa_supplicant/ap.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c index 113516a..9fcdaab 100644 --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c @@ -283,7 +283,7 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, struct hostapd_config *conf) { struct hostapd_bss_config *bss = &conf->bss[0]; - int j; + int j, pairwise; for (j = 0; wpa_drivers[j]; j++) { if (os_strcmp("wpa_supplicant", wpa_drivers[j]->name) == 0) { @@ -333,8 +333,6 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, bss->wpa_pairwise = ssid->pairwise_cipher; if (ssid->passphrase) { bss->ssid.wpa_passphrase = os_strdup(ssid->passphrase); - if (hostapd_setup_wpa_psk(bss)) - return -1; } else if (ssid->psk_set) { os_free(bss->ssid.wpa_psk); bss->ssid.wpa_psk = os_zalloc(sizeof(struct hostapd_wpa_psk)); @@ -344,6 +342,32 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, bss->ssid.wpa_psk->group = 1; } + /* Select group cipher based on the enabled pairwise cipher suites */ + pairwise = 0; + if (bss->wpa & 1) + pairwise |= bss->wpa_pairwise; + if (bss->wpa & 2) { + if (bss->rsn_pairwise == 0) + bss->rsn_pairwise = bss->wpa_pairwise; + pairwise |= bss->rsn_pairwise; + } + if (pairwise & WPA_CIPHER_TKIP) + bss->wpa_group = WPA_CIPHER_TKIP; + else + bss->wpa_group = WPA_CIPHER_CCMP; + + if (bss->wpa && bss->ieee802_1x) + bss->ssid.security_policy = SECURITY_WPA; + else if (bss->wpa) + bss->ssid.security_policy = SECURITY_WPA_PSK; + else if (bss->ieee802_1x) { + bss->ssid.security_policy = SECURITY_IEEE_802_1X; + bss->ssid.wep.default_len = bss->default_wep_key_len; + } else if (bss->ssid.wep.keys_set) + bss->ssid.security_policy = SECURITY_STATIC_WEP; + else + bss->ssid.security_policy = SECURITY_PLAINTEXT; + return 0; } -- 1.7.9.5