hostapd: Fix internal crypto build without TLS
[wpasupplicant] / hostapd / wps_hostapd.c
index 1c2cffe..15cb7a1 100644 (file)
@@ -220,13 +220,13 @@ static int hostapd_wps_cred_cb(void *ctx, const struct wps_credential *cred)
        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,
+               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);
+                               WPS_EVENT_NEW_AP_SETTINGS, _buf);
+                       os_free(_buf);
                }
        } else
                wpa_msg(hapd, MSG_INFO, WPS_EVENT_NEW_AP_SETTINGS);
@@ -234,6 +234,28 @@ static int hostapd_wps_cred_cb(void *ctx, const struct wps_credential *cred)
        if (hapd->conf->wps_cred_processing == 1)
                return 0;
 
+       os_memcpy(hapd->wps->ssid, cred->ssid, cred->ssid_len);
+       hapd->wps->ssid_len = cred->ssid_len;
+       hapd->wps->encr_types = cred->encr_type;
+       hapd->wps->auth_types = cred->auth_type;
+       if (cred->key == NULL) {
+               os_free(hapd->wps->network_key);
+               hapd->wps->network_key = NULL;
+               hapd->wps->network_key_len = 0;
+       } else {
+               if (hapd->wps->network_key == NULL ||
+                   hapd->wps->network_key_len < cred->key_len) {
+                       hapd->wps->network_key_len = 0;
+                       os_free(hapd->wps->network_key);
+                       hapd->wps->network_key = os_malloc(cred->key_len);
+                       if (hapd->wps->network_key == NULL)
+                               return -1;
+               }
+               hapd->wps->network_key_len = cred->key_len;
+               os_memcpy(hapd->wps->network_key, cred->key, cred->key_len);
+       }
+       hapd->wps->wps_state = WPS_STATE_CONFIGURED;
+
        len = os_strlen(hapd->iface->config_fname) + 5;
        tmp_fname = os_malloc(len);
        if (tmp_fname == NULL)