From d745c7cc1a2dfee6880e7707b94f7581742370e6 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Wed, 21 Jan 2009 11:54:12 +0200 Subject: [PATCH] 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. --- hostapd/config.c | 2 ++ hostapd/config.h | 1 + hostapd/hostapd.conf | 8 ++++++++ hostapd/wps_hostapd.c | 17 ++++++++++++++++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hostapd/config.c b/hostapd/config.c index dbdee76df..40574ef3c 100644 --- a/hostapd/config.c +++ b/hostapd/config.c @@ -2227,6 +2227,8 @@ struct hostapd_config * hostapd_config_read(const char *fname) line, pos); errors++; } + } else if (os_strcmp(buf, "wps_cred_processing") == 0) { + bss->wps_cred_processing = atoi(pos); #endif /* CONFIG_WPS */ } else { wpa_printf(MSG_ERROR, "Line %d: unknown configuration " diff --git a/hostapd/config.h b/hostapd/config.h index 0896749b0..f799d9c44 100644 --- a/hostapd/config.h +++ b/hostapd/config.h @@ -303,6 +303,7 @@ struct hostapd_bss_config { int skip_cred_build; u8 *extra_cred; size_t extra_cred_len; + int wps_cred_processing; #endif /* CONFIG_WPS */ }; diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index 853bc6e57..bd24f1774 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -948,6 +948,14 @@ own_ip_addr=127.0.0.1 # attribute(s) as binary data. #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 ################################################## # diff --git a/hostapd/wps_hostapd.c b/hostapd/wps_hostapd.c index 97e7e971c..916844bf9 100644 --- a/hostapd/wps_hostapd.c +++ b/hostapd/wps_hostapd.c @@ -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, 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; tmp_fname = os_malloc(len);