Added an option to add (or override) Credential attribute(s) in M8
[wpasupplicant] / hostapd / config.c
index 22cef55..dbdee76 100644 (file)
@@ -2158,6 +2158,7 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                errors++;
                        }
                } else if (os_strcmp(buf, "wps_pin_requests") == 0) {
+                       os_free(bss->wps_pin_requests);
                        bss->wps_pin_requests = os_strdup(pos);
                } else if (os_strcmp(buf, "device_name") == 0) {
                        if (os_strlen(pos) > 32) {
@@ -2165,6 +2166,7 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                           "device_name", line);
                                errors++;
                        }
+                       os_free(bss->device_name);
                        bss->device_name = os_strdup(pos);
                } else if (os_strcmp(buf, "manufacturer") == 0) {
                        if (os_strlen(pos) > 64) {
@@ -2172,6 +2174,7 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                           "manufacturer", line);
                                errors++;
                        }
+                       os_free(bss->manufacturer);
                        bss->manufacturer = os_strdup(pos);
                } else if (os_strcmp(buf, "model_name") == 0) {
                        if (os_strlen(pos) > 32) {
@@ -2179,6 +2182,7 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                           "model_name", line);
                                errors++;
                        }
+                       os_free(bss->model_name);
                        bss->model_name = os_strdup(pos);
                } else if (os_strcmp(buf, "model_number") == 0) {
                        if (os_strlen(pos) > 32) {
@@ -2186,6 +2190,7 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                           "model_number", line);
                                errors++;
                        }
+                       os_free(bss->model_number);
                        bss->model_number = os_strdup(pos);
                } else if (os_strcmp(buf, "serial_number") == 0) {
                        if (os_strlen(pos) > 32) {
@@ -2193,10 +2198,13 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                           "serial_number", line);
                                errors++;
                        }
+                       os_free(bss->serial_number);
                        bss->serial_number = os_strdup(pos);
                } else if (os_strcmp(buf, "device_type") == 0) {
+                       os_free(bss->device_type);
                        bss->device_type = os_strdup(pos);
                } else if (os_strcmp(buf, "config_methods") == 0) {
+                       os_free(bss->config_methods);
                        bss->config_methods = os_strdup(pos);
                } else if (os_strcmp(buf, "os_version") == 0) {
                        if (hexstr2bin(pos, bss->os_version, 4)) {
@@ -2205,7 +2213,20 @@ struct hostapd_config * hostapd_config_read(const char *fname)
                                errors++;
                        }
                } else if (os_strcmp(buf, "ap_pin") == 0) {
+                       os_free(bss->ap_pin);
                        bss->ap_pin = os_strdup(pos);
+               } else if (os_strcmp(buf, "skip_cred_build") == 0) {
+                       bss->skip_cred_build = atoi(pos);
+               } else if (os_strcmp(buf, "extra_cred") == 0) {
+                       os_free(bss->extra_cred);
+                       bss->extra_cred =
+                               (u8 *) os_readfile(pos, &bss->extra_cred_len);
+                       if (bss->extra_cred == NULL) {
+                               wpa_printf(MSG_ERROR, "Line %d: could not "
+                                          "read Credentials from '%s'",
+                                          line, pos);
+                               errors++;
+                       }
 #endif /* CONFIG_WPS */
                } else {
                        wpa_printf(MSG_ERROR, "Line %d: unknown configuration "