diff mbox

interworking: Allow user to specify key-mgmt, proto, pairwise defaults.

Message ID 1399577473-30767-1-git-send-email-greearb@candelatech.com
State Superseded
Headers show

Commit Message

Ben Greear May 8, 2014, 7:31 p.m. UTC
From: Ben Greear <greearb@candelatech.com>

This enables inteworking + .11r configs.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---

NOTE:  This sits on top of my entire patch set, though I think the
main prereq is the 7/15 patch I posted about earlier today.

Entire patch set found here:
https://github.com/greearb/hostap-ct/commits/master

 wpa_supplicant/config.c       | 13 ++++++++++++-
 wpa_supplicant/config.h       |  2 +-
 wpa_supplicant/events.c       |  3 ++-
 wpa_supplicant/interworking.c | 27 ++++++++++++++++++---------
 4 files changed, 33 insertions(+), 12 deletions(-)

Comments

Jouni Malinen May 10, 2014, 10:44 a.m. UTC | #1
On Thu, May 08, 2014 at 12:31:13PM -0700, greearb@candelatech.com wrote:
> This enables inteworking + .11r configs.

Why would user need to specify this? I'd much rather have FT enabled
automatically since there is really an expectation of strong security
being used with Hotspot 2.0 and as such, allowing something like
pairwise=TKIP sounds undesirable.
Ben Greear May 10, 2014, 4:26 p.m. UTC | #2
On 05/10/2014 03:44 AM, Jouni Malinen wrote:
> On Thu, May 08, 2014 at 12:31:13PM -0700, greearb@candelatech.com wrote:
>> This enables inteworking + .11r configs.
>
> Why would user need to specify this? I'd much rather have FT enabled
> automatically since there is really an expectation of strong security
> being used with Hotspot 2.0 and as such, allowing something like
> pairwise=TKIP sounds undesirable.

Ok, I think your patch would work for the .11r issue I saw.

What about the over-rides in the first patch I sent though?

Thanks,
Ben
diff mbox

Patch

diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index b90720e..284c6d5 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -2150,14 +2150,17 @@  int wpa_config_remove_network(struct wpa_config *config, int id)
  *   disable_ht40=0
  *   etc.
  * If no ssid is found, no action is taken.
+ * Returns: 1 if found user-default section, 0 otherwise.
  */
