[PATCH 1/3] Added wpa_config_get_all function
Witold Sowa
witold.sowa
Sat Oct 17 18:55:56 PDT 2009
New function returns all parameters of network configuration block.
---
wpa_supplicant/config.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++
wpa_supplicant/config.h | 1 +
2 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index 97c303d..2c25c70 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -1832,6 +1832,61 @@ int wpa_config_set(struct wpa_ssid *ssid, const char *var, const char *value,
}
+/**
+ * wpa_config_get_all - Get all options from network configuration
+ * @ssid: Pointer to network configuration data
+ * @get_keys: Determines if keys/passwords will be included in return list
+ * Returns: %NULL terminated list of all set keys and their values in the form
+ * of [key1, val1, key2, val2, ... , NULL]
+ *
+ * This function can be used to get list of all configured network
+ * properties. The caller is responsible for freeing returned list and
+ * all its elements.
+ */
+char ** wpa_config_get_all(struct wpa_ssid *ssid, int get_keys)
+{
+ const struct parse_data *field;
+ char *key, *value;
+ size_t i;
+ char **props;
+ int fields_num;
+
+ props = os_zalloc(sizeof(char *) * ((2 * NUM_SSID_FIELDS) + 1));
+ if (!props)
+ goto err;
+
+ fields_num = 0;
+ for (i = 0; i < NUM_SSID_FIELDS; i++) {
+ field = &ssid_fields[i];
+ if (field->key_data && !get_keys)
+ continue;
+ value = field->writer(field, ssid);
+ if (value == NULL || os_strlen(value) == 0)
+ continue;
+
+ key = os_strdup(field->name);
+ if (key == NULL)
+ goto err;
+
+ props[fields_num * 2] = key;
+ props[fields_num * 2 + 1] = value;
+
+ fields_num++;
+ }
+
+ return props;
+
+err:
+ if (props) {
+ char *val = *props;
+ while (val)
+ os_free(val++);
+ os_free(props);
+ }
+ return NULL;
+}
+
+
#ifndef NO_CONFIG_WRITE
/**
* wpa_config_get - Get a variable in network configuration
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index 4484e91..b9f0da6 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -336,6 +336,7 @@ int wpa_config_remove_network(struct wpa_config *config, int id);
void wpa_config_set_network_defaults(struct wpa_ssid *ssid);
int wpa_config_set(struct wpa_ssid *ssid, const char *var, const char *value,
int line);
+char ** wpa_config_get_all(struct wpa_ssid *ssid, int get_keys);
char * wpa_config_get(struct wpa_ssid *ssid, const char *var);
char * wpa_config_get_no_key(struct wpa_ssid *ssid, const char *var);
void wpa_config_update_psk(struct wpa_ssid *ssid);
--
1.6.0.2
More information about the Hostap
mailing list