Clean up hostapd_config_fill() parsers
authorJouni Malinen <jouni@qca.qualcomm.com>
Tue, 11 Mar 2014 20:55:39 +0000 (22:55 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 11 Mar 2014 23:09:21 +0000 (01:09 +0200)
Some of the parsing code was using a bit too complex design and could be
simplified after the earlier return-on-error cleanups.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
hostapd/config_file.c

index eb096db..f018f96 100644 (file)
@@ -1884,10 +1884,9 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        wpa_printf(MSG_ERROR, "Line %d: invalid SSID '%s'",
                                   line, pos);
                        return 1;
-               } else {
-                       os_memcpy(bss->ssid.ssid, pos, bss->ssid.ssid_len);
-                       bss->ssid.ssid_set = 1;
                }
+               os_memcpy(bss->ssid.ssid, pos, bss->ssid.ssid_len);
+               bss->ssid.ssid_set = 1;
        } else if (os_strcmp(buf, "ssid2") == 0) {
                size_t slen;
                char *str = wpa_config_parse_string(pos, &slen);
@@ -1952,9 +1951,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                                   "Line %d: invalid EAPOL version (%d): '%s'.",
                                   line, bss->eapol_version, pos);
                        return 1;
-               } else
-                       wpa_printf(MSG_DEBUG, "eapol_version=%d",
-                                  bss->eapol_version);
+               }
+               wpa_printf(MSG_DEBUG, "eapol_version=%d", bss->eapol_version);
 #ifdef EAP_SERVER
        } else if (os_strcmp(buf, "eap_authenticator") == 0) {
                bss->eap_server = atoi(pos);
@@ -2006,16 +2004,18 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        wpa_printf(MSG_ERROR, "Line %d: Invalid eap_fast_a_id",
                                   line);
                        return 1;
-               } else {
+               }
+               os_free(bss->eap_fast_a_id);
+               bss->eap_fast_a_id = os_malloc(idlen / 2);
+               if (bss->eap_fast_a_id == NULL ||
+                   hexstr2bin(pos, bss->eap_fast_a_id, idlen / 2)) {
+                       wpa_printf(MSG_ERROR, "Line %d: Failed to parse eap_fast_a_id",
+                                  line);
                        os_free(bss->eap_fast_a_id);
-                       bss->eap_fast_a_id = os_malloc(idlen / 2);
-                       if (bss->eap_fast_a_id == NULL ||
-                           hexstr2bin(pos, bss->eap_fast_a_id, idlen / 2)) {
-                               wpa_printf(MSG_ERROR, "Line %d: Failed to parse eap_fast_a_id",
-                                          line);
-                               return 1;
-                       } else
-                               bss->eap_fast_a_id_len = idlen / 2;
+                       bss->eap_fast_a_id = NULL;
+                       return 1;
+               } else {
+                       bss->eap_fast_a_id_len = idlen / 2;
                }
        } else if (os_strcmp(buf, "eap_fast_a_id_info") == 0) {
                os_free(bss->eap_fast_a_id_info);
@@ -2240,31 +2240,31 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        wpa_printf(MSG_ERROR, "Line %d: invalid WPA passphrase length %d (expected 8..63)",
                                   line, len);
                        return 1;
-               } else {
-                       os_free(bss->ssid.wpa_passphrase);
-                       bss->ssid.wpa_passphrase = os_strdup(pos);
-                       if (bss->ssid.wpa_passphrase) {
-                               os_free(bss->ssid.wpa_psk);
-                               bss->ssid.wpa_psk = NULL;
-                               bss->ssid.wpa_passphrase_set = 1;
-                       }
+               }
+               os_free(bss->ssid.wpa_passphrase);
+               bss->ssid.wpa_passphrase = os_strdup(pos);
+               if (bss->ssid.wpa_passphrase) {
+                       os_free(bss->ssid.wpa_psk);
+                       bss->ssid.wpa_psk = NULL;
+                       bss->ssid.wpa_passphrase_set = 1;
                }
        } else if (os_strcmp(buf, "wpa_psk") == 0) {
                os_free(bss->ssid.wpa_psk);
                bss->ssid.wpa_psk = os_zalloc(sizeof(struct hostapd_wpa_psk));
                if (bss->ssid.wpa_psk == NULL)
                        return 1;
-               else if (hexstr2bin(pos, bss->ssid.wpa_psk->psk, PMK_LEN) ||
-                        pos[PMK_LEN * 2] != '\0') {
+               if (hexstr2bin(pos, bss->ssid.wpa_psk->psk, PMK_LEN) ||
+                   pos[PMK_LEN * 2] != '\0') {
                        wpa_printf(MSG_ERROR, "Line %d: Invalid PSK '%s'.",
                                   line, pos);
+                       os_free(bss->ssid.wpa_psk);
+                       bss->ssid.wpa_psk = NULL;
                        return 1;
-               } else {
-                       bss->ssid.wpa_psk->group = 1;
-                       os_free(bss->ssid.wpa_passphrase);
-                       bss->ssid.wpa_passphrase = NULL;
-                       bss->ssid.wpa_psk_set = 1;
                }
+               bss->ssid.wpa_psk->group = 1;
+               os_free(bss->ssid.wpa_passphrase);
+               bss->ssid.wpa_passphrase = NULL;
+               bss->ssid.wpa_psk_set = 1;
        } else if (os_strcmp(buf, "wpa_psk_file") == 0) {
                os_free(bss->ssid.wpa_psk_file);
                bss->ssid.wpa_psk_file = os_strdup(pos);
@@ -2291,9 +2291,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                bss->wpa_pairwise = hostapd_config_parse_cipher(line, pos);
                if (bss->wpa_pairwise == -1 || bss->wpa_pairwise == 0)
                        return 1;
-               else if (bss->wpa_pairwise &
-                        (WPA_CIPHER_NONE | WPA_CIPHER_WEP40 |
-                         WPA_CIPHER_WEP104)) {
+               if (bss->wpa_pairwise &
+                   (WPA_CIPHER_NONE | WPA_CIPHER_WEP40 | WPA_CIPHER_WEP104)) {
                        wpa_printf(MSG_ERROR, "Line %d: unsupported pairwise cipher suite '%s'",
                                   bss->wpa_pairwise, pos);
                        return 1;
@@ -2302,9 +2301,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                bss->rsn_pairwise = hostapd_config_parse_cipher(line, pos);
                if (bss->rsn_pairwise == -1 || bss->rsn_pairwise == 0)
                        return 1;
-               else if (bss->rsn_pairwise &
-                        (WPA_CIPHER_NONE | WPA_CIPHER_WEP40 |
-                         WPA_CIPHER_WEP104)) {
+               if (bss->rsn_pairwise &
+                   (WPA_CIPHER_NONE | WPA_CIPHER_WEP40 | WPA_CIPHER_WEP104)) {
                        wpa_printf(MSG_ERROR, "Line %d: unsupported pairwise cipher suite '%s'",
                                   bss->rsn_pairwise, pos);
                        return 1;
@@ -2461,8 +2459,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        wpa_printf(MSG_ERROR, "Line %d: invalid beacon_int %d (expected 15..65535)",
                                   line, val);
                        return 1;
-               } else
-                       conf->beacon_int = val;
+               }
+               conf->beacon_int = val;
 #ifdef CONFIG_ACS
        } else if (os_strcmp(buf, "acs_num_scans") == 0) {
                int val = atoi(pos);
@@ -2470,8 +2468,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        wpa_printf(MSG_ERROR, "Line %d: invalid acs_num_scans %d (expected 1..100)",
                                   line, val);
                        return 1;
-               } else
-                       conf->acs_num_scans = val;
+               }
+               conf->acs_num_scans = val;
 #endif /* CONFIG_ACS */
        } else if (os_strcmp(buf, "dtim_period") == 0) {
                bss->dtim_period = atoi(pos);
@@ -2502,8 +2500,9 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                if (val != 0 && val != 1) {
                        wpa_printf(MSG_ERROR, "Line %d: invalid send_probe_response %d (expected 0 or 1)",
                                   line, val);
-               } else
-                       conf->send_probe_response = val;
+                       return 1;
+               }
+               conf->send_probe_response = val;
        } else if (os_strcmp(buf, "supported_rates") == 0) {
                if (hostapd_parse_intlist(&conf->supported_rates, pos)) {
                        wpa_printf(MSG_ERROR, "Line %d: invalid rate list",
@@ -2798,8 +2797,7 @@ static int hostapd_config_fill(struct hostapd_config *conf,
 #endif /* CONFIG_WPS */
 #ifdef CONFIG_P2P_MANAGER
        } else if (os_strcmp(buf, "manage_p2p") == 0) {
-               int manage = atoi(pos);
-               if (manage)
+               if (atoi(pos))
                        bss->p2p |= P2P_MANAGE;
                else
                        bss->p2p &= ~P2P_MANAGE;
@@ -2812,14 +2810,12 @@ static int hostapd_config_fill(struct hostapd_config *conf,
        } else if (os_strcmp(buf, "disassoc_low_ack") == 0) {
                bss->disassoc_low_ack = atoi(pos);
        } else if (os_strcmp(buf, "tdls_prohibit") == 0) {
-               int val = atoi(pos);
-               if (val)
+               if (atoi(pos))
                        bss->tdls |= TDLS_PROHIBIT;
                else
                        bss->tdls &= ~TDLS_PROHIBIT;
        } else if (os_strcmp(buf, "tdls_prohibit_chan_switch") == 0) {
-               int val = atoi(pos);
-               if (val)
+               if (atoi(pos))
                        bss->tdls |= TDLS_PROHIBIT_CHAN_SWITCH;
                else
                        bss->tdls &= ~TDLS_PROHIBIT_CHAN_SWITCH;
@@ -2915,7 +2911,7 @@ static int hostapd_config_fill(struct hostapd_config *conf,
                        return 1;
                }
                bss->ipaddr_type_configured = 1;
-               } else if (os_strcmp(buf, "domain_name") == 0) {
+       } else if (os_strcmp(buf, "domain_name") == 0) {
                int j, num_domains, domain_len, domain_list_len = 0;
                char *tok_start, *tok_prev;
                u8 *domain_list, *domain_ptr;