From: Daniel Wagner <[email protected]>

---
 plugins/session_policy_local.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/plugins/session_policy_local.c b/plugins/session_policy_local.c
index 2708420..dda65b7 100644
--- a/plugins/session_policy_local.c
+++ b/plugins/session_policy_local.c
@@ -83,6 +83,7 @@ static void free_policy(gpointer user_data)
        if (policy->config != NULL)
                g_slist_free(policy->config->allowed_bearers);
 
+       g_free(policy->config->id);
        g_free(policy->filename);
        g_free(policy->lsm_ctx);
        g_free(policy->user);
@@ -243,6 +244,22 @@ static void selinux_context_reply(int error,
        policy->gid = data->gid;
        policy->session = data->session;
 
+       if (g_strcmp0(policy->filename, policy->lsm_ctx) == 0) {
+               policy->config->id_type = CONNMAN_SESSION_ID_TYPE_LSM;
+               policy->config->id = ctx;
+               ctx = NULL;
+       } else if (g_strcmp0(policy->filename, policy->user) == 0) {
+               policy->config->id_type = CONNMAN_SESSION_ID_TYPE_UID;
+               policy->config->id = g_strdup(policy->user);
+       } else if (g_strcmp0(policy->filename, policy->group) == 0) {
+               policy->config->id_type = CONNMAN_SESSION_ID_TYPE_GID;
+               policy->config->id = g_strdup(policy->group);
+       } else {
+               /* no policy file found. fallback is UID */
+               policy->config->id_type = CONNMAN_SESSION_ID_TYPE_UID;
+               policy->config->id = g_strdup(policy->user);
+       }
+
        g_hash_table_replace(session_hash, data->session, policy);
        config = policy->config;
 
@@ -320,6 +337,14 @@ static void get_uid_reply(int error, unsigned int uid, 
void *user_data)
        policy->gid = data->gid;
        policy->session = data->session;
 
+       if (g_strcmp0(policy->filename, policy->user) == 0) {
+               policy->config->id_type = CONNMAN_SESSION_ID_TYPE_UID;
+               policy->config->id = g_strdup(policy->user);
+       } else if (g_strcmp0(policy->filename, policy->group) == 0) {
+               policy->config->id_type = CONNMAN_SESSION_ID_TYPE_GID;
+               policy->config->id = g_strdup(policy->group);
+       }
+
        g_hash_table_replace(session_hash, data->session, policy);
 
        config = policy->config;
-- 
1.8.2.rc3.16.gce432ca

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to