DBus: Publish provisioned keys in network properties
When the network was provisioned, we need to get the keys to be able to reconnect without new provisioning. To be able to publish those keys but not normally configured ones, add a new attribute to struct wpa_ssid indicating whether or not keys may be exported. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
0661eed204
commit
d1c8ac88b9
5 changed files with 16 additions and 1 deletions
|
@ -1892,6 +1892,7 @@ 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 returned list
|
||||
* (if they may be exported)
|
||||
* Returns: %NULL terminated list of all set keys and their values in the form
|
||||
* of [key1, val1, key2, val2, ... , NULL]
|
||||
*
|
||||
|
@ -1907,6 +1908,8 @@ char ** wpa_config_get_all(struct wpa_ssid *ssid, int get_keys)
|
|||
char **props;
|
||||
int fields_num;
|
||||
|
||||
get_keys = get_keys && ssid->export_keys;
|
||||
|
||||
props = os_zalloc(sizeof(char *) * ((2 * NUM_SSID_FIELDS) + 1));
|
||||
if (!props)
|
||||
return NULL;
|
||||
|
|
|
@ -400,6 +400,14 @@ struct wpa_ssid {
|
|||
* temporary - Whether this network is temporary and not to be saved
|
||||
*/
|
||||
int temporary;
|
||||
|
||||
/**
|
||||
* export_keys - Whether keys may be exported
|
||||
*
|
||||
* This attribute will be set when keys are determined through
|
||||
* WPS or similar so that they may be exported.
|
||||
*/
|
||||
int export_keys;
|
||||
};
|
||||
|
||||
#endif /* CONFIG_SSID_H */
|
||||
|
|
|
@ -2882,7 +2882,7 @@ DBusMessage * wpas_dbus_getter_network_properties(
|
|||
DBusMessage *reply = NULL;
|
||||
DBusMessageIter iter, variant_iter, dict_iter;
|
||||
char **iterator;
|
||||
char **props = wpa_config_get_all(net->ssid, 0);
|
||||
char **props = wpa_config_get_all(net->ssid, 1);
|
||||
if (!props)
|
||||
return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
|
||||
NULL);
|
||||
|
|
|
@ -403,6 +403,7 @@ static void wpas_p2p_store_persistent_group(struct wpa_supplicant *wpa_s,
|
|||
s->key_mgmt = WPA_KEY_MGMT_PSK;
|
||||
s->proto = WPA_PROTO_RSN;
|
||||
s->pairwise_cipher = WPA_CIPHER_CCMP;
|
||||
s->export_keys = 1;
|
||||
if (ssid->passphrase) {
|
||||
os_free(s->passphrase);
|
||||
s->passphrase = os_strdup(ssid->passphrase);
|
||||
|
@ -3241,6 +3242,7 @@ static int wpas_start_p2p_client(struct wpa_supplicant *wpa_s,
|
|||
os_memcpy(ssid->ssid, params->ssid, params->ssid_len);
|
||||
ssid->ssid_len = params->ssid_len;
|
||||
ssid->p2p_group = 1;
|
||||
ssid->export_keys = 1;
|
||||
if (params->psk_set) {
|
||||
os_memcpy(ssid->psk, params->psk, 32);
|
||||
ssid->psk_set = 1;
|
||||
|
|
|
@ -372,6 +372,7 @@ static int wpa_supplicant_wps_cred(void *ctx,
|
|||
return -1;
|
||||
}
|
||||
ssid->psk_set = 1;
|
||||
ssid->export_keys = 1;
|
||||
} else if (cred->key_len >= 8 && cred->key_len < 2 * PMK_LEN) {
|
||||
os_free(ssid->passphrase);
|
||||
ssid->passphrase = os_malloc(cred->key_len + 1);
|
||||
|
@ -380,6 +381,7 @@ static int wpa_supplicant_wps_cred(void *ctx,
|
|||
os_memcpy(ssid->passphrase, cred->key, cred->key_len);
|
||||
ssid->passphrase[cred->key_len] = '\0';
|
||||
wpa_config_update_psk(ssid);
|
||||
ssid->export_keys = 1;
|
||||
} else {
|
||||
wpa_printf(MSG_ERROR, "WPS: Invalid Network Key "
|
||||
"length %lu",
|
||||
|
|
Loading…
Reference in a new issue