diff options
Diffstat (limited to 'src/service.c')
-rwxr-xr-x | src/service.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c index bf5c11be..dbd36f33 100755 --- a/src/service.c +++ b/src/service.c @@ -10562,6 +10562,63 @@ static struct connman_service *service_get(const char *identifier) return service; } +#if defined TIZEN_EXT +static void service_load_wpa_passphrase(struct connman_service *service) +{ + char *identifier; + char *ptr; + GKeyFile *keyfile; + bool favorite; + bool autoconnect; + char *passphrase; + + if (service->security != CONNMAN_SERVICE_SECURITY_SAE) + return; + + if (service->passphrase) + return; + + if (!service->identifier) + return; + + identifier = g_strdup(service->identifier); + if (!identifier) + return; + + ptr = strstr(identifier, "_sae"); + if (!ptr) { + g_free(identifier); + return; + } + + memcpy(ptr, "_psk", strlen("_psk")); + + keyfile = connman_storage_load_service(identifier); + if (!keyfile) { + g_free(identifier); + return; + } + + favorite = g_key_file_get_boolean(keyfile, identifier, "Favorite", NULL); + autoconnect = g_key_file_get_boolean(keyfile, identifier, "AutoConnect", NULL); + + if (!favorite || !autoconnect) { + g_free(identifier); + return; + } + + passphrase = g_key_file_get_string(keyfile, identifier, "Passphrase", NULL); + if (passphrase) { + service->passphrase = g_strdup(passphrase); + service->favorite = favorite; + service->autoconnect = autoconnect; + } + + g_free(identifier); + g_free(passphrase); +} +#endif + static int service_register(struct connman_service *service) { #if defined TIZEN_EXT @@ -10580,6 +10637,7 @@ static int service_register(struct connman_service *service) #if defined TIZEN_EXT int ret; service_load(service); + service_load_wpa_passphrase(service); if (TIZEN_INS_ENABLED) { ret = service_ext_load(service); |