917
917
#endif /* NO_CONFIG_WRITE */
920
static int * wpa_config_parse_freqs(const struct parse_data *data,
921
struct wpa_ssid *ssid, int line,
930
freqs = os_zalloc((len + 1) * sizeof(int));
941
n = os_realloc(freqs, (len * 2 + 1) * sizeof(int));
946
for (i = len; i <= len * 2; i++)
952
freqs[used] = atoi(pos);
953
if (freqs[used] == 0)
956
pos = os_strchr(pos + 1, ' ');
963
static int wpa_config_parse_scan_freq(const struct parse_data *data,
964
struct wpa_ssid *ssid, int line,
969
freqs = wpa_config_parse_freqs(data, ssid, line, value);
972
os_free(ssid->scan_freq);
973
ssid->scan_freq = freqs;
979
static int wpa_config_parse_freq_list(const struct parse_data *data,
980
struct wpa_ssid *ssid, int line,
985
freqs = wpa_config_parse_freqs(data, ssid, line, value);
988
os_free(ssid->freq_list);
989
ssid->freq_list = freqs;
995
#ifndef NO_CONFIG_WRITE
996
static char * wpa_config_write_freqs(const struct parse_data *data,
999
char *buf, *pos, *end;
1007
for (i = 0; freqs[i]; i++)
1010
pos = buf = os_zalloc(10 * count + 1);
1013
end = buf + 10 * count + 1;
1015
for (i = 0; freqs[i]; i++) {
1016
ret = os_snprintf(pos, end - pos, "%s%u",
1017
i == 0 ? "" : " ", freqs[i]);
1018
if (ret < 0 || ret >= end - pos) {
1029
static char * wpa_config_write_scan_freq(const struct parse_data *data,
1030
struct wpa_ssid *ssid)
1032
return wpa_config_write_freqs(data, ssid->scan_freq);
1036
static char * wpa_config_write_freq_list(const struct parse_data *data,
1037
struct wpa_ssid *ssid)
1039
return wpa_config_write_freqs(data, ssid->freq_list);
1041
#endif /* NO_CONFIG_WRITE */
920
1044
#ifdef IEEE8021X_EAPOL
921
1045
static int wpa_config_parse_eap(const struct parse_data *data,
922
1046
struct wpa_ssid *ssid, int line,
1366
1492
{ STRe(pac_file) },
1367
1493
{ INTe(fragment_size) },
1368
1494
#endif /* IEEE8021X_EAPOL */
1369
{ INT_RANGE(mode, 0, 1) },
1495
{ INT_RANGE(mode, 0, 2) },
1370
1496
{ INT_RANGE(proactive_key_caching, 0, 1) },
1371
1497
{ INT_RANGE(disabled, 0, 1) },
1372
1498
{ STR(id_str) },
1376
1502
{ INT_RANGE(peerkey, 0, 1) },
1377
1503
{ INT_RANGE(mixed_cell, 0, 1) },
1378
1504
{ INT_RANGE(frequency, 0, 10000) },
1379
{ INT(wpa_ptk_rekey) }
1505
{ INT(wpa_ptk_rekey) },
1577
1707
os_free(config->ctrl_interface);
1578
1708
os_free(config->ctrl_interface_group);
1579
#ifdef EAP_TLS_OPENSSL
1580
1709
os_free(config->opensc_engine_path);
1581
1710
os_free(config->pkcs11_engine_path);
1582
1711
os_free(config->pkcs11_module_path);
1583
#endif /* EAP_TLS_OPENSSL */
1584
1712
os_free(config->driver_param);
1585
1713
os_free(config->device_name);
1586
1714
os_free(config->manufacturer);
1880
* wpa_config_get_all - Get all options from network configuration
1881
* @ssid: Pointer to network configuration data
1882
* @get_keys: Determines if keys/passwords will be included in returned list
1883
* Returns: %NULL terminated list of all set keys and their values in the form
1884
* of [key1, val1, key2, val2, ... , NULL]
1886
* This function can be used to get list of all configured network properties.
1887
* The caller is responsible for freeing the returned list and all its
1890
char ** wpa_config_get_all(struct wpa_ssid *ssid, int get_keys)
1892
const struct parse_data *field;
1898
props = os_zalloc(sizeof(char *) * ((2 * NUM_SSID_FIELDS) + 1));
1903
for (i = 0; i < NUM_SSID_FIELDS; i++) {
1904
field = &ssid_fields[i];
1905
if (field->key_data && !get_keys)
1907
value = field->writer(field, ssid);
1910
if (os_strlen(value) == 0) {
1915
key = os_strdup(field->name);
1921
props[fields_num * 2] = key;
1922
props[fields_num * 2 + 1] = value;
1750
1938
#ifndef NO_CONFIG_WRITE
1752
1940
* wpa_config_get - Get a variable in network configuration