Added wps_cred_processing configuration option for hostapd
authorJouni Malinen <jouni.malinen@atheros.com>
Wed, 21 Jan 2009 09:54:12 +0000 (11:54 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 21 Jan 2009 09:54:12 +0000 (11:54 +0200)
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
hostapd/config.h
hostapd/hostapd.conf
hostapd/wps_hostapd.c

index dbdee76..40574ef 100644 (file)
@@ -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 "
index 0896749..f799d9c 100644 (file)
@@ -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 */
 };
 
index 853bc6e..bd24f17 100644 (file)
@@ -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 ##################################################
 #
index 97e7e97..916844b 100644 (file)
@@ -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);