X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=plugins%2Fpolkit.c;h=ae38364ac1e13add852f6619aed7fdaa786c2935;hb=132afd1b759135225e1582fce0125759b8580d9e;hp=a2e15a99a1c4d9bb047715c28cc82d7894d987fb;hpb=61a7962866886dff93f29bee45007dbdac26199a;p=platform%2Fupstream%2Fconnman.git diff --git a/plugins/polkit.c b/plugins/polkit.c old mode 100644 new mode 100755 index a2e15a9..ae38364 --- a/plugins/polkit.c +++ b/plugins/polkit.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2012 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -23,141 +23,33 @@ #include #endif -#include - -#include -#include +#include +#define CONNMAN_API_SUBJECT_TO_CHANGE #include -#include -#include - -#define ACTION "org.moblin.connman.modify" - -static DBusConnection *connection; -static PolKitContext *polkit_context; - -static int polkit_authorize(const char *sender) -{ - DBusError error; - PolKitCaller *caller; - PolKitAction *action; - PolKitResult result; - - DBG("sender %s", sender); - - dbus_error_init(&error); - - caller = polkit_caller_new_from_dbus_name(connection, sender, &error); - if (caller == NULL) { - if (dbus_error_is_set(&error) == TRUE) { - connman_error("%s", error.message); - dbus_error_free(&error); - } else - connman_error("Failed to get caller information"); - return -EIO; - } - - action = polkit_action_new(); - polkit_action_set_action_id(action, ACTION); - - result = polkit_context_is_caller_authorized(polkit_context, - action, caller, TRUE, NULL); - - polkit_action_unref(action); - polkit_caller_unref(caller); - - DBG("result %s", polkit_result_to_string_representation(result)); - - if (result == POLKIT_RESULT_NO) - return -EPERM; - - return 0; -} - -static struct connman_security polkit_security = { - .name = "polkit", - .authorize_sender = polkit_authorize, +#include + +static const GDBusSecurityTable polkit_security[] = { + { CONNMAN_PRIVILEGE_MODIFY, "net.connman.modify", + G_DBUS_SECURITY_FLAG_BUILTIN | + G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION }, + { CONNMAN_PRIVILEGE_SECRET, "net.connman.secret", + G_DBUS_SECURITY_FLAG_BUILTIN | + G_DBUS_SECURITY_FLAG_ALLOW_INTERACTION }, + { } }; -static gboolean watch_event(GIOChannel *channel, GIOCondition condition, - gpointer user_data) -{ - PolKitContext *context = user_data; - int fd; - - DBG("context %p", context); - - fd = g_io_channel_unix_get_fd(channel); - - polkit_context_io_func(context, fd); - - return TRUE; -} - -static int add_watch(PolKitContext *context, int fd) -{ - GIOChannel *channel; - guint id = 0; - - DBG("context %p", context); - - channel = g_io_channel_unix_new(fd); - if (channel == NULL) - return 0; - - id = g_io_add_watch(channel, G_IO_IN, watch_event, context); - - g_io_channel_unref(channel); - - return id; -} - -static void remove_watch(PolKitContext *context, int id) -{ - DBG("context %p", context); - - g_source_remove(id); -} - static int polkit_init(void) { - int err; - - connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); - if (connection == NULL) - return -EIO; - - polkit_context = polkit_context_new(); - - polkit_context_set_io_watch_functions(polkit_context, - add_watch, remove_watch); - - if (polkit_context_init(polkit_context, NULL) == FALSE) { - connman_error("Can't initialize PolicyKit"); - polkit_context_unref(polkit_context); - dbus_connection_unref(connection); - return -EIO; - } - - err = connman_security_register(&polkit_security); - if (err < 0) { - polkit_context_unref(polkit_context); - dbus_connection_unref(connection); - return err; - } + g_dbus_register_security(polkit_security); return 0; } static void polkit_exit(void) { - connman_security_unregister(&polkit_security); - - polkit_context_unref(polkit_context); - - dbus_connection_unref(connection); + g_dbus_unregister_security(polkit_security); } CONNMAN_PLUGIN_DEFINE(polkit, "PolicyKit authorization plugin", VERSION, - polkit_init, polkit_exit) + CONNMAN_PLUGIN_PRIORITY_DEFAULT, polkit_init, polkit_exit)