1 From 7d48e7bfd2d9d371766ddb36bb3da99111dd3935 Mon Sep 17 00:00:00 2001
2 From: Zhang zhengguang <zhengguang.zhang@intel.com>
3 Date: Fri, 21 Nov 2014 16:34:11 +0800
4 Subject: [PATCH 32/32] multi-user: Fix service load/save issues
6 Refine service load/save to be multi-user complicant.
8 Change-Id: Icc8a0507826f4cae72319191e4fdbebe548434fc
10 src/service.c | 47 +++++++++++++++++++++++++++++++++++++++--------
11 1 file changed, 39 insertions(+), 8 deletions(-)
13 diff --git a/src/service.c b/src/service.c
14 index 5eca970..86dffaf 100644
17 @@ -484,6 +484,23 @@ int __connman_service_load_modifiable(struct connman_service *service)
21 +static int service_load_passphrase(struct connman_service *service)
26 + keyfile = connman_storage_load_service(service->identifier);
30 + str = g_key_file_get_string(keyfile,
31 + service->identifier, "Passphrase", NULL);
33 + service->passphrase = str;
38 static int service_load(struct connman_service *service)
41 @@ -659,7 +676,8 @@ static int service_load(struct connman_service *service)
42 service->hidden_service = g_key_file_get_boolean(keyfile,
43 service->identifier, "Hidden", NULL);
45 - service->user.favorite_user = g_key_file_get_integer(keyfile,
46 + if (g_key_file_has_key(keyfile, service->identifier, "UID", NULL))
47 + service->user.favorite_user = g_key_file_get_integer(keyfile,
48 service->identifier, "UID", NULL);
50 g_key_file_free(keyfile);
51 @@ -706,8 +724,12 @@ static int service_save(struct connman_service *service)
52 const unsigned char *ssid;
53 unsigned int ssid_len = 0;
55 - g_key_file_set_integer(keyfile, service->identifier,
56 - "UID", service->user.favorite_user);
57 + if (service->user.favorite_user == USER_NONE)
58 + g_key_file_remove_key(keyfile, service->identifier,
61 + g_key_file_set_integer(keyfile, service->identifier,
62 + "UID", service->user.favorite_user);
64 ssid = connman_network_get_blob(service->network,
65 "WiFi.SSID", &ssid_len);
66 @@ -764,12 +786,14 @@ static int service_save(struct connman_service *service)
70 - if (service->passphrase && strlen(service->passphrase) > 0)
71 - g_key_file_set_string(keyfile, service->identifier,
72 + if (service->user.current_user == service->user.favorite_user) {
73 + if (service->passphrase && strlen(service->passphrase) > 0)
74 + g_key_file_set_string(keyfile, service->identifier,
75 "Passphrase", service->passphrase);
77 - g_key_file_remove_key(keyfile, service->identifier,
78 - "Passphrase", NULL);
80 + g_key_file_remove_key(keyfile, service->identifier,
81 + "Passphrase", NULL);
84 if (service->ipconfig_ipv4)
85 __connman_ipconfig_save(service->ipconfig_ipv4, keyfile,
86 @@ -4125,6 +4149,11 @@ static DBusMessage *connect_service(DBusConnection *conn,
87 service->request_passphrase_input = true;
89 service->user.current_user = uid;
91 + if (!service->passphrase && uid == service->user.favorite_user) {
92 + DBG("Now load this favorite user's passphrase.");
93 + service_load_passphrase(service);
97 index = __connman_service_get_index(service);
98 @@ -4232,6 +4261,8 @@ bool __connman_service_remove(struct connman_service *service)
100 service->error = CONNMAN_SERVICE_ERROR_UNKNOWN;
102 + service->user.favorite_user = USER_NONE;
104 __connman_service_set_favorite(service, false);
106 __connman_ipconfig_ipv6_reset_privacy(service->ipconfig_ipv6);