From: Daniel Wagner <daniel.wag...@bmw-carit.de>

Instead we use struct policy_data from the beginning.
---
 plugins/session_policy_local.c | 43 +++++++++++++-----------------------------
 1 file changed, 13 insertions(+), 30 deletions(-)

diff --git a/plugins/session_policy_local.c b/plugins/session_policy_local.c
index 3d9240d..11ae2c6 100644
--- a/plugins/session_policy_local.c
+++ b/plugins/session_policy_local.c
@@ -48,10 +48,6 @@ static DBusConnection *connection;
 
 static GHashTable *session_hash;
 
-struct create_data {
-       struct connman_session *session;
-};
-
 struct policy_data {
        char *filename;
        char *lsm_filename;
@@ -209,30 +205,16 @@ static int load_policy(struct policy_data *policy, const 
char *filename)
        return err;
 }
 
-static struct policy_data *create_policy(void)
-{
-       struct policy_data *policy;
-
-       policy = g_new0(struct policy_data, 1);
-
-       DBG("policy %p", policy);
-
-       policy->config = connman_session_create_default_config();
-
-       return policy;
-}
-
 static void selinux_context_reply(const unsigned char *context, void 
*user_data,
                                        int err)
 {
        struct cb_data *cbd = user_data;
        connman_session_config_func_t cb = cbd->cb;
-       struct create_data *data = cbd->data;
-       struct policy_data *policy;
+       struct policy_data *policy = cbd->data;
        struct connman_session_config *config = NULL;
        char *ident = NULL;
 
-       DBG("session %p", data->session);
+       DBG("session %p", policy->session);
 
        if (err < 0)
                goto done;
@@ -245,20 +227,20 @@ static void selinux_context_reply(const unsigned char 
*context, void *user_data,
                goto done;
        }
 
-       policy = create_policy();
        policy->lsm_filename = g_strdup(ident);
-       policy->session = data->session;
        if (load_policy(policy, policy->lsm_filename) == 0)
                policy->filename = g_strdup(policy->lsm_filename);
 
-       g_hash_table_replace(session_hash, data->session, policy);
+       g_hash_table_replace(session_hash, policy->session, policy);
        config = policy->config;
 
 done:
-       (*cb)(data->session, config, cbd->user_data, err);
+       (*cb)(policy->session, config, cbd->user_data, err);
+
+       if (err < 0)
+               cleanup_policy(policy);
 
        g_free(cbd);
-       g_free(data);
        g_free(ident);
 }
 
@@ -267,16 +249,17 @@ static int policy_local_create(struct connman_session 
*session,
                                void *user_data)
 {
        struct cb_data *cbd = cb_data_new(cb, user_data);
-       struct create_data *data;
+       struct policy_data *policy;
        const char *owner;
        int err;
 
        DBG("session %p", session);
 
-       data = g_new0(struct create_data, 1);
-       cbd->data = data;
+       policy = g_new0(struct policy_data, 1);
+       policy->config = connman_session_create_default_config();
+       policy->session = session;
 
-       data->session = session;
+       cbd->data = policy;
 
        owner = connman_session_get_owner(session);
 
@@ -285,7 +268,7 @@ static int policy_local_create(struct connman_session 
*session,
                                        cbd);
        if (err < 0) {
                connman_error("Could not get SELinux context");
-               g_free(data);
+               cleanup_policy(policy);
                g_free(cbd);
                return err;
        }
-- 
1.8.2.rc3.16.gce432ca

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to