meta-oe: fix refactor to a better layout
[scm/bb/meta-tizen.git] / meta-tizen-adaptation / meta-oe / recipes-connectivity / connman / connman / 0032-multi-user-Fix-service-load-save-issues.patch
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
5
6 Refine service load/save to be multi-user complicant.
7
8 Change-Id: Icc8a0507826f4cae72319191e4fdbebe548434fc
9 ---
10  src/service.c | 47 +++++++++++++++++++++++++++++++++++++++--------
11  1 file changed, 39 insertions(+), 8 deletions(-)
12
13 diff --git a/src/service.c b/src/service.c
14 index 5eca970..86dffaf 100644
15 --- a/src/service.c
16 +++ b/src/service.c
17 @@ -484,6 +484,23 @@ int __connman_service_load_modifiable(struct connman_service *service)
18         return 0;
19  }
20  
21 +static int service_load_passphrase(struct connman_service *service)
22 +{
23 +       GKeyFile *keyfile;
24 +       gchar *str;
25 +
26 +       keyfile = connman_storage_load_service(service->identifier);
27 +       if (!keyfile)
28 +               return -EIO;
29 +
30 +       str = g_key_file_get_string(keyfile,
31 +                               service->identifier, "Passphrase", NULL);
32 +       if (str)
33 +               service->passphrase = str;
34 +
35 +       return 0;
36 +}
37 +
38  static int service_load(struct connman_service *service)
39  {
40         GKeyFile *keyfile;
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);
44  
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);
49  done:
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;
54  
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,
59 +                                                       "UID", NULL);
60 +                       else
61 +                               g_key_file_set_integer(keyfile, service->identifier,
62 +                                                       "UID", service->user.favorite_user);
63  
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)
67                 g_free(str);
68         }
69  
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);
76 -       else
77 -               g_key_file_remove_key(keyfile, service->identifier,
78 -                                                       "Passphrase", NULL);
79 +               else
80 +                       g_key_file_remove_key(keyfile, service->identifier,
81 +                                       "Passphrase", NULL);
82 +       }
83  
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;
88  
89                 service->user.current_user = uid;
90 +
91 +               if (!service->passphrase && uid == service->user.favorite_user) {
92 +                       DBG("Now load this favorite user's passphrase.");
93 +                       service_load_passphrase(service);
94 +               }
95         }
96  
97         index = __connman_service_get_index(service);
98 @@ -4232,6 +4261,8 @@ bool __connman_service_remove(struct connman_service *service)
99  
100         service->error = CONNMAN_SERVICE_ERROR_UNKNOWN;
101  
102 +       service->user.favorite_user = USER_NONE;
103 +
104         __connman_service_set_favorite(service, false);
105  
106         __connman_ipconfig_ipv6_reset_privacy(service->ipconfig_ipv6);
107 -- 
108 1.8.1.4
109