[PATCH 1/3] Added wpa_config_get_all function

Witold Sowa witold.sowa at gmail.com
Sat Oct 17 21:55:56 EDT 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