Added wps_cred_processing configuration option for hostapd
This behaves like the one in wpa_supplicant, i.e., hostapd can be configured not to process new credentials (AP settings) internally and instead pass the WPS attributes for an external program to process over ctrl_iface.
This commit is contained in:
parent
42d16805c9
commit
d745c7cc1a
4 changed files with 27 additions and 1 deletions
|
@ -2227,6 +2227,8 @@ struct hostapd_config * hostapd_config_read(const char *fname)
|
||||||
line, pos);
|
line, pos);
|
||||||
errors++;
|
errors++;
|
||||||
}
|
}
|
||||||
|
} else if (os_strcmp(buf, "wps_cred_processing") == 0) {
|
||||||
|
bss->wps_cred_processing = atoi(pos);
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
} else {
|
} else {
|
||||||
wpa_printf(MSG_ERROR, "Line %d: unknown configuration "
|
wpa_printf(MSG_ERROR, "Line %d: unknown configuration "
|
||||||
|
|
|
@ -303,6 +303,7 @@ struct hostapd_bss_config {
|
||||||
int skip_cred_build;
|
int skip_cred_build;
|
||||||
u8 *extra_cred;
|
u8 *extra_cred;
|
||||||
size_t extra_cred_len;
|
size_t extra_cred_len;
|
||||||
|
int wps_cred_processing;
|
||||||
#endif /* CONFIG_WPS */
|
#endif /* CONFIG_WPS */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -948,6 +948,14 @@ own_ip_addr=127.0.0.1
|
||||||
# attribute(s) as binary data.
|
# attribute(s) as binary data.
|
||||||
#extra_cred=hostapd.cred
|
#extra_cred=hostapd.cred
|
||||||
|
|
||||||
|
# Credential processing
|
||||||
|
# 0 = process received credentials internally (default)
|
||||||
|
# 1 = do not process received credentials; just pass them over ctrl_iface to
|
||||||
|
# external program(s)
|
||||||
|
# 2 = process received credentials internally and pass them over ctrl_iface
|
||||||
|
# to external program(s)
|
||||||
|
#wps_cred_processing=0
|
||||||
|
|
||||||
|
|
||||||
##### Multiple BSSID support ##################################################
|
##### Multiple BSSID support ##################################################
|
||||||
#
|
#
|
||||||
|
|
|
@ -194,7 +194,22 @@ static int hostapd_wps_cred_cb(void *ctx, const struct wps_credential *cred)
|
||||||
wpa_printf(MSG_DEBUG, "WPS: MAC Address " MACSTR,
|
wpa_printf(MSG_DEBUG, "WPS: MAC Address " MACSTR,
|
||||||
MAC2STR(cred->mac_addr));
|
MAC2STR(cred->mac_addr));
|
||||||
|
|
||||||
wpa_msg(hapd, MSG_INFO, WPS_EVENT_NEW_AP_SETTINGS);
|
if ((hapd->conf->wps_cred_processing == 1 ||
|
||||||
|
hapd->conf->wps_cred_processing == 2) && cred->cred_attr) {
|
||||||
|
size_t blen = cred->cred_attr_len * 2 + 1;
|
||||||
|
char *buf = os_malloc(blen);
|
||||||
|
if (buf) {
|
||||||
|
wpa_snprintf_hex(buf, blen,
|
||||||
|
cred->cred_attr, cred->cred_attr_len);
|
||||||
|
wpa_msg(hapd, MSG_INFO, "%s%s",
|
||||||
|
WPS_EVENT_NEW_AP_SETTINGS, buf);
|
||||||
|
os_free(buf);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
wpa_msg(hapd, MSG_INFO, WPS_EVENT_NEW_AP_SETTINGS);
|
||||||
|
|
||||||
|
if (hapd->conf->wps_cred_processing == 1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
len = os_strlen(hapd->iface->config_fname) + 5;
|
len = os_strlen(hapd->iface->config_fname) + 5;
|
||||||
tmp_fname = os_malloc(len);
|
tmp_fname = os_malloc(len);
|
||||||
|
|
Loading…
Reference in a new issue