[PATCH 1/3] Added wpa_config_get_all function

Dan Williams dcbw at redhat.com
Wed Oct 21 13:56:45 EDT 2009


On Sun, 2009-10-18 at 03:55 +0200, Witold Sowa wrote:
> New function returns all parameters of network configuration block.

Cool; we'd use this in NM to retrieve the new security settings after
the supplicant updates the network block with the options received from
a WPS run.

Dan

> ---
>  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);



More information about the HostAP mailing list