Parcourir la source

WPS ER: Do not try to process AP Settings in proxied M7 to ER

In this case, the Enrollee is not an AP, so do not try to process
AP Settings in M7.
Jouni Malinen il y a 15 ans
Parent
commit
f6d23cfd9e
3 fichiers modifiés avec 8 ajouts et 2 suppressions
  1. 1 0
      src/wps/wps_er.c
  2. 5 0
      src/wps/wps_i.h
  3. 2 2
      src/wps/wps_registrar.c

+ 1 - 0
src/wps/wps_er.c

@@ -949,6 +949,7 @@ static void wps_er_sta_start(struct wps_er_sta *sta, struct wpabuf *msg)
 	sta->wps = wps_init(&cfg);
 	if (sta->wps == NULL)
 		return;
+	sta->wps->er = 1;
 
 	wps_er_sta_process(sta, msg, WSC_MSG);
 }

+ 5 - 0
src/wps/wps_i.h

@@ -34,6 +34,11 @@ struct wps_data {
 	 */
 	int registrar;
 
+	/**
+	 * er - Whether the local end is an external registrar
+	 */
+	int er;
+
 	enum {
 		/* Enrollee states */
 		SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,

+ 2 - 2
src/wps/wps_registrar.c

@@ -2215,7 +2215,7 @@ static void wps_cred_update(struct wps_credential *dst,
 static int wps_process_ap_settings_r(struct wps_data *wps,
 				     struct wps_parse_attr *attr)
 {
-	if (wps->wps->ap)
+	if (wps->wps->ap || wps->er)
 		return 0;
 
 	/* AP Settings Attributes in M7 when Enrollee is an AP */
@@ -2273,7 +2273,7 @@ static enum wps_process_res wps_process_m7(struct wps_data *wps,
 	decrypted = wps_decrypt_encr_settings(wps, attr->encr_settings,
 					      attr->encr_settings_len);
 	if (decrypted == NULL) {
-		wpa_printf(MSG_DEBUG, "WPS: Failed to decrypted Encrypted "
+		wpa_printf(MSG_DEBUG, "WPS: Failed to decrypt Encrypted "
 			   "Settings attribute");
 		wps->state = SEND_WSC_NACK;
 		return WPS_CONTINUE;