diff options
Diffstat (limited to 'package/network/services/hostapd/patches/120-reconfigure-wps-credentials.patch')
-rw-r--r-- | package/network/services/hostapd/patches/120-reconfigure-wps-credentials.patch | 178 |
1 files changed, 0 insertions, 178 deletions
diff --git a/package/network/services/hostapd/patches/120-reconfigure-wps-credentials.patch b/package/network/services/hostapd/patches/120-reconfigure-wps-credentials.patch deleted file mode 100644 index 1826b6685b..0000000000 --- a/package/network/services/hostapd/patches/120-reconfigure-wps-credentials.patch +++ /dev/null @@ -1,178 +0,0 @@ -From b389a77a0f6dccf495dbce5be9476000f6ec06a2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Rapha=C3=ABl=20M=C3=A9lotte?= <raphael.melotte@mind.be> -Date: Wed, 9 Dec 2020 19:55:53 +0100 -Subject: [PATCH] wps: reconfigure credentials on reload -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When new credentials are configured and hostapd is reconfigured using -SIGHUP (or reload on the ctrl_iface), also update the wps credentials. - -Before these changes, when WPS is triggered the registar always serves -the credentials that were configured when hostapd started. - -Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be> ---- - src/ap/wps_hostapd.c | 86 +++++++++++++++++++++++++++++++++++++++-- - src/wps/wps.h | 6 +++ - src/wps/wps_registrar.c | 29 ++++++++++++++ - 3 files changed, 118 insertions(+), 3 deletions(-) - ---- a/src/ap/wps_hostapd.c -+++ b/src/ap/wps_hostapd.c -@@ -1375,6 +1375,43 @@ static void hostapd_wps_nfc_clear(struct - #endif /* CONFIG_WPS_NFC */ - } - -+int hostapd_wps_update_multi_ap(struct hostapd_data *hapd, -+ struct wps_registrar *reg) { -+ struct hostapd_bss_config *conf = hapd->conf; -+ u8 *multi_ap_backhaul_network_key = NULL; -+ size_t multi_ap_backhaul_network_key_len = 0; -+ int ret = -1; -+ -+ if ((conf->multi_ap & FRONTHAUL_BSS) && -+ conf->multi_ap_backhaul_ssid.ssid_len) { -+ if (conf->multi_ap_backhaul_ssid.wpa_passphrase) { -+ multi_ap_backhaul_network_key = -+ (u8 *) os_strdup(conf->multi_ap_backhaul_ssid.wpa_passphrase); -+ if (multi_ap_backhaul_network_key == NULL) -+ return -1; -+ multi_ap_backhaul_network_key_len = -+ os_strlen(conf->multi_ap_backhaul_ssid.wpa_passphrase); -+ } else if (conf->multi_ap_backhaul_ssid.wpa_psk) { -+ multi_ap_backhaul_network_key = os_malloc(2 * PMK_LEN + 1); -+ if (multi_ap_backhaul_network_key == NULL) -+ return -1; -+ wpa_snprintf_hex((char *) multi_ap_backhaul_network_key, -+ 2 * PMK_LEN + 1, -+ conf->multi_ap_backhaul_ssid.wpa_psk->psk, -+ PMK_LEN); -+ multi_ap_backhaul_network_key_len = 2 * PMK_LEN; -+ } -+ ret = wps_registrar_update_multi_ap(reg, -+ conf->multi_ap_backhaul_ssid.ssid, -+ conf->multi_ap_backhaul_ssid.ssid_len, -+ multi_ap_backhaul_network_key, -+ multi_ap_backhaul_network_key_len); -+ os_free(multi_ap_backhaul_network_key); -+ } -+ return ret; -+} -+ -+ - - void hostapd_deinit_wps(struct hostapd_data *hapd) - { -@@ -1409,11 +1446,54 @@ void hostapd_update_wps(struct hostapd_d - hapd->wps->upc = hapd->conf->upc; - #endif /* CONFIG_WPS_UPNP */ - -- hostapd_wps_set_vendor_ext(hapd, hapd->wps); -- hostapd_wps_set_application_ext(hapd, hapd->wps); -+ struct wps_context *wps = hapd->wps; -+ struct hostapd_bss_config *conf = hapd->conf; -+ -+ os_memcpy(wps->ssid, conf->ssid.ssid, conf->ssid.ssid_len); -+ wps->ssid_len = conf->ssid.ssid_len; -+ -+ /* Clear wps settings, then fill them again */ -+ os_free(wps->network_key); -+ wps->network_key = NULL; -+ wps->network_key_len = 0; -+ wps->psk_set = 0; -+ if (conf->ssid.wpa_psk_file) { -+ /* Use per-device PSKs */ -+ } else if (conf->ssid.wpa_passphrase) { -+ wps->network_key = (u8 *) os_strdup(conf->ssid.wpa_passphrase); -+ if (wps->network_key == NULL) -+ return; -+ wps->network_key_len = os_strlen(conf->ssid.wpa_passphrase); -+ } else if (conf->ssid.wpa_psk) { -+ wps->network_key = os_malloc(2 * PMK_LEN + 1); -+ if (wps->network_key == NULL) -+ return; -+ wpa_snprintf_hex((char *) wps->network_key, 2 * PMK_LEN + 1, -+ conf->ssid.wpa_psk->psk, PMK_LEN); -+ wps->network_key_len = 2 * PMK_LEN; -+#ifdef CONFIG_WEP -+ } else if (conf->ssid.wep.keys_set && conf->ssid.wep.key[0]) { -+ wps->network_key = os_malloc(conf->ssid.wep.len[0]); -+ if (wps->network_key == NULL) -+ return; -+ os_memcpy(wps->network_key, conf->ssid.wep.key[0], -+ conf->ssid.wep.len[0]); -+ wps->network_key_len = conf->ssid.wep.len[0]; -+#endif /* CONFIG_WEP */ -+ } -+ -+ if (conf->ssid.wpa_psk) { -+ os_memcpy(wps->psk, conf->ssid.wpa_psk->psk, PMK_LEN); -+ wps->psk_set = 1; -+ } -+ -+ hostapd_wps_update_multi_ap(hapd, wps->registrar); -+ -+ hostapd_wps_set_vendor_ext(hapd, wps); -+ hostapd_wps_set_application_ext(hapd, wps); - - if (hapd->conf->wps_state) -- wps_registrar_update_ie(hapd->wps->registrar); -+ wps_registrar_update_ie(wps->registrar); - else - hostapd_deinit_wps(hapd); - } ---- a/src/wps/wps.h -+++ b/src/wps/wps.h -@@ -938,6 +938,12 @@ struct wpabuf * wps_build_nfc_handover_s - struct wpabuf *nfc_dh_pubkey, - struct wpabuf *nfc_dev_pw); - -+int wps_registrar_update_multi_ap(struct wps_registrar *reg, -+ const u8 *multi_ap_backhaul_ssid, -+ size_t multi_ap_backhaul_ssid_len, -+ const u8 *multi_ap_backhaul_network_key, -+ size_t multi_ap_backhaul_network_key_len); -+ - /* ndef.c */ - struct wpabuf * ndef_parse_wifi(const struct wpabuf *buf); - struct wpabuf * ndef_build_wifi(const struct wpabuf *buf); ---- a/src/wps/wps_registrar.c -+++ b/src/wps/wps_registrar.c -@@ -3669,6 +3669,35 @@ int wps_registrar_config_ap(struct wps_r - } - - -+int wps_registrar_update_multi_ap(struct wps_registrar *reg, -+ const u8 *multi_ap_backhaul_ssid, -+ size_t multi_ap_backhaul_ssid_len, -+ const u8 *multi_ap_backhaul_network_key, -+ size_t multi_ap_backhaul_network_key_len) -+{ -+ if (multi_ap_backhaul_ssid != NULL) { -+ os_memcpy(reg->multi_ap_backhaul_ssid, -+ multi_ap_backhaul_ssid, -+ multi_ap_backhaul_ssid_len); -+ reg->multi_ap_backhaul_ssid_len = -+ multi_ap_backhaul_ssid_len; -+ } -+ os_free(reg->multi_ap_backhaul_network_key); -+ reg->multi_ap_backhaul_network_key = NULL; -+ reg->multi_ap_backhaul_network_key_len = 0; -+ -+ if (multi_ap_backhaul_network_key != NULL) { -+ reg->multi_ap_backhaul_network_key = -+ os_memdup(multi_ap_backhaul_network_key, -+ multi_ap_backhaul_network_key_len); -+ if (reg->multi_ap_backhaul_network_key == NULL) -+ return -1; -+ reg->multi_ap_backhaul_network_key_len = -+ multi_ap_backhaul_network_key_len; -+ } -+ return 0; -+} -+ - #ifdef CONFIG_WPS_NFC - - int wps_registrar_add_nfc_pw_token(struct wps_registrar *reg, |