From: David Zeuthen Date: Sun, 1 Feb 2009 18:26:53 +0000 (-0500) Subject: move management functions to a separate D-Bus interface and GObject class X-Git-Tag: 0.91~25 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5326cc0a02a631ab6bc0bd6dc16c2a861ab90423;p=platform%2Fupstream%2Fpolkit.git move management functions to a separate D-Bus interface and GObject class This will allow us, in the near future, to declare org.fd.PK1.Authority and PolkitAuthority as stable while allowing changes to how we manage the (local) authority even after 1.0. --- diff --git a/data/Makefile.am b/data/Makefile.am index 0a6b4d8..f4b1005 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -28,6 +28,7 @@ CLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = \ org.freedesktop.PolicyKit1.Authority.xml \ + org.freedesktop.PolicyKit1.AuthorityManager.xml \ org.freedesktop.PolicyKit1.AuthenticationAgent.xml \ $(service_in_files) \ $(dbusconf_in_files) \ diff --git a/data/org.freedesktop.PolicyKit1.Authority.xml b/data/org.freedesktop.PolicyKit1.Authority.xml index e362d7a..e33df65 100644 --- a/data/org.freedesktop.PolicyKit1.Authority.xml +++ b/data/org.freedesktop.PolicyKit1.Authority.xml @@ -142,36 +142,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -193,39 +165,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/org.freedesktop.PolicyKit1.AuthorityManager.xml b/data/org.freedesktop.PolicyKit1.AuthorityManager.xml new file mode 100644 index 0000000..5c05fcc --- /dev/null +++ b/data/org.freedesktop.PolicyKit1.AuthorityManager.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/polkit/Makefile.am b/src/polkit/Makefile.am index 3f6b268..61233ee 100644 --- a/src/polkit/Makefile.am +++ b/src/polkit/Makefile.am @@ -18,6 +18,7 @@ INCLUDES = \ BUILT_SOURCES = \ _polkitactiondescription.c _polkitactiondescription.h \ _polkitauthority.c _polkitauthority.h \ + _polkitauthoritymanager.c _polkitauthoritymanager.h \ _polkitauthorization.c _polkitauthorization.h \ _polkitauthorizationresult.c _polkitauthorizationresult.h \ _polkitimplicitauthorization.c _polkitimplicitauthorization.h \ @@ -30,11 +31,12 @@ BUILT_SOURCES = \ _polkitidentity.c _polkitidentity.h \ $(NULL) -$(BUILT_SOURCES) : Makefile.am $(top_srcdir)/data/org.freedesktop.PolicyKit1.Authority.xml - eggdbus-binding-tool \ - --namespace "_Polkit" \ - --dbus-namespace "org.freedesktop.PolicyKit1" \ - --introspection-xml $(top_srcdir)/data/org.freedesktop.PolicyKit1.Authority.xml \ +$(BUILT_SOURCES) : Makefile.am $(top_srcdir)/data/org.freedesktop.PolicyKit1.Authority.xml $(top_srcdir)/data/org.freedesktop.PolicyKit1.AuthorityManager.xml + eggdbus-binding-tool \ + --namespace "_Polkit" \ + --dbus-namespace "org.freedesktop.PolicyKit1" \ + --introspection-xml $(top_srcdir)/data/org.freedesktop.PolicyKit1.Authority.xml \ + --introspection-xml $(top_srcdir)/data/org.freedesktop.PolicyKit1.AuthorityManager.xml \ $(NULL) lib_LTLIBRARIES=libpolkit-gobject-1.la @@ -47,6 +49,7 @@ libpolkit_gobject_1include_HEADERS = \ polkittypes.h \ polkitactiondescription.h \ polkitauthority.h \ + polkitauthoritymanager.h \ polkiterror.h \ polkitsubject.h \ polkitunixprocess.h \ @@ -66,6 +69,7 @@ libpolkit_gobject_1_la_SOURCES = \ $(BUILT_SOURCES) \ polkitactiondescription.c polkitactiondescription.h \ polkitauthority.c polkitauthority.h \ + polkitauthoritymanager.c polkitauthoritymanager.h \ polkiterror.c polkiterror.h \ polkitsubject.c polkitsubject.h \ polkitunixprocess.c polkitunixprocess.h \ diff --git a/src/polkit/polkit.h b/src/polkit/polkit.h index 6de31f2..6baccb5 100644 --- a/src/polkit/polkit.h +++ b/src/polkit/polkit.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #undef _POLKIT_INSIDE_POLKIT_H diff --git a/src/polkit/polkitauthority.c b/src/polkit/polkitauthority.c index c8e6c8e..2d591a3 100644 --- a/src/polkit/polkitauthority.c +++ b/src/polkit/polkitauthority.c @@ -270,198 +270,6 @@ polkit_authority_enumerate_actions_sync (PolkitAuthority *authority, /* ---------------------------------------------------------------------------------------------------- */ static guint -polkit_authority_enumerate_users_async (PolkitAuthority *authority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - guint call_id; - GSimpleAsyncResult *simple; - - simple = g_simple_async_result_new (G_OBJECT (authority), - callback, - user_data, - polkit_authority_enumerate_users_async); - - call_id = _polkit_authority_enumerate_users (authority->real, - EGG_DBUS_CALL_FLAGS_NONE, - cancellable, - generic_async_cb, - simple); - - return call_id; -} - -void -polkit_authority_enumerate_users (PolkitAuthority *authority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - polkit_authority_enumerate_users_async (authority, cancellable, callback, user_data); -} - -GList * -polkit_authority_enumerate_users_finish (PolkitAuthority *authority, - GAsyncResult *res, - GError **error) -{ - EggDBusArraySeq *array_seq; - GList *result; - guint n; - GSimpleAsyncResult *simple; - GAsyncResult *real_res; - - simple = G_SIMPLE_ASYNC_RESULT (res); - real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); - - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_enumerate_users_async); - - result = NULL; - - if (!_polkit_authority_enumerate_users_finish (authority->real, - &array_seq, - real_res, - error)) - goto out; - - for (n = 0; n < array_seq->size; n++) - { - _PolkitIdentity *real_identity; - - real_identity = array_seq->data.v_ptr[n]; - - result = g_list_prepend (result, polkit_identity_new_for_real (real_identity)); - } - - result = g_list_reverse (result); - - g_object_unref (array_seq); - - out: - g_object_unref (real_res); - return result; -} - -GList * -polkit_authority_enumerate_users_sync (PolkitAuthority *authority, - GCancellable *cancellable, - GError **error) -{ - guint call_id; - GAsyncResult *res; - GList *result; - - call_id = polkit_authority_enumerate_users_async (authority, cancellable, generic_cb, &res); - - egg_dbus_connection_pending_call_block (authority->system_bus, call_id); - - result = polkit_authority_enumerate_users_finish (authority, res, error); - - g_object_unref (res); - - return result; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -static guint -polkit_authority_enumerate_groups_async (PolkitAuthority *authority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - guint call_id; - GSimpleAsyncResult *simple; - - simple = g_simple_async_result_new (G_OBJECT (authority), - callback, - user_data, - polkit_authority_enumerate_groups_async); - - call_id = _polkit_authority_enumerate_groups (authority->real, - EGG_DBUS_CALL_FLAGS_NONE, - cancellable, - generic_async_cb, - simple); - - return call_id; -} - -void -polkit_authority_enumerate_groups (PolkitAuthority *authority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - polkit_authority_enumerate_groups_async (authority, cancellable, callback, user_data); -} - -GList * -polkit_authority_enumerate_groups_finish (PolkitAuthority *authority, - GAsyncResult *res, - GError **error) -{ - EggDBusArraySeq *array_seq; - GList *result; - guint n; - GSimpleAsyncResult *simple; - GAsyncResult *real_res; - - simple = G_SIMPLE_ASYNC_RESULT (res); - real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); - - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_enumerate_groups_async); - - result = NULL; - - if (!_polkit_authority_enumerate_groups_finish (authority->real, - &array_seq, - real_res, - error)) - goto out; - - for (n = 0; n < array_seq->size; n++) - { - _PolkitIdentity *real_identity; - - real_identity = array_seq->data.v_ptr[n]; - - result = g_list_prepend (result, polkit_identity_new_for_real (real_identity)); - } - - result = g_list_reverse (result); - - g_object_unref (array_seq); - - out: - g_object_unref (real_res); - return result; -} - -GList * -polkit_authority_enumerate_groups_sync (PolkitAuthority *authority, - GCancellable *cancellable, - GError **error) -{ - guint call_id; - GAsyncResult *res; - GList *result; - - call_id = polkit_authority_enumerate_groups_async (authority, cancellable, generic_cb, &res); - - egg_dbus_connection_pending_call_block (authority->system_bus, call_id); - - result = polkit_authority_enumerate_groups_finish (authority, res, error); - - g_object_unref (res); - - return result; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -static guint polkit_authority_check_authorization_async (PolkitAuthority *authority, PolkitSubject *subject, const gchar *action_id, @@ -572,334 +380,6 @@ polkit_authority_check_authorization_sync (PolkitAuthority *author /* ---------------------------------------------------------------------------------------------------- */ static guint -polkit_authority_enumerate_authorizations_async (PolkitAuthority *authority, - PolkitIdentity *identity, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - guint call_id; - GSimpleAsyncResult *simple; - _PolkitIdentity *real_identity; - - simple = g_simple_async_result_new (G_OBJECT (authority), - callback, - user_data, - polkit_authority_enumerate_authorizations_async); - - real_identity = polkit_identity_get_real (identity); - - call_id = _polkit_authority_enumerate_authorizations (authority->real, - EGG_DBUS_CALL_FLAGS_NONE, - real_identity, - cancellable, - generic_async_cb, - simple); - - g_object_unref (real_identity); - - return call_id; -} - -void -polkit_authority_enumerate_authorizations (PolkitAuthority *authority, - PolkitIdentity *identity, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - polkit_authority_enumerate_authorizations_async (authority, - identity, - cancellable, - callback, - user_data); -} - -GList * -polkit_authority_enumerate_authorizations_finish (PolkitAuthority *authority, - GAsyncResult *res, - GError **error) -{ - EggDBusArraySeq *array_seq; - GList *result; - guint n; - GSimpleAsyncResult *simple; - GAsyncResult *real_res; - - simple = G_SIMPLE_ASYNC_RESULT (res); - real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); - - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_enumerate_authorizations_async); - - result = NULL; - - if (!_polkit_authority_enumerate_authorizations_finish (authority->real, - &array_seq, - real_res, - error)) - goto out; - - for (n = 0; n < array_seq->size; n++) - { - _PolkitAuthorization *real_authorization; - - real_authorization = array_seq->data.v_ptr[n]; - - result = g_list_prepend (result, polkit_authorization_new_for_real (real_authorization)); - } - - result = g_list_reverse (result); - - g_object_unref (array_seq); - - out: - g_object_unref (real_res); - return result; -} - - -GList * -polkit_authority_enumerate_authorizations_sync (PolkitAuthority *authority, - PolkitIdentity *identity, - GCancellable *cancellable, - GError **error) -{ - guint call_id; - GAsyncResult *res; - GList *result; - - call_id = polkit_authority_enumerate_authorizations_async (authority, - identity, - cancellable, - generic_cb, - &res); - - egg_dbus_connection_pending_call_block (authority->system_bus, call_id); - - result = polkit_authority_enumerate_authorizations_finish (authority, res, error); - - g_object_unref (res); - - return result; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -static guint -polkit_authority_add_authorization_async (PolkitAuthority *authority, - PolkitIdentity *identity, - PolkitAuthorization *authorization, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - guint call_id; - GSimpleAsyncResult *simple; - _PolkitAuthorization *real_authorization; - _PolkitIdentity *real_identity; - - simple = g_simple_async_result_new (G_OBJECT (authority), - callback, - user_data, - polkit_authority_add_authorization_async); - - real_identity = polkit_identity_get_real (identity); - real_authorization = polkit_authorization_get_real (authorization); - - call_id = _polkit_authority_add_authorization (authority->real, - EGG_DBUS_CALL_FLAGS_NONE, - real_identity, - real_authorization, - cancellable, - generic_async_cb, - simple); - - g_object_unref (real_authorization); - g_object_unref (real_identity); - - return call_id; -} - -void -polkit_authority_add_authorization (PolkitAuthority *authority, - PolkitIdentity *identity, - PolkitAuthorization *authorization, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - polkit_authority_add_authorization_async (authority, - identity, - authorization, - cancellable, - callback, - user_data); -} - -gboolean -polkit_authority_add_authorization_finish (PolkitAuthority *authority, - GAsyncResult *res, - GError **error) -{ - GSimpleAsyncResult *simple; - GAsyncResult *real_res; - gboolean ret; - - simple = G_SIMPLE_ASYNC_RESULT (res); - real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); - - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_add_authorization_async); - - ret = _polkit_authority_add_authorization_finish (authority->real, - real_res, - error); - - if (!ret) - goto out; - - out: - g_object_unref (real_res); - return ret; -} - - -gboolean -polkit_authority_add_authorization_sync (PolkitAuthority *authority, - PolkitIdentity *identity, - PolkitAuthorization *authorization, - GCancellable *cancellable, - GError **error) -{ - guint call_id; - GAsyncResult *res; - gboolean ret; - - call_id = polkit_authority_add_authorization_async (authority, - identity, - authorization, - cancellable, - generic_cb, - &res); - - egg_dbus_connection_pending_call_block (authority->system_bus, call_id); - - ret = polkit_authority_add_authorization_finish (authority, res, error); - - g_object_unref (res); - - return ret; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -static guint -polkit_authority_remove_authorization_async (PolkitAuthority *authority, - PolkitIdentity *identity, - PolkitAuthorization *authorization, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - guint call_id; - GSimpleAsyncResult *simple; - _PolkitAuthorization *real_authorization; - _PolkitIdentity *real_identity; - - simple = g_simple_async_result_new (G_OBJECT (authority), - callback, - user_data, - polkit_authority_remove_authorization_async); - - real_identity = polkit_identity_get_real (identity); - real_authorization = polkit_authorization_get_real (authorization); - - call_id = _polkit_authority_remove_authorization (authority->real, - EGG_DBUS_CALL_FLAGS_NONE, - real_identity, - real_authorization, - cancellable, - generic_async_cb, - simple); - - g_object_unref (real_authorization); - g_object_unref (real_identity); - - return call_id; -} - -void -polkit_authority_remove_authorization (PolkitAuthority *authority, - PolkitIdentity *identity, - PolkitAuthorization *authorization, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - polkit_authority_remove_authorization_async (authority, - identity, - authorization, - cancellable, - callback, - user_data); -} - -gboolean -polkit_authority_remove_authorization_finish (PolkitAuthority *authority, - GAsyncResult *res, - GError **error) -{ - GSimpleAsyncResult *simple; - GAsyncResult *real_res; - gboolean ret; - - simple = G_SIMPLE_ASYNC_RESULT (res); - real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); - - g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_remove_authorization_async); - - ret = _polkit_authority_remove_authorization_finish (authority->real, - real_res, - error); - - if (!ret) - goto out; - - out: - g_object_unref (real_res); - return ret; -} - - -gboolean -polkit_authority_remove_authorization_sync (PolkitAuthority *authority, - PolkitIdentity *identity, - PolkitAuthorization *authorization, - GCancellable *cancellable, - GError **error) -{ - guint call_id; - GAsyncResult *res; - gboolean ret; - - call_id = polkit_authority_remove_authorization_async (authority, - identity, - authorization, - cancellable, - generic_cb, - &res); - - egg_dbus_connection_pending_call_block (authority->system_bus, call_id); - - ret = polkit_authority_remove_authorization_finish (authority, res, error); - - g_object_unref (res); - - return ret; -} - -/* ---------------------------------------------------------------------------------------------------- */ - -static guint polkit_authority_register_authentication_agent_async (PolkitAuthority *authority, const gchar *object_path, GCancellable *cancellable, diff --git a/src/polkit/polkitauthoritymanager.c b/src/polkit/polkitauthoritymanager.c new file mode 100644 index 0000000..55a4530 --- /dev/null +++ b/src/polkit/polkitauthoritymanager.c @@ -0,0 +1,651 @@ +/* + * Copyright (C) 2008 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David Zeuthen + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "polkitauthoritymanager.h" + +#include "polkitprivate.h" + +/** + * SECTION:polkitauthoritymanager + * @title: PolkitAuthorityManager + * @short_description: Authority Manager + * + * Checking claims. + */ + +struct _PolkitAuthorityManager +{ + GObject parent_instance; + + EggDBusConnection *system_bus; + EggDBusObjectProxy *authority_manager_object_proxy; + + _PolkitAuthorityManager *real; +}; + +struct _PolkitAuthorityManagerClass +{ + GObjectClass parent_class; + +}; + +/* TODO: locking */ + +static PolkitAuthorityManager *the_authority_manager = NULL; + +G_DEFINE_TYPE (PolkitAuthorityManager, polkit_authority_manager, G_TYPE_OBJECT); + + +static void +polkit_authority_manager_init (PolkitAuthorityManager *authority_manager) +{ + authority_manager->system_bus = egg_dbus_connection_get_for_bus (EGG_DBUS_BUS_TYPE_SYSTEM); + + authority_manager->authority_manager_object_proxy = egg_dbus_connection_get_object_proxy (authority_manager->system_bus, + "org.freedesktop.PolicyKit1", + "/org/freedesktop/PolicyKit1/Authority"); + + authority_manager->real = _POLKIT_QUERY_INTERFACE_AUTHORITY_MANAGER (authority_manager->authority_manager_object_proxy); +} + +static void +polkit_authority_manager_finalize (GObject *object) +{ + PolkitAuthorityManager *authority_manager; + + authority_manager = POLKIT_AUTHORITY_MANAGER (object); + + g_object_unref (authority_manager->authority_manager_object_proxy); + g_object_unref (authority_manager->system_bus); + + the_authority_manager = NULL; + + if (G_OBJECT_CLASS (polkit_authority_manager_parent_class)->finalize != NULL) + G_OBJECT_CLASS (polkit_authority_manager_parent_class)->finalize (object); +} + +static void +polkit_authority_manager_class_init (PolkitAuthorityManagerClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->finalize = polkit_authority_manager_finalize; + +} + +PolkitAuthorityManager * +polkit_authority_manager_get (void) +{ + if (the_authority_manager != NULL) + goto out; + + the_authority_manager = POLKIT_AUTHORITY_MANAGER (g_object_new (POLKIT_TYPE_AUTHORITY_MANAGER, NULL)); + + out: + return the_authority_manager; +} + +static void +generic_cb (GObject *source_obj, + GAsyncResult *res, + gpointer user_data) +{ + GAsyncResult **target_res = user_data; + + *target_res = g_object_ref (res); +} + +static void +generic_async_cb (GObject *source_obj, + GAsyncResult *res, + gpointer user_data) +{ + GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data); + + g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (res), g_object_unref); + g_simple_async_result_complete (simple); +} + +/* ---------------------------------------------------------------------------------------------------- */ + +static guint +polkit_authority_manager_enumerate_users_async (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + guint call_id; + GSimpleAsyncResult *simple; + + simple = g_simple_async_result_new (G_OBJECT (authority_manager), + callback, + user_data, + polkit_authority_manager_enumerate_users_async); + + call_id = _polkit_authority_manager_enumerate_users (authority_manager->real, + EGG_DBUS_CALL_FLAGS_NONE, + cancellable, + generic_async_cb, + simple); + + return call_id; +} + +void +polkit_authority_manager_enumerate_users (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + polkit_authority_manager_enumerate_users_async (authority_manager, cancellable, callback, user_data); +} + +GList * +polkit_authority_manager_enumerate_users_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error) +{ + EggDBusArraySeq *array_seq; + GList *result; + guint n; + GSimpleAsyncResult *simple; + GAsyncResult *real_res; + + simple = G_SIMPLE_ASYNC_RESULT (res); + real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); + + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_manager_enumerate_users_async); + + result = NULL; + + if (!_polkit_authority_manager_enumerate_users_finish (authority_manager->real, + &array_seq, + real_res, + error)) + goto out; + + for (n = 0; n < array_seq->size; n++) + { + _PolkitIdentity *real_identity; + + real_identity = array_seq->data.v_ptr[n]; + + result = g_list_prepend (result, polkit_identity_new_for_real (real_identity)); + } + + result = g_list_reverse (result); + + g_object_unref (array_seq); + + out: + g_object_unref (real_res); + return result; +} + +GList * +polkit_authority_manager_enumerate_users_sync (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GError **error) +{ + guint call_id; + GAsyncResult *res; + GList *result; + + call_id = polkit_authority_manager_enumerate_users_async (authority_manager, cancellable, generic_cb, &res); + + egg_dbus_connection_pending_call_block (authority_manager->system_bus, call_id); + + result = polkit_authority_manager_enumerate_users_finish (authority_manager, res, error); + + g_object_unref (res); + + return result; +} + +/* ---------------------------------------------------------------------------------------------------- */ + +static guint +polkit_authority_manager_enumerate_groups_async (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + guint call_id; + GSimpleAsyncResult *simple; + + simple = g_simple_async_result_new (G_OBJECT (authority_manager), + callback, + user_data, + polkit_authority_manager_enumerate_groups_async); + + call_id = _polkit_authority_manager_enumerate_groups (authority_manager->real, + EGG_DBUS_CALL_FLAGS_NONE, + cancellable, + generic_async_cb, + simple); + + return call_id; +} + +void +polkit_authority_manager_enumerate_groups (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + polkit_authority_manager_enumerate_groups_async (authority_manager, cancellable, callback, user_data); +} + +GList * +polkit_authority_manager_enumerate_groups_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error) +{ + EggDBusArraySeq *array_seq; + GList *result; + guint n; + GSimpleAsyncResult *simple; + GAsyncResult *real_res; + + simple = G_SIMPLE_ASYNC_RESULT (res); + real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); + + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_manager_enumerate_groups_async); + + result = NULL; + + if (!_polkit_authority_manager_enumerate_groups_finish (authority_manager->real, + &array_seq, + real_res, + error)) + goto out; + + for (n = 0; n < array_seq->size; n++) + { + _PolkitIdentity *real_identity; + + real_identity = array_seq->data.v_ptr[n]; + + result = g_list_prepend (result, polkit_identity_new_for_real (real_identity)); + } + + result = g_list_reverse (result); + + g_object_unref (array_seq); + + out: + g_object_unref (real_res); + return result; +} + +GList * +polkit_authority_manager_enumerate_groups_sync (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GError **error) +{ + guint call_id; + GAsyncResult *res; + GList *result; + + call_id = polkit_authority_manager_enumerate_groups_async (authority_manager, cancellable, generic_cb, &res); + + egg_dbus_connection_pending_call_block (authority_manager->system_bus, call_id); + + result = polkit_authority_manager_enumerate_groups_finish (authority_manager, res, error); + + g_object_unref (res); + + return result; +} + +/* ---------------------------------------------------------------------------------------------------- */ + +static guint +polkit_authority_manager_enumerate_authorizations_async (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + guint call_id; + GSimpleAsyncResult *simple; + _PolkitIdentity *real_identity; + + simple = g_simple_async_result_new (G_OBJECT (authority_manager), + callback, + user_data, + polkit_authority_manager_enumerate_authorizations_async); + + real_identity = polkit_identity_get_real (identity); + + call_id = _polkit_authority_manager_enumerate_authorizations (authority_manager->real, + EGG_DBUS_CALL_FLAGS_NONE, + real_identity, + cancellable, + generic_async_cb, + simple); + + g_object_unref (real_identity); + + return call_id; +} + +void +polkit_authority_manager_enumerate_authorizations (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + polkit_authority_manager_enumerate_authorizations_async (authority_manager, + identity, + cancellable, + callback, + user_data); +} + +GList * +polkit_authority_manager_enumerate_authorizations_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error) +{ + EggDBusArraySeq *array_seq; + GList *result; + guint n; + GSimpleAsyncResult *simple; + GAsyncResult *real_res; + + simple = G_SIMPLE_ASYNC_RESULT (res); + real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); + + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_manager_enumerate_authorizations_async); + + result = NULL; + + if (!_polkit_authority_manager_enumerate_authorizations_finish (authority_manager->real, + &array_seq, + real_res, + error)) + goto out; + + for (n = 0; n < array_seq->size; n++) + { + _PolkitAuthorization *real_authorization; + + real_authorization = array_seq->data.v_ptr[n]; + + result = g_list_prepend (result, polkit_authorization_new_for_real (real_authorization)); + } + + result = g_list_reverse (result); + + g_object_unref (array_seq); + + out: + g_object_unref (real_res); + return result; +} + + +GList * +polkit_authority_manager_enumerate_authorizations_sync (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + GCancellable *cancellable, + GError **error) +{ + guint call_id; + GAsyncResult *res; + GList *result; + + call_id = polkit_authority_manager_enumerate_authorizations_async (authority_manager, + identity, + cancellable, + generic_cb, + &res); + + egg_dbus_connection_pending_call_block (authority_manager->system_bus, call_id); + + result = polkit_authority_manager_enumerate_authorizations_finish (authority_manager, res, error); + + g_object_unref (res); + + return result; +} + +/* ---------------------------------------------------------------------------------------------------- */ + +static guint +polkit_authority_manager_add_authorization_async (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + guint call_id; + GSimpleAsyncResult *simple; + _PolkitAuthorization *real_authorization; + _PolkitIdentity *real_identity; + + simple = g_simple_async_result_new (G_OBJECT (authority_manager), + callback, + user_data, + polkit_authority_manager_add_authorization_async); + + real_identity = polkit_identity_get_real (identity); + real_authorization = polkit_authorization_get_real (authorization); + + call_id = _polkit_authority_manager_add_authorization (authority_manager->real, + EGG_DBUS_CALL_FLAGS_NONE, + real_identity, + real_authorization, + cancellable, + generic_async_cb, + simple); + + g_object_unref (real_authorization); + g_object_unref (real_identity); + + return call_id; +} + +void +polkit_authority_manager_add_authorization (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + polkit_authority_manager_add_authorization_async (authority_manager, + identity, + authorization, + cancellable, + callback, + user_data); +} + +gboolean +polkit_authority_manager_add_authorization_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error) +{ + GSimpleAsyncResult *simple; + GAsyncResult *real_res; + gboolean ret; + + simple = G_SIMPLE_ASYNC_RESULT (res); + real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); + + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_manager_add_authorization_async); + + ret = _polkit_authority_manager_add_authorization_finish (authority_manager->real, + real_res, + error); + + if (!ret) + goto out; + + out: + g_object_unref (real_res); + return ret; +} + + +gboolean +polkit_authority_manager_add_authorization_sync (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GError **error) +{ + guint call_id; + GAsyncResult *res; + gboolean ret; + + call_id = polkit_authority_manager_add_authorization_async (authority_manager, + identity, + authorization, + cancellable, + generic_cb, + &res); + + egg_dbus_connection_pending_call_block (authority_manager->system_bus, call_id); + + ret = polkit_authority_manager_add_authorization_finish (authority_manager, res, error); + + g_object_unref (res); + + return ret; +} + +/* ---------------------------------------------------------------------------------------------------- */ + +static guint +polkit_authority_manager_remove_authorization_async (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + guint call_id; + GSimpleAsyncResult *simple; + _PolkitAuthorization *real_authorization; + _PolkitIdentity *real_identity; + + simple = g_simple_async_result_new (G_OBJECT (authority_manager), + callback, + user_data, + polkit_authority_manager_remove_authorization_async); + + real_identity = polkit_identity_get_real (identity); + real_authorization = polkit_authorization_get_real (authorization); + + call_id = _polkit_authority_manager_remove_authorization (authority_manager->real, + EGG_DBUS_CALL_FLAGS_NONE, + real_identity, + real_authorization, + cancellable, + generic_async_cb, + simple); + + g_object_unref (real_authorization); + g_object_unref (real_identity); + + return call_id; +} + +void +polkit_authority_manager_remove_authorization (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + polkit_authority_manager_remove_authorization_async (authority_manager, + identity, + authorization, + cancellable, + callback, + user_data); +} + +gboolean +polkit_authority_manager_remove_authorization_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error) +{ + GSimpleAsyncResult *simple; + GAsyncResult *real_res; + gboolean ret; + + simple = G_SIMPLE_ASYNC_RESULT (res); + real_res = G_ASYNC_RESULT (g_simple_async_result_get_op_res_gpointer (simple)); + + g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == polkit_authority_manager_remove_authorization_async); + + ret = _polkit_authority_manager_remove_authorization_finish (authority_manager->real, + real_res, + error); + + if (!ret) + goto out; + + out: + g_object_unref (real_res); + return ret; +} + + +gboolean +polkit_authority_manager_remove_authorization_sync (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GError **error) +{ + guint call_id; + GAsyncResult *res; + gboolean ret; + + call_id = polkit_authority_manager_remove_authorization_async (authority_manager, + identity, + authorization, + cancellable, + generic_cb, + &res); + + egg_dbus_connection_pending_call_block (authority_manager->system_bus, call_id); + + ret = polkit_authority_manager_remove_authorization_finish (authority_manager, res, error); + + g_object_unref (res); + + return ret; +} + +/* ---------------------------------------------------------------------------------------------------- */ diff --git a/src/polkit/polkitauthoritymanager.h b/src/polkit/polkitauthoritymanager.h new file mode 100644 index 0000000..36ff1cf --- /dev/null +++ b/src/polkit/polkitauthoritymanager.h @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2008 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + * Author: David Zeuthen + */ + +#ifndef __POLKIT_AUTHORITY_MANAGER_H +#define __POLKIT_AUTHORITY_MANAGER_H + +#include +#include +#include + +G_BEGIN_DECLS + +#define POLKIT_TYPE_AUTHORITY_MANAGER (polkit_authority_manager_get_type()) +#define POLKIT_AUTHORITY_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), POLKIT_TYPE_AUTHORITY_MANAGER, PolkitAuthorityManager)) +#define POLKIT_AUTHORITY_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), POLKIT_TYPE_AUTHORITY_MANAGER, PolkitAuthorityManagerClass)) +#define POLKIT_AUTHORITY_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), POLKIT_TYPE_AUTHORITY_MANAGER, PolkitAuthorityManagerClass)) +#define POLKIT_IS_AUTHORITY_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), POLKIT_TYPE_AUTHORITY_MANAGER)) +#define POLKIT_IS_AUTHORITY_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), POLKIT_TYPE_AUTHORITY_MANAGER)) + +#if 0 +typedef struct _PolkitAuthorityManager PolkitAuthorityManager; +#endif +typedef struct _PolkitAuthorityManagerClass PolkitAuthorityManagerClass; + +GType polkit_authority_manager_get_type (void) G_GNUC_CONST; + +PolkitAuthorityManager *polkit_authority_manager_get (void); + +/* ---------------------------------------------------------------------------------------------------- */ + +GList *polkit_authority_manager_enumerate_users_sync (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GError **error); + +GList *polkit_authority_manager_enumerate_groups_sync (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GError **error); + +GList *polkit_authority_manager_enumerate_authorizations_sync (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + GCancellable *cancellable, + GError **error); + +gboolean polkit_authority_manager_add_authorization_sync (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GError **error); + +gboolean polkit_authority_manager_remove_authorization_sync (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GError **error); + +/* ---------------------------------------------------------------------------------------------------- */ + + +void polkit_authority_manager_enumerate_users (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +GList * polkit_authority_manager_enumerate_users_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error); + +void polkit_authority_manager_enumerate_groups (PolkitAuthorityManager *authority_manager, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +GList * polkit_authority_manager_enumerate_groups_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error); + +void polkit_authority_manager_enumerate_authorizations (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +GList * polkit_authority_manager_enumerate_authorizations_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error); + +void polkit_authority_manager_add_authorization (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +gboolean polkit_authority_manager_add_authorization_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error); + +void polkit_authority_manager_remove_authorization (PolkitAuthorityManager *authority_manager, + PolkitIdentity *identity, + PolkitAuthorization *authorization, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +gboolean polkit_authority_manager_remove_authorization_finish (PolkitAuthorityManager *authority_manager, + GAsyncResult *res, + GError **error); + +/* ---------------------------------------------------------------------------------------------------- */ + +G_END_DECLS + +#endif /* __POLKIT_AUTHORITY_MANAGER_H */ diff --git a/src/polkit/polkittypes.h b/src/polkit/polkittypes.h index 4d6aa28..5da914b 100644 --- a/src/polkit/polkittypes.h +++ b/src/polkit/polkittypes.h @@ -27,6 +27,9 @@ struct _PolkitAuthority; typedef struct _PolkitAuthority PolkitAuthority; +struct _PolkitAuthorityManager; +typedef struct _PolkitAuthorityManager PolkitAuthorityManager; + struct _PolkitActionDescription; typedef struct _PolkitActionDescription PolkitActionDescription; diff --git a/src/polkitbackend/polkitbackendauthority.h b/src/polkitbackend/polkitbackendauthority.h index 70841e5..8a2d959 100644 --- a/src/polkitbackend/polkitbackendauthority.h +++ b/src/polkitbackend/polkitbackendauthority.h @@ -196,7 +196,6 @@ void polkit_backend_authority_unregister_authentication_agent_finish (Polkit void polkit_backend_authority_authentication_agent_response_finish (PolkitBackendPendingCall *pending_call); - G_END_DECLS #endif /* __POLKIT_BACKEND_AUTHORITY_H */ diff --git a/src/polkitbackend/polkitbackendserver.c b/src/polkitbackend/polkitbackendserver.c index 25fb96c..00963a8 100644 --- a/src/polkitbackend/polkitbackendserver.c +++ b/src/polkitbackend/polkitbackendserver.c @@ -60,10 +60,12 @@ struct _PolkitBackendServerClass GObjectClass parent_class; }; -static void authority_iface_init (_PolkitAuthorityIface *authority_iface); +static void authority_iface_init (_PolkitAuthorityIface *authority_iface); +static void authority_manager_iface_init (_PolkitAuthorityManagerIface *authority_manager_iface); G_DEFINE_TYPE_WITH_CODE (PolkitBackendServer, polkit_backend_server, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (_POLKIT_TYPE_AUTHORITY, authority_iface_init) + G_IMPLEMENT_INTERFACE (_POLKIT_TYPE_AUTHORITY_MANAGER, authority_manager_iface_init) ); static void @@ -197,8 +199,8 @@ polkit_backend_authority_enumerate_actions_finish (PolkitBackendPendingCall *pen /* ---------------------------------------------------------------------------------------------------- */ static void -authority_handle_enumerate_users (_PolkitAuthority *instance, - EggDBusMethodInvocation *method_invocation) +authority_manager_handle_enumerate_users (_PolkitAuthorityManager *instance, + EggDBusMethodInvocation *method_invocation) { PolkitBackendServer *server = POLKIT_BACKEND_SERVER (instance); PolkitBackendPendingCall *pending_call; @@ -229,8 +231,8 @@ polkit_backend_authority_enumerate_users_finish (PolkitBackendPendingCall *pendi egg_dbus_array_seq_add (array, real); } - _polkit_authority_handle_enumerate_users_finish (_polkit_backend_pending_call_get_method_invocation (pending_call), - array); + _polkit_authority_manager_handle_enumerate_users_finish (_polkit_backend_pending_call_get_method_invocation (pending_call), + array); g_object_unref (array); @@ -243,8 +245,8 @@ polkit_backend_authority_enumerate_users_finish (PolkitBackendPendingCall *pendi /* ---------------------------------------------------------------------------------------------------- */ static void -authority_handle_enumerate_groups (_PolkitAuthority *instance, - EggDBusMethodInvocation *method_invocation) +authority_manager_handle_enumerate_groups (_PolkitAuthorityManager *instance, + EggDBusMethodInvocation *method_invocation) { PolkitBackendServer *server = POLKIT_BACKEND_SERVER (instance); PolkitBackendPendingCall *pending_call; @@ -275,8 +277,8 @@ polkit_backend_authority_enumerate_groups_finish (PolkitBackendPendingCall *pend egg_dbus_array_seq_add (array, real); } - _polkit_authority_handle_enumerate_groups_finish (_polkit_backend_pending_call_get_method_invocation (pending_call), - array); + _polkit_authority_manager_handle_enumerate_groups_finish (_polkit_backend_pending_call_get_method_invocation (pending_call), + array); g_object_unref (array); @@ -325,9 +327,9 @@ polkit_backend_authority_check_authorization_finish (PolkitBackendPendingCall * /* ---------------------------------------------------------------------------------------------------- */ static void -authority_handle_enumerate_authorizations (_PolkitAuthority *instance, - _PolkitIdentity *real_identity, - EggDBusMethodInvocation *method_invocation) +authority_manager_handle_enumerate_authorizations (_PolkitAuthorityManager *instance, + _PolkitIdentity *real_identity, + EggDBusMethodInvocation *method_invocation) { PolkitBackendServer *server = POLKIT_BACKEND_SERVER (instance); PolkitBackendPendingCall *pending_call; @@ -365,8 +367,8 @@ polkit_backend_authority_enumerate_authorizations_finish (PolkitBackendPendingCa egg_dbus_array_seq_add (array, real); } - _polkit_authority_handle_enumerate_authorizations_finish (_polkit_backend_pending_call_get_method_invocation (pending_call), - array); + _polkit_authority_manager_handle_enumerate_authorizations_finish (_polkit_backend_pending_call_get_method_invocation (pending_call), + array); g_object_unref (array); @@ -379,10 +381,10 @@ polkit_backend_authority_enumerate_authorizations_finish (PolkitBackendPendingCa /* ---------------------------------------------------------------------------------------------------- */ static void -authority_handle_add_authorization (_PolkitAuthority *instance, - _PolkitIdentity *real_identity, - _PolkitAuthorization *real_authorization, - EggDBusMethodInvocation *method_invocation) +authority_manager_handle_add_authorization (_PolkitAuthorityManager *instance, + _PolkitIdentity *real_identity, + _PolkitAuthorization *real_authorization, + EggDBusMethodInvocation *method_invocation) { PolkitBackendServer *server = POLKIT_BACKEND_SERVER (instance); PolkitBackendPendingCall *pending_call; @@ -407,17 +409,17 @@ authority_handle_add_authorization (_PolkitAuthority *instance, void polkit_backend_authority_add_authorization_finish (PolkitBackendPendingCall *pending_call) { - _polkit_authority_handle_add_authorization_finish (_polkit_backend_pending_call_get_method_invocation (pending_call)); + _polkit_authority_manager_handle_add_authorization_finish (_polkit_backend_pending_call_get_method_invocation (pending_call)); g_object_unref (pending_call); } /* ---------------------------------------------------------------------------------------------------- */ static void -authority_handle_remove_authorization (_PolkitAuthority *instance, - _PolkitIdentity *real_identity, - _PolkitAuthorization *real_authorization, - EggDBusMethodInvocation *method_invocation) +authority_manager_handle_remove_authorization (_PolkitAuthorityManager *instance, + _PolkitIdentity *real_identity, + _PolkitAuthorization *real_authorization, + EggDBusMethodInvocation *method_invocation) { PolkitBackendServer *server = POLKIT_BACKEND_SERVER (instance); PolkitBackendPendingCall *pending_call; @@ -442,7 +444,7 @@ authority_handle_remove_authorization (_PolkitAuthority *instance, void polkit_backend_authority_remove_authorization_finish (PolkitBackendPendingCall *pending_call) { - _polkit_authority_handle_remove_authorization_finish (_polkit_backend_pending_call_get_method_invocation (pending_call)); + _polkit_authority_manager_handle_remove_authorization_finish (_polkit_backend_pending_call_get_method_invocation (pending_call)); g_object_unref (pending_call); } @@ -531,13 +533,18 @@ static void authority_iface_init (_PolkitAuthorityIface *authority_iface) { authority_iface->handle_enumerate_actions = authority_handle_enumerate_actions; - authority_iface->handle_enumerate_users = authority_handle_enumerate_users; - authority_iface->handle_enumerate_groups = authority_handle_enumerate_groups; authority_iface->handle_check_authorization = authority_handle_check_authorization; - authority_iface->handle_enumerate_authorizations = authority_handle_enumerate_authorizations; - authority_iface->handle_add_authorization = authority_handle_add_authorization; - authority_iface->handle_remove_authorization = authority_handle_remove_authorization; authority_iface->handle_register_authentication_agent = authority_handle_register_authentication_agent; authority_iface->handle_unregister_authentication_agent = authority_handle_unregister_authentication_agent; authority_iface->handle_authentication_agent_response = authority_handle_authentication_agent_response; } + +static void +authority_manager_iface_init (_PolkitAuthorityManagerIface *authority_manager_iface) +{ + authority_manager_iface->handle_enumerate_users = authority_manager_handle_enumerate_users; + authority_manager_iface->handle_enumerate_groups = authority_manager_handle_enumerate_groups; + authority_manager_iface->handle_enumerate_authorizations = authority_manager_handle_enumerate_authorizations; + authority_manager_iface->handle_add_authorization = authority_manager_handle_add_authorization; + authority_manager_iface->handle_remove_authorization = authority_manager_handle_remove_authorization; +} diff --git a/src/polkitd/main.c b/src/polkitd/main.c index ab43694..9832cda 100644 --- a/src/polkitd/main.c +++ b/src/polkitd/main.c @@ -89,6 +89,8 @@ main (int argc, char **argv) "/org/freedesktop/PolicyKit1/Authority", _POLKIT_TYPE_AUTHORITY, G_OBJECT (authority), + _POLKIT_TYPE_AUTHORITY_MANAGER, + G_OBJECT (authority), G_TYPE_INVALID); g_main_loop_run (loop); diff --git a/src/programs/polkit.c b/src/programs/polkit.c index de46b15..c183909 100644 --- a/src/programs/polkit.c +++ b/src/programs/polkit.c @@ -27,6 +27,7 @@ #include static PolkitAuthority *authority; +static PolkitAuthorityManager *authority_manager; static gboolean opt_list_actions = FALSE; static gboolean opt_list_users = FALSE; @@ -295,6 +296,7 @@ main (int argc, char *argv[]) } authority = polkit_authority_get (); + authority_manager = polkit_authority_manager_get (); if (opt_show_help) { @@ -379,6 +381,9 @@ main (int argc, char *argv[]) if (authority != NULL) g_object_unref (authority); + if (authority_manager != NULL) + g_object_unref (authority_manager); + if (subject != NULL) g_object_unref (subject); @@ -570,9 +575,9 @@ list_users (void) ret = FALSE; error = NULL; - identities = polkit_authority_enumerate_users_sync (authority, - NULL, - &error); + identities = polkit_authority_manager_enumerate_users_sync (authority_manager, + NULL, + &error); if (error != NULL) { g_printerr ("Error enumerating users: %s\n", error->message); @@ -603,9 +608,9 @@ list_groups (void) ret = FALSE; error = NULL; - identities = polkit_authority_enumerate_groups_sync (authority, - NULL, - &error); + identities = polkit_authority_manager_enumerate_groups_sync (authority_manager, + NULL, + &error); if (error != NULL) { g_printerr ("Error enumerating users: %s\n", error->message); @@ -862,10 +867,10 @@ list_explicit_authorizations (void) ret = FALSE; error = NULL; - authorizations = polkit_authority_enumerate_authorizations_sync (authority, - identity, - NULL, - &error); + authorizations = polkit_authority_manager_enumerate_authorizations_sync (authority_manager, + identity, + NULL, + &error); if (error != NULL) { g_printerr ("Error enumerating authorizations: %s\n", error->message); @@ -928,11 +933,11 @@ do_grant (void) subject, FALSE); /* TODO: handle negative */ - if (!polkit_authority_add_authorization_sync (authority, - identity, - authorization, - NULL, - &error)) + if (!polkit_authority_manager_add_authorization_sync (authority_manager, + identity, + authorization, + NULL, + &error)) { g_printerr ("Error adding authorization: %s\n", error->message); g_error_free (error); @@ -964,11 +969,11 @@ do_revoke (void) subject, FALSE); /* TODO: handle negative */ - if (!polkit_authority_remove_authorization_sync (authority, - identity, - authorization, - NULL, - &error)) + if (!polkit_authority_manager_remove_authorization_sync (authority_manager, + identity, + authorization, + NULL, + &error)) { g_printerr ("Error removing authorization: %s\n", error->message); g_error_free (error);