]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DBus: Publish provisioned keys in network properties
authorJohannes Berg <johannes.berg@intel.com>
Wed, 2 Feb 2011 15:00:12 +0000 (17:00 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 2 Feb 2011 15:00:12 +0000 (17:00 +0200)
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>
wpa_supplicant/config.c
wpa_supplicant/config_ssid.h
wpa_supplicant/dbus/dbus_new_handlers.c
wpa_supplicant/p2p_supplicant.c
wpa_supplicant/wps_supplicant.c

index 1ea37d4bb2fbbca0fe2bedb724ac06a35de7cea0..d732f5456886a25be965eee1fe7ca5a968c506a2 100644 (file)
@@ -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;
index 38da3fc2c42fb9a1b7101f019e1c3b42d52b944d..8419f43d9438f162a4208aa627d645f336df12e9 100644 (file)
@@ -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 */
index 08cdd72ade0665759af29bf23dce83bb5d334c12..5402bff600a76797c030ec15cee39740c237f213 100644 (file)
@@ -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);
index 13f9b4aa3c02cba9099c38ddbc34f65e26a53541..81d37e5c265cc2a1f45652685d64c1738c52a8e6 100644 (file)
@@ -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;
index d93db467c4a2f6dad6af4809fbbad7e5757bc634..8100f1cc1b8d93bdfbae5bb0ef57c90efadc5eab 100644 (file)
@@ -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",