-void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid)
+int wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid)
 {
 	struct wpa_ssid *s = config->ssid;
 	int i;
+	int rv = 0;
 
 	while (s) {
 		if (s->interworking_defaults) {
+			rv = 1;
 			os_free(ssid->scan_freq);
 			ssid->scan_freq = NULL;
 			int_array_concat(&ssid->scan_freq, s->scan_freq);
@@ -2167,6 +2170,13 @@  void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_
 			int_array_concat(&ssid->freq_list, s->freq_list);
 
 			ssid->bg_scan_period = s->bg_scan_period;
+
+			/* Relates to that set in interworking_set_hs20_params */
+			ssid->pairwise_cipher = s->pairwise_cipher;
+			ssid->group_cipher = s->group_cipher;
+			ssid->key_mgmt = s->key_mgmt;
+			ssid->proto = s->proto;
+
 #ifdef CONFIG_HT_OVERRIDES
 			ssid->disable_ht = s->disable_ht;
 			ssid->disable_ht40 = s->disable_ht40;
@@ -2208,6 +2218,7 @@  void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_
 			ssid = ssid->next;
 		}
 	}
+	return rv;
 } /* wpa_set_user_network_defaults */
 
 /**
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index 3e13f68..bda46ed 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -1046,7 +1046,7 @@  struct wpa_ssid * wpa_config_get_network(struct wpa_config *config, int id);
 struct wpa_ssid * wpa_config_add_network(struct wpa_config *config);
 int wpa_config_remove_network(struct wpa_config *config, int id);
 void wpa_config_set_network_defaults(struct wpa_ssid *ssid);
-void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid);
+int wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid);
 int wpa_config_set(struct wpa_ssid *ssid, const char *var, const char *value,
 		   int line);
 int wpa_config_set_quoted(struct wpa_ssid *ssid, const char *var,
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 40b5c47..06436b9 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -466,7 +466,8 @@  static int wpa_supplicant_ssid_bss_match(struct wpa_supplicant *wpa_s,
 
 		if (!(ie.key_mgmt & ssid->key_mgmt)) {
 			wpa_dbg(wpa_s, MSG_DEBUG, "   skip RSN IE - key mgmt "
-				"mismatch");
+				"mismatch, IE: 0x%x  ssid: 0x%x",
+				ie.key_mgmt, ssid->key_mgmt);
 			break;
 		}
 
diff --git a/wpa_supplicant/interworking.c b/wpa_supplicant/interworking.c
index fca6562..56aa925 100644
--- a/wpa_supplicant/interworking.c
+++ b/wpa_supplicant/interworking.c
@@ -935,6 +935,7 @@  static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s,
 	int eap_type;
 	int res;
 	char prefix;
+	int user_defaults;
 
 	if (bss->anqp == NULL || bss->anqp->anqp_3gpp == NULL)
 		return -1;
@@ -957,7 +958,7 @@  static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s,
 
 	wpas_notify_network_added(wpa_s, ssid);
 	wpa_config_set_network_defaults(ssid);
-	wpa_config_set_user_network_defaults(wpa_s->conf, ssid);
+	user_defaults = wpa_config_set_user_network_defaults(wpa_s->conf, ssid);
 	ssid->priority = cred->priority;
 	ssid->temporary = 1;
 	ssid->ssid = os_zalloc(bss->ssid_len + 1);
@@ -966,8 +967,10 @@  static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s,
 	os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len);
 	ssid->ssid_len = bss->ssid_len;
 
-	if (interworking_set_hs20_params(wpa_s, ssid) < 0)
-		goto fail;
+	if (!user_defaults) {
+		if (interworking_set_hs20_params(wpa_s, ssid) < 0)
+			goto fail;
+	}
 
 	eap_type = EAP_TYPE_SIM;
 	if (cred->pcsc && wpa_s->scard && scard_supports_umts(wpa_s->scard))
@@ -1475,6 +1478,7 @@  static int interworking_connect_roaming_consortium(
 	struct wpa_bss *bss)
 {
 	struct wpa_ssid *ssid;
+	int user_defaults;
 
 	wpa_msg(wpa_s, MSG_DEBUG, "Interworking: Connect with " MACSTR " based on "
 		"roaming consortium match", MAC2STR(bss->bssid));
@@ -1493,7 +1497,7 @@  static int interworking_connect_roaming_consortium(
 	ssid->parent_cred = cred;
 	wpas_notify_network_added(wpa_s, ssid);
 	wpa_config_set_network_defaults(ssid);
-	wpa_config_set_user_network_defaults(wpa_s->conf, ssid);
+	user_defaults = wpa_config_set_user_network_defaults(wpa_s->conf, ssid);
 	ssid->priority = cred->priority;
 	ssid->temporary = 1;
 	ssid->ssid = os_zalloc(bss->ssid_len + 1);
@@ -1502,8 +1506,10 @@  static int interworking_connect_roaming_consortium(
 	os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len);
 	ssid->ssid_len = bss->ssid_len;
 
-	if (interworking_set_hs20_params(wpa_s, ssid) < 0)
-		goto fail;
+	if (!user_defaults) {
+		if (interworking_set_hs20_params(wpa_s, ssid) < 0)
+			goto fail;
+	}
 
 	if (cred->eap_method == NULL) {
 		wpa_msg(wpa_s, MSG_DEBUG, "Interworking: No EAP method set for "
@@ -1540,6 +1546,7 @@  static int interworking_connect_helper(struct wpa_supplicant *wpa_s,
 	u16 count, i;
 	char buf[100];
 	int excluded = 0, *excl = allow_excluded ? &excluded : NULL;
+	int user_defaults;
 
 	if (wpa_s->conf->cred == NULL || bss == NULL)
 		return -1;
@@ -1692,7 +1699,7 @@  static int interworking_connect_helper(struct wpa_supplicant *wpa_s,
 	ssid->parent_cred = cred;
 	wpas_notify_network_added(wpa_s, ssid);
 	wpa_config_set_network_defaults(ssid);
-	wpa_config_set_user_network_defaults(wpa_s->conf, ssid);
+	user_defaults = wpa_config_set_user_network_defaults(wpa_s->conf, ssid);
 	ssid->priority = cred->priority;
 	ssid->temporary = 1;
 	ssid->ssid = os_zalloc(bss->ssid_len + 1);
@@ -1701,8 +1708,10 @@  static int interworking_connect_helper(struct wpa_supplicant *wpa_s,
 	os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len);
 	ssid->ssid_len = bss->ssid_len;
 
-	if (interworking_set_hs20_params(wpa_s, ssid) < 0)
-		goto fail;
+	if (!user_defaults) {
+		if (interworking_set_hs20_params(wpa_s, ssid) < 0)
+			goto fail;
+	}
 
 	if (wpa_config_set(ssid, "eap", eap_get_name(EAP_VENDOR_IETF,
 						     eap->method), 0) < 0)