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