On Wed, 2012-10-17 at 14:42 +0200, Daniel Wagner wrote:
> From: Daniel Wagner <daniel.wag...@bmw-carit.de>
> 
> ---
>  plugins/session_policy_ivi.c | 50 
> +++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 49 insertions(+), 1 deletion(-)
> 
> diff --git a/plugins/session_policy_ivi.c b/plugins/session_policy_ivi.c
> index 2c30b05..8a7503a 100644
> --- a/plugins/session_policy_ivi.c
> +++ b/plugins/session_policy_ivi.c
> @@ -37,13 +37,61 @@
>  
>  static DBusConnection *connection;
>  
> +struct create_data {
> +     struct connman_session *session;
> +     connman_session_config_cb callback;
> +     void *user_data;
> +};
> +
> +static void selinux_context_reply(unsigned char *context, unsigned int size,
> +                                     void *user_data)
> +{
> +     struct create_data *data = user_data;
> +     char *str;
> +
> +     DBG("session %p", data->session);
> +
> +     str = g_strndup((const gchar*)context, (gsize) size);
> +     if (str == NULL)
> +             goto out;
> +
> +     DBG("SELinux context %s", str);
> +
> +out:
> +     (*data->callback)(data->session, NULL, data->user_data);
> +

data->callback should be verified that it's not NULL, perhaps already in
policy_ivi_create before attempting the method call.

> +     g_free(data);
> +     g_free(str);
> +}
> +
>  static int policy_ivi_create(struct connman_session *session,
>                               connman_session_config_cb callback,
>                               void *user_data)
>  {
> +     struct create_data *data;
> +     const char *owner;
> +
>       DBG("session %p", session);
>  
> -     return -ENOMEM;
> +     data = g_try_new0(struct create_data, 1);
> +     if (data == NULL)
> +             return -ENOMEM;
> +
> +     data->session = session;
> +     data->callback = callback;
> +     data->user_data = user_data;
> +
> +     owner = connman_session_get_owner(session);
> +
> +     if (g_dbus_selinux_get_context(connection, owner,
> +                                     selinux_context_reply,
> +                                     data) == FALSE) {
> +             connman_error("Could not get SELinux context");
> +             g_free(data);
> +             return -ENXIO;
> +     }
> +
> +     return 0;
>  }
>  
>  static void policy_ivi_destroy(struct connman_session *session)


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

Reply via email to