Parcourir la source

Removed registrar pointer from wps_config and wps_data

wps_context::registrar can be used as the only location for this
pointer.
Jouni Malinen il y a 16 ans
Parent
commit
41c00105f2
6 fichiers modifiés avec 24 ajouts et 25 suppressions
  1. 1 1
      src/eap_peer/eap_wsc.c
  2. 1 1
      src/eap_server/eap_wsc.c
  3. 2 2
      src/wps/wps.c
  4. 2 4
      src/wps/wps.h
  5. 2 3
      src/wps/wps_i.h
  6. 16 14
      src/wps/wps_registrar.c

+ 1 - 1
src/eap_peer/eap_wsc.c

@@ -160,7 +160,7 @@ static void * eap_wsc_init(struct eap_sm *sm)
 
 	os_memset(&cfg, 0, sizeof(cfg));
 	cfg.wps = wps;
-	cfg.registrar = registrar ? data->wps_ctx->registrar : NULL;
+	cfg.registrar = registrar;
 
 	phase1 = eap_get_config_phase1(sm);
 	if (phase1 == NULL) {

+ 1 - 1
src/eap_server/eap_wsc.c

@@ -90,6 +90,7 @@ static void * eap_wsc_init(struct eap_sm *sm)
 
 	os_memset(&cfg, 0, sizeof(cfg));
 	cfg.wps = sm->wps;
+	cfg.registrar = registrar;
 	if (registrar) {
 		if (sm->wps == NULL || sm->wps->registrar == NULL) {
 			wpa_printf(MSG_INFO, "EAP-WSC: WPS Registrar not "
@@ -97,7 +98,6 @@ static void * eap_wsc_init(struct eap_sm *sm)
 			os_free(data);
 			return NULL;
 		}
-		cfg.registrar = sm->wps->registrar;
 	} else {
 		if (sm->user == NULL || sm->user->password == NULL) {
 			wpa_printf(MSG_INFO, "EAP-WSC: No AP PIN (password) "

+ 2 - 2
src/wps/wps.c

@@ -102,10 +102,10 @@ void wps_deinit(struct wps_data *data)
 		wpa_printf(MSG_DEBUG, "WPS: Full PIN information revealed and "
 			   "negotiation failed");
 		if (data->registrar)
-			wps_registrar_invalidate_pin(data->registrar,
+			wps_registrar_invalidate_pin(data->wps->registrar,
 						     data->uuid_e);
 	} else if (data->registrar)
-		wps_registrar_unlock_pin(data->registrar, data->uuid_e);
+		wps_registrar_unlock_pin(data->wps->registrar, data->uuid_e);
 
 	wpabuf_free(data->dh_privkey);
 	wpabuf_free(data->dh_pubkey_e);

+ 2 - 4
src/wps/wps.h

@@ -91,11 +91,9 @@ struct wps_config {
 	struct wps_context *wps;
 
 	/**
-	 * registrar - Pointer to WPS registrar data from wps_registrar_init()
-	 * This is only used if the local end is Registrar; set to %NULL for
-	 * Enrollee.
+	 * registrar - Whether this end is a Registrar
 	 */
-	struct wps_registrar *registrar;
+	int registrar;
 
 	/**
 	 * pin - Enrollee Device Password (%NULL for Registrar or PBC)

+ 2 - 3
src/wps/wps_i.h

@@ -30,10 +30,9 @@ struct wps_data {
 	struct wps_context *wps;
 
 	/**
-	 * registrar - Pointer to WPS registrar data from wps_registrar_init()
-	 * This is only used if the local end is Registrar.
+	 * registrar - Whether this end is a Registrar
 	 */
-	struct wps_registrar *registrar;
+	int registrar;
 
 	enum {
 		/* Enrollee states */

+ 16 - 14
src/wps/wps_registrar.c

@@ -685,13 +685,14 @@ static int wps_get_dev_password(struct wps_data *wps)
 		pin = (const u8 *) "00000000";
 		pin_len = 8;
 	} else {
-		pin = wps_registrar_get_pin(wps->registrar, wps->uuid_e,
+		pin = wps_registrar_get_pin(wps->wps->registrar, wps->uuid_e,
 					    &pin_len);
 	}
 	if (pin == NULL) {
 		wpa_printf(MSG_DEBUG, "WPS: No Device Password available for "
 			   "the Enrollee");
-		wps_cb_pin_needed(wps->registrar, wps->uuid_e, &wps->peer_dev);
+		wps_cb_pin_needed(wps->wps->registrar, wps->uuid_e,
+				  &wps->peer_dev);
 		return -1;
 	}
 
@@ -1013,7 +1014,7 @@ static struct wpabuf * wps_build_m2(struct wps_data *wps)
 	    wps_build_auth_type_flags(wps, msg) ||
 	    wps_build_encr_type_flags(wps, msg) ||
 	    wps_build_conn_type_flags(wps, msg) ||
-	    wps_build_config_methods_r(wps->registrar, msg) ||
+	    wps_build_config_methods_r(wps->wps->registrar, msg) ||
 	    wps_build_device_attrs(&wps->wps->dev, msg) ||
 	    wps_build_rf_bands(&wps->wps->dev, msg) ||
 	    wps_build_assoc_state(wps, msg) ||
@@ -1051,7 +1052,7 @@ static struct wpabuf * wps_build_m2d(struct wps_data *wps)
 	    wps_build_auth_type_flags(wps, msg) ||
 	    wps_build_encr_type_flags(wps, msg) ||
 	    wps_build_conn_type_flags(wps, msg) ||
-	    wps_build_config_methods_r(wps->registrar, msg) ||
+	    wps_build_config_methods_r(wps->wps->registrar, msg) ||
 	    wps_build_device_attrs(&wps->wps->dev, msg) ||
 	    wps_build_rf_bands(&wps->wps->dev, msg) ||
 	    wps_build_assoc_state(wps, msg) ||
@@ -1427,7 +1428,7 @@ static int wps_process_e_snonce2(struct wps_data *wps, const u8 *e_snonce2)
 	if (os_memcmp(wps->peer_hash2, hash, WPS_HASH_LEN) != 0) {
 		wpa_printf(MSG_DEBUG, "WPS: E-Hash2 derived from E-S2 does "
 			   "not match with the pre-committed value");
-		wps_registrar_invalidate_pin(wps->registrar, wps->uuid_e);
+		wps_registrar_invalidate_pin(wps->wps->registrar, wps->uuid_e);
 		wps->config_error = WPS_CFG_DEV_PASSWORD_AUTH_FAILURE;
 		return -1;
 	}
@@ -1435,7 +1436,7 @@ static int wps_process_e_snonce2(struct wps_data *wps, const u8 *e_snonce2)
 	wpa_printf(MSG_DEBUG, "WPS: Enrollee proved knowledge of the second "
 		   "half of the device password");
 	wps->wps_pin_revealed = 0;
-	wps_registrar_unlock_pin(wps->registrar, wps->uuid_e);
+	wps_registrar_unlock_pin(wps->wps->registrar, wps->uuid_e);
 
 	return 0;
 }
@@ -1636,7 +1637,8 @@ static enum wps_process_res wps_process_m1(struct wps_data *wps,
 	    wps->dev_pw_id != DEV_PW_USER_SPECIFIED &&
 	    wps->dev_pw_id != DEV_PW_MACHINE_SPECIFIED &&
 	    wps->dev_pw_id != DEV_PW_REGISTRAR_SPECIFIED &&
-	    (wps->dev_pw_id != DEV_PW_PUSHBUTTON || !wps->registrar->pbc)) {
+	    (wps->dev_pw_id != DEV_PW_PUSHBUTTON ||
+	     !wps->wps->registrar->pbc)) {
 		wpa_printf(MSG_DEBUG, "WPS: Unsupported Device Password ID %d",
 			   wps->dev_pw_id);
 		wps->state = SEND_M2D;
@@ -1644,15 +1646,15 @@ static enum wps_process_res wps_process_m1(struct wps_data *wps,
 	}
 
 	if (wps->dev_pw_id == DEV_PW_PUSHBUTTON) {
-		if (wps_registrar_pbc_overlap(wps->registrar, wps->mac_addr_e,
-					      wps->uuid_e)) {
+		if (wps_registrar_pbc_overlap(wps->wps->registrar,
+					      wps->mac_addr_e, wps->uuid_e)) {
 			wpa_printf(MSG_DEBUG, "WPS: PBC overlap - deny PBC "
 				   "negotiation");
 			wps->state = SEND_M2D;
 			return WPS_CONTINUE;
 		}
-		wps_registrar_add_pbc_session(wps->registrar, wps->mac_addr_e,
-					      wps->uuid_e);
+		wps_registrar_add_pbc_session(wps->wps->registrar,
+					      wps->mac_addr_e, wps->uuid_e);
 		wps->pbc = 1;
 	}
 
@@ -2078,7 +2080,7 @@ static enum wps_process_res wps_process_wsc_done(struct wps_data *wps,
 	}
 
 	if (wps->new_psk) {
-		if (wps_cb_new_psk(wps->registrar, wps->mac_addr_e,
+		if (wps_cb_new_psk(wps->wps->registrar, wps->mac_addr_e,
 				   wps->new_psk, wps->new_psk_len)) {
 			wpa_printf(MSG_DEBUG, "WPS: Failed to configure the "
 				   "new PSK");
@@ -2088,9 +2090,9 @@ static enum wps_process_res wps_process_wsc_done(struct wps_data *wps,
 	}
 
 	if (wps->pbc) {
-		wps_registrar_remove_pbc_session(wps->registrar,
+		wps_registrar_remove_pbc_session(wps->wps->registrar,
 						 wps->mac_addr_e, wps->uuid_e);
-		wps_registrar_pbc_completed(wps->registrar);
+		wps_registrar_pbc_completed(wps->wps->registrar);
 	}
 
 	wps_success_event(wps->wps);