Browse Source

WPS ER: Fix Credential to use correct Enrollee MAC Address

When starting the protocol run with an Enrollee, clone the AP Settings
and replace the AP MAC Address with the Enrollee MAC Address so that the
correct value is then used in the Credential attribute in M8.
Jouni Malinen 15 years ago
parent
commit
826fe5fec3
2 changed files with 13 additions and 0 deletions
  1. 12 0
      src/wps/wps_er.c
  2. 1 0
      src/wps/wps_er.h

+ 12 - 0
src/wps/wps_er.c

@@ -85,6 +85,7 @@ static void wps_er_sta_free(struct wps_er_sta *sta)
 	os_free(sta->dev_name);
 	http_client_free(sta->http);
 	eloop_cancel_timeout(wps_er_sta_timeout, sta, NULL);
+	os_free(sta->cred);
 	os_free(sta);
 }
 
@@ -953,6 +954,17 @@ static void wps_er_sta_start(struct wps_er_sta *sta, struct wpabuf *msg)
 		return;
 	sta->wps->er = 1;
 	sta->wps->use_cred = sta->ap->ap_settings;
+	if (sta->ap->ap_settings) {
+		os_free(sta->cred);
+		sta->cred = os_malloc(sizeof(*sta->cred));
+		if (sta->cred) {
+			os_memcpy(sta->cred, sta->ap->ap_settings,
+				  sizeof(*sta->cred));
+			sta->cred->cred_attr = NULL;
+			os_memcpy(sta->cred->mac_addr, sta->addr, ETH_ALEN);
+			sta->wps->use_cred = sta->cred;
+		}
+	}
 
 	wps_er_sta_process(sta, msg, WSC_MSG);
 }

+ 1 - 0
src/wps/wps_er.h

@@ -33,6 +33,7 @@ struct wps_er_sta {
 	char *dev_name;
 	struct wps_data *wps;
 	struct http_client *http;
+	struct wps_credential *cred;
 };
 
 struct wps_er_ap {