summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2009-05-19 12:08:12 -0400
committerDavid Zeuthen <davidz@redhat.com>2009-05-19 12:08:12 -0400
commit028e1aa51e4df5655f7cf57824dcc5f20823e19f (patch)
tree966515de3769844516624a08662042d1b139e23e /src
parent6bc9c8ff48fc4f7f9cbea8e4bfbe5a182852adf9 (diff)
downloadpolkit-028e1aa51e4df5655f7cf57824dcc5f20823e19f.tar.gz
Use an object, not a GHashTable when passing details around
This is because bindable GObject APIs should never return or accept a GHashTable, see http://bugzilla.gnome.org/show_bug.cgi?id=581686#c6 for details.
Diffstat (limited to 'src')
-rw-r--r--src/polkit/Makefile.am4
-rw-r--r--src/polkit/polkit.h1
-rw-r--r--src/polkit/polkitauthority.c17
-rw-r--r--src/polkit/polkitauthority.h4
-rw-r--r--src/polkit/polkitauthorizationresult.c29
-rw-r--r--src/polkit/polkitauthorizationresult.h4
-rw-r--r--src/polkit/polkitprivate.h4
-rw-r--r--src/polkit/polkittypes.h3
-rw-r--r--src/polkitagent/polkitagentlistener.c10
-rw-r--r--src/polkitagent/polkitagentlistener.h4
-rw-r--r--src/polkitbackend/polkitbackendactionlookup.c18
-rw-r--r--src/polkitbackend/polkitbackendactionlookup.h50
-rw-r--r--src/polkitbackend/polkitbackendauthority.c8
-rw-r--r--src/polkitbackend/polkitbackendauthority.h4
-rw-r--r--src/polkitbackend/polkitbackendlocalauthority.c30
-rw-r--r--src/programs/pkexec-action-lookup.c34
-rw-r--r--src/programs/pkexec.c16
17 files changed, 138 insertions, 102 deletions
diff --git a/src/polkit/Makefile.am b/src/polkit/Makefile.am
index 7bd8acf..0b06e5f 100644
--- a/src/polkit/Makefile.am
+++ b/src/polkit/Makefile.am
@@ -45,6 +45,7 @@ libpolkit_gobject_1include_HEADERS = \
polkitprivate.h \
polkittypes.h \
polkitactiondescription.h \
+ polkitdetails.h \
polkitauthority.h \
polkitauthoritymanager.h \
polkiterror.h \
@@ -63,9 +64,10 @@ libpolkit_gobject_1include_HEADERS = \
libpolkit_gobject_1_la_SOURCES = \
$(BUILT_SOURCES) \
- $(polkit_built_sources) \
+ $(polkit_built_sources) \
polkit.h \
polkitactiondescription.c polkitactiondescription.h \
+ polkitdetails.c polkitdetails.h \
polkitauthority.c polkitauthority.h \
polkitauthoritymanager.c polkitauthoritymanager.h \
polkiterror.c polkiterror.h \
diff --git a/src/polkit/polkit.h b/src/polkit/polkit.h
index 6baccb5..29b27c5 100644
--- a/src/polkit/polkit.h
+++ b/src/polkit/polkit.h
@@ -39,6 +39,7 @@
#include <polkit/polkitauthority.h>
#include <polkit/polkitauthoritymanager.h>
#include <polkit/polkitauthorization.h>
+#include <polkit/polkitdetails.h>
#undef _POLKIT_INSIDE_POLKIT_H
diff --git a/src/polkit/polkitauthority.c b/src/polkit/polkitauthority.c
index 82c9d91..0ca8fd9 100644
--- a/src/polkit/polkitauthority.c
+++ b/src/polkit/polkitauthority.c
@@ -330,7 +330,7 @@ static guint
polkit_authority_check_authorization_async (PolkitAuthority *authority,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -360,13 +360,18 @@ polkit_authority_check_authorization_async (PolkitAuthority *autho
G_TYPE_STRING, NULL);
if (details != NULL)
{
+ GHashTable *hash;
GHashTableIter iter;
const gchar *key;
const gchar *value;
- g_hash_table_iter_init (&iter, details);
- while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value))
- egg_dbus_hash_map_insert (real_details, key, value);
+ hash = polkit_details_get_hash (details);
+ if (hash != NULL)
+ {
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value))
+ egg_dbus_hash_map_insert (real_details, key, value);
+ }
}
call_id = _polkit_authority_check_authorization (authority->real,
@@ -407,7 +412,7 @@ void
polkit_authority_check_authorization (PolkitAuthority *authority,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -535,7 +540,7 @@ PolkitAuthorizationResult *
polkit_authority_check_authorization_sync (PolkitAuthority *authority,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GError **error)
diff --git a/src/polkit/polkitauthority.h b/src/polkit/polkitauthority.h
index 642c400..e9df6d0 100644
--- a/src/polkit/polkitauthority.h
+++ b/src/polkit/polkitauthority.h
@@ -65,7 +65,7 @@ GList *polkit_authority_enumerate_groups_sync (PolkitAuthori
PolkitAuthorizationResult *polkit_authority_check_authorization_sync (PolkitAuthority *authority,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GError **error);
@@ -103,7 +103,7 @@ GList * polkit_authority_enumerate_actions_finish (PolkitAuth
void polkit_authority_check_authorization (PolkitAuthority *authority,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
diff --git a/src/polkit/polkitauthorizationresult.c b/src/polkit/polkitauthorizationresult.c
index 314c39f..e9961c0 100644
--- a/src/polkit/polkitauthorizationresult.c
+++ b/src/polkit/polkitauthorizationresult.c
@@ -40,6 +40,8 @@ struct _PolkitAuthorizationResult
GObject parent_instance;
_PolkitAuthorizationResult *real;
+
+ PolkitDetails *details;
};
struct _PolkitAuthorizationResultClass
@@ -62,6 +64,8 @@ polkit_authorization_result_finalize (GObject *object)
authorization_result = POLKIT_AUTHORIZATION_RESULT (object);
g_object_unref (authorization_result->real);
+ if (authorization_result->details != NULL)
+ g_object_unref (authorization_result->details);
if (G_OBJECT_CLASS (polkit_authorization_result_parent_class)->finalize != NULL)
G_OBJECT_CLASS (polkit_authorization_result_parent_class)->finalize (object);
@@ -108,7 +112,7 @@ polkit_authorization_result_get_real (PolkitAuthorizationResult *authorization_
PolkitAuthorizationResult *
polkit_authorization_result_new (gboolean is_authorized,
gboolean is_challenge,
- GHashTable *details)
+ PolkitDetails *details)
{
PolkitAuthorizationResult *authorization_result;
_PolkitAuthorizationResult *real;
@@ -117,13 +121,18 @@ polkit_authorization_result_new (gboolean is_authorized,
real_details = egg_dbus_hash_map_new (G_TYPE_STRING, g_free, G_TYPE_STRING, g_free);
if (details != NULL)
{
+ GHashTable *hash;
GHashTableIter iter;
gpointer key, value;
- g_hash_table_iter_init (&iter, details);
- while (g_hash_table_iter_next (&iter, &key, &value))
+ hash = polkit_details_get_hash (details);
+ if (hash != NULL)
{
- egg_dbus_hash_map_insert (real_details, g_strdup (key), g_strdup (value));
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ egg_dbus_hash_map_insert (real_details, g_strdup (key), g_strdup (value));
+ }
}
}
@@ -173,14 +182,18 @@ polkit_authorization_result_get_is_challenge (PolkitAuthorizationResult *result)
*
* Returns:
**/
-GHashTable *
+PolkitDetails *
polkit_authorization_result_get_details (PolkitAuthorizationResult *result)
{
EggDBusHashMap *real_details;
+ if (result->details != NULL)
+ goto out;
+
real_details = _polkit_authorization_result_get_details (result->real);
if (real_details != NULL)
- return real_details->data;
- else
- return NULL;
+ result->details = result->details = polkit_details_new_for_hash (real_details->data);
+
+ out:
+ return result->details;
}
diff --git a/src/polkit/polkitauthorizationresult.h b/src/polkit/polkitauthorizationresult.h
index 69bec13..40db4f6 100644
--- a/src/polkit/polkitauthorizationresult.h
+++ b/src/polkit/polkitauthorizationresult.h
@@ -46,10 +46,10 @@ typedef struct _PolkitAuthorizationResultClass PolkitAuthorizationResultClass;
GType polkit_authorization_result_get_type (void) G_GNUC_CONST;
PolkitAuthorizationResult *polkit_authorization_result_new (gboolean is_authorized,
gboolean is_challenge,
- GHashTable *details);
+ PolkitDetails *details);
gboolean polkit_authorization_result_get_is_authorized (PolkitAuthorizationResult *result);
gboolean polkit_authorization_result_get_is_challenge (PolkitAuthorizationResult *result);
-GHashTable *polkit_authorization_result_get_details (PolkitAuthorizationResult *result);
+PolkitDetails *polkit_authorization_result_get_details (PolkitAuthorizationResult *result);
/* ---------------------------------------------------------------------------------------------------- */
diff --git a/src/polkit/polkitprivate.h b/src/polkit/polkitprivate.h
index 64954f0..5a8b951 100644
--- a/src/polkit/polkitprivate.h
+++ b/src/polkit/polkitprivate.h
@@ -50,4 +50,8 @@ _PolkitAuthorization *polkit_authorization_get_real (PolkitAuthorization *a
PolkitAuthorizationResult *polkit_authorization_result_new_for_real (_PolkitAuthorizationResult *real);
_PolkitAuthorizationResult *polkit_authorization_result_get_real (PolkitAuthorizationResult *authorization_result);
+
+PolkitDetails *polkit_details_new_for_hash (GHashTable *hash);
+GHashTable *polkit_details_get_hash (PolkitDetails *details);
+
#endif /* __POLKIT_PRIVATE_H */
diff --git a/src/polkit/polkittypes.h b/src/polkit/polkittypes.h
index 47e1f21..4344262 100644
--- a/src/polkit/polkittypes.h
+++ b/src/polkit/polkittypes.h
@@ -58,4 +58,7 @@ typedef struct _PolkitAuthorization PolkitAuthorization;
struct _PolkitAuthorizationResult;
typedef struct _PolkitAuthorizationResult PolkitAuthorizationResult;
+struct _PolkitDetails;
+typedef struct _PolkitDetails PolkitDetails;
+
#endif /* __POLKIT_TYPES_H */
diff --git a/src/polkitagent/polkitagentlistener.c b/src/polkitagent/polkitagentlistener.c
index fb59b68..0251ed4 100644
--- a/src/polkitagent/polkitagentlistener.c
+++ b/src/polkitagent/polkitagentlistener.c
@@ -371,6 +371,7 @@ handle_begin_authentication (_PolkitAuthenticationAgent *instance,
GList *list;
guint n;
GCancellable *cancellable;
+ PolkitDetails *_details;
list = NULL;
for (n = 0; n < identities->size; n++)
@@ -391,11 +392,13 @@ handle_begin_authentication (_PolkitAuthenticationAgent *instance,
g_hash_table_insert (server->cookie_to_pending_auth, (gpointer) cookie, data);
+ _details = polkit_details_new_for_hash (details->data);
+
polkit_agent_listener_initiate_authentication (server->listener,
action_id,
message,
icon_name,
- details->data,
+ _details,
cookie,
list,
data->cancellable,
@@ -403,6 +406,7 @@ handle_begin_authentication (_PolkitAuthenticationAgent *instance,
data);
g_list_free (list);
+ g_object_unref (_details);
}
static void
@@ -456,7 +460,7 @@ polkit_agent_listener_class_init (PolkitAgentListenerClass *klass)
* @action_id: The action to authenticate for.
* @message: The message to present to the user.
* @icon_name: A themed icon name representing the action or %NULL.
- * @details: A set of key/value string pairs describing the action.
+ * @details: Details describing the action.
* @cookie: The cookie for the authentication request.
* @identities: A list of #PolkitIdentity objects that the user can choose to authenticate as.
* @cancellable: A #GCancellable.
@@ -479,7 +483,7 @@ polkit_agent_listener_initiate_authentication (PolkitAgentListener *listener,
const gchar *action_id,
const gchar *message,
const gchar *icon_name,
- GHashTable *details,
+ PolkitDetails *details,
const gchar *cookie,
GList *identities,
GCancellable *cancellable,
diff --git a/src/polkitagent/polkitagentlistener.h b/src/polkitagent/polkitagentlistener.h
index 9324b92..0f0b295 100644
--- a/src/polkitagent/polkitagentlistener.h
+++ b/src/polkitagent/polkitagentlistener.h
@@ -69,7 +69,7 @@ struct _PolkitAgentListenerClass
const gchar *action_id,
const gchar *message,
const gchar *icon_name,
- GHashTable *details,
+ PolkitDetails *details,
const gchar *cookie,
GList *identities,
GCancellable *cancellable,
@@ -97,7 +97,7 @@ void polkit_agent_listener_initiate_authentication (PolkitAgentList
const gchar *action_id,
const gchar *message,
const gchar *icon_name,
- GHashTable *details,
+ PolkitDetails *details,
const gchar *cookie,
GList *identities,
GCancellable *cancellable,
diff --git a/src/polkitbackend/polkitbackendactionlookup.c b/src/polkitbackend/polkitbackendactionlookup.c
index 64c43a9..dcc972a 100644
--- a/src/polkitbackend/polkitbackendactionlookup.c
+++ b/src/polkitbackend/polkitbackendactionlookup.c
@@ -49,10 +49,10 @@
* e.g. messages that include more information than just the action
* name.
*
- * Code implementing this interface <emphasis>cannot</emphasis>
- * block or do any IO when methods are invoked. If information is
- * needed to format the message or details, prepare it in advance and
- * pass it as part of the @details hash table when doing the
+ * Code implementing this interface <emphasis>cannot</emphasis> block
+ * or do any IO when methods are invoked. If information is needed to
+ * format the message or details, prepare it in advance and pass it as
+ * part of the @details object when doing the
* polkit_authority_check_authorization() call. Then the code in this
* interface can use that information to return localized data.
*
@@ -112,7 +112,7 @@ polkit_backend_action_lookup_get_type (void)
gchar *
polkit_backend_action_lookup_get_message (PolkitBackendActionLookup *lookup,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitActionDescription *action_description)
{
PolkitBackendActionLookupIface *iface = POLKIT_BACKEND_ACTION_LOOKUP_GET_IFACE (lookup);
@@ -138,7 +138,7 @@ polkit_backend_action_lookup_get_message (PolkitBackendActionLookup *lookup,
gchar *
polkit_backend_action_lookup_get_icon_name (PolkitBackendActionLookup *lookup,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitActionDescription *action_description)
{
PolkitBackendActionLookupIface *iface = POLKIT_BACKEND_ACTION_LOOKUP_GET_IFACE (lookup);
@@ -159,12 +159,12 @@ polkit_backend_action_lookup_get_icon_name (PolkitBackendActionLookup *lookup,
* Computes localized details to show in an authentication dialog for
* @action_id and @details.
*
- * Returns: A #GHashTable with localized details or %NULL. Caller must free the result.
+ * Returns: A #PolkitDetails object with localized details or %NULL. Caller must free the result.
**/
-GHashTable *
+PolkitDetails *
polkit_backend_action_lookup_get_details (PolkitBackendActionLookup *lookup,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitActionDescription *action_description)
{
PolkitBackendActionLookupIface *iface = POLKIT_BACKEND_ACTION_LOOKUP_GET_IFACE (lookup);
diff --git a/src/polkitbackend/polkitbackendactionlookup.h b/src/polkitbackend/polkitbackendactionlookup.h
index bb93c17..8389a55 100644
--- a/src/polkitbackend/polkitbackendactionlookup.h
+++ b/src/polkitbackend/polkitbackendactionlookup.h
@@ -70,35 +70,35 @@ struct _PolkitBackendActionLookupIface
/*< public >*/
/* VTable */
- gchar * (*get_message) (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_description);
+ gchar * (*get_message) (PolkitBackendActionLookup *lookup,
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_description);
- gchar * (*get_icon_name) (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_description);
+ gchar * (*get_icon_name) (PolkitBackendActionLookup *lookup,
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_description);
- GHashTable * (*get_details) (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_description);
+ PolkitDetails * (*get_details) (PolkitBackendActionLookup *lookup,
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_description);
};
-GType polkit_backend_action_lookup_get_type (void) G_GNUC_CONST;
-gchar *polkit_backend_action_lookup_get_message (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_description);
-gchar *polkit_backend_action_lookup_get_icon_name (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_description);
-GHashTable *polkit_backend_action_lookup_get_details (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_description);
+GType polkit_backend_action_lookup_get_type (void) G_GNUC_CONST;
+gchar *polkit_backend_action_lookup_get_message (PolkitBackendActionLookup *lookup,
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_description);
+gchar *polkit_backend_action_lookup_get_icon_name (PolkitBackendActionLookup *lookup,
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_description);
+PolkitDetails *polkit_backend_action_lookup_get_details (PolkitBackendActionLookup *lookup,
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_description);
G_END_DECLS
diff --git a/src/polkitbackend/polkitbackendauthority.c b/src/polkitbackend/polkitbackendauthority.c
index e0f3a8e..63f252d 100644
--- a/src/polkitbackend/polkitbackendauthority.c
+++ b/src/polkitbackend/polkitbackendauthority.c
@@ -222,7 +222,7 @@ polkit_backend_authority_check_authorization (PolkitBackendAuthority *aut
PolkitSubject *caller,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -830,14 +830,14 @@ authority_handle_check_authorization (_PolkitAuthority *instance,
PolkitSubject *subject;
PolkitSubject *caller;
GCancellable *cancellable;
- GHashTable *details;
+ PolkitDetails *details;
caller_name = egg_dbus_method_invocation_get_caller (method_invocation);
caller = polkit_system_bus_name_new (caller_name);
subject = polkit_subject_new_for_real (real_subject);
- details = real_details->data;
+ details = polkit_details_new_for_hash (real_details->data);
g_object_set_data_full (G_OBJECT (method_invocation), "caller", caller, (GDestroyNotify) g_object_unref);
g_object_set_data_full (G_OBJECT (method_invocation), "subject", subject, (GDestroyNotify) g_object_unref);
@@ -881,7 +881,7 @@ authority_handle_check_authorization (_PolkitAuthority *instance,
check_auth_cb,
method_invocation);
out:
- ;
+ g_object_unref (details);
}
static void
diff --git a/src/polkitbackend/polkitbackendauthority.h b/src/polkitbackend/polkitbackendauthority.h
index 9b4acfe..1077aad 100644
--- a/src/polkitbackend/polkitbackendauthority.h
+++ b/src/polkitbackend/polkitbackendauthority.h
@@ -123,7 +123,7 @@ struct _PolkitBackendAuthorityClass
PolkitSubject *caller,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -221,7 +221,7 @@ void polkit_backend_authority_check_authorization (PolkitBackendAuthor
PolkitSubject *caller,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
diff --git a/src/polkitbackend/polkitbackendlocalauthority.c b/src/polkitbackend/polkitbackendlocalauthority.c
index 98e5dd6..4c98aa6 100644
--- a/src/polkitbackend/polkitbackendlocalauthority.c
+++ b/src/polkitbackend/polkitbackendlocalauthority.c
@@ -94,7 +94,7 @@ static void authentication_agent_initiate_challenge (Authenticati
PolkitIdentity *user_of_subject,
PolkitBackendLocalAuthority *authority,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitSubject *caller,
PolkitImplicitAuthorization implicit_authorization,
GCancellable *cancellable,
@@ -167,7 +167,7 @@ static void polkit_backend_local_authority_check_authorization (PolkitBackendAut
PolkitSubject *caller,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -540,7 +540,7 @@ polkit_backend_local_authority_check_authorization (PolkitBackendAuthority
PolkitSubject *caller,
PolkitSubject *subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitCheckAuthorizationFlags flags,
GCancellable *cancellable,
GAsyncReadyCallback callback,
@@ -1546,7 +1546,7 @@ get_localized_data_for_challenge (PolkitBackendLocalAuthority *authority,
PolkitSubject *subject,
PolkitIdentity *user_of_subject,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
const gchar *locale,
gchar **out_localized_message,
gchar **out_localized_icon_name,
@@ -1554,14 +1554,11 @@ get_localized_data_for_challenge (PolkitBackendLocalAuthority *authority,
{
PolkitBackendLocalAuthorityPrivate *priv;
PolkitActionDescription *action_desc;
- GHashTableIter iter;
- const gchar *key;
- const gchar *value;
GList *action_lookup_list;
GList *l;
gchar *message;
gchar *icon_name;
- GHashTable *localized_details;
+ PolkitDetails *localized_details;
priv = POLKIT_BACKEND_LOCAL_AUTHORITY_GET_PRIVATE (authority);
@@ -1639,10 +1636,19 @@ get_localized_data_for_challenge (PolkitBackendLocalAuthority *authority,
if (localized_details != NULL)
{
- g_hash_table_iter_init (&iter, localized_details);
- while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value))
+ GHashTable *hash;
+ GHashTableIter iter;
+ const gchar *key;
+ const gchar *value;
+
+ hash = polkit_details_get_hash (localized_details);
+ if (hash != NULL)
{
- egg_dbus_hash_map_insert (*out_localized_details, key, value);
+ g_hash_table_iter_init (&iter, hash);
+ while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value))
+ {
+ egg_dbus_hash_map_insert (*out_localized_details, key, value);
+ }
}
}
@@ -1663,7 +1669,7 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent,
PolkitIdentity *user_of_subject,
PolkitBackendLocalAuthority *authority,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitSubject *caller,
PolkitImplicitAuthorization implicit_authorization,
GCancellable *cancellable,
diff --git a/src/programs/pkexec-action-lookup.c b/src/programs/pkexec-action-lookup.c
index 4095c13..75ef8a9 100644
--- a/src/programs/pkexec-action-lookup.c
+++ b/src/programs/pkexec-action-lookup.c
@@ -84,7 +84,7 @@ polkit_exec_action_lookup_class_init (PolkitExecActionLookupClass *klass)
static gchar *
polkit_exec_action_lookup_get_message (PolkitBackendActionLookup *lookup,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitActionDescription *action_description)
{
gchar *ret;
@@ -96,11 +96,11 @@ polkit_exec_action_lookup_get_message (PolkitBackendActionLookup *lookup,
if (g_strcmp0 (action_id, "org.freedesktop.policykit.exec") != 0)
goto out;
- s = g_hash_table_lookup (details, "program");
+ s = polkit_details_lookup (details, "program");
if (s == NULL)
goto out;
- s2 = g_hash_table_lookup (details, "uid");
+ s2 = polkit_details_lookup (details, "uid");
if (s2 == NULL)
goto out;
@@ -122,7 +122,7 @@ polkit_exec_action_lookup_get_message (PolkitBackendActionLookup *lookup,
static gchar *
polkit_exec_action_lookup_get_icon_name (PolkitBackendActionLookup *lookup,
const gchar *action_id,
- GHashTable *details,
+ PolkitDetails *details,
PolkitActionDescription *action_description)
{
gchar *ret;
@@ -134,15 +134,15 @@ polkit_exec_action_lookup_get_icon_name (PolkitBackendActionLookup *lookup,
return ret;
}
-static GHashTable *
+static PolkitDetails *
polkit_exec_action_lookup_get_details (PolkitBackendActionLookup *lookup,
- const gchar *action_id,
- GHashTable *details,
- PolkitActionDescription *action_desc)
+ const gchar *action_id,
+ PolkitDetails *details,
+ PolkitActionDescription *action_desc)
{
const gchar *s;
const gchar *s2;
- GHashTable *ret;
+ PolkitDetails *ret;
ret = NULL;
@@ -151,25 +151,21 @@ polkit_exec_action_lookup_get_details (PolkitBackendActionLookup *lookup,
polkit_action_description_get_annotation (action_desc, "org.freedesktop.policykit.exec.path") != NULL)))
goto out;
- ret = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
+ ret = polkit_details_new ();
- s = g_hash_table_lookup (details, "command-line");
+ s = polkit_details_lookup (details, "command-line");
if (s != NULL)
{
- g_hash_table_insert (ret,
- _("Command"),
- g_strdup (s));
+ polkit_details_insert (ret, _("Command"), s);
}
- s = g_hash_table_lookup (details, "user");
- s2 = g_hash_table_lookup (details, "uid");
+ s = polkit_details_lookup (details, "user");
+ s2 = polkit_details_lookup (details, "uid");
if (s != NULL)
{
if (g_strcmp0 (s2, "0") == 0)
s = _("Super User (root)");
- g_hash_table_insert (ret,
- _("Run As"),
- g_strdup (s));
+ polkit_details_insert (ret, _("Run As"), s);
}
out:
diff --git a/src/programs/pkexec.c b/src/programs/pkexec.c
index 86f70a5..10329dd 100644
--- a/src/programs/pkexec.c
+++ b/src/programs/pkexec.c
@@ -115,7 +115,7 @@ main (int argc, char *argv[])
PolkitAuthority *authority;
PolkitAuthorizationResult *result;
PolkitSubject *subject;
- GHashTable *details;
+ PolkitDetails *details;
GError *error;
gchar *action_id;
gchar *command_line;
@@ -319,14 +319,16 @@ main (int argc, char *argv[])
authority = polkit_authority_get ();
subject = polkit_unix_process_new (pid_of_caller);
- details = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
+ details = polkit_details_new ();
- g_hash_table_insert (details, "command-line", g_strdup (command_line));
+ polkit_details_insert (details, "command-line", command_line);
s = g_strdup_printf ("%s (%s)", pw->pw_gecos, pw->pw_name);
- g_hash_table_insert (details, "user", s);
+ polkit_details_insert (details, "user", s);
+ g_free (s);
s = g_strdup_printf ("%d", (gint) pw->pw_uid);
- g_hash_table_insert (details, "uid", s);
- g_hash_table_insert (details, "program", g_strdup (path));
+ polkit_details_insert (details, "uid", s);
+ g_free (s);
+ polkit_details_insert (details, "program", path);
action_id = find_action_for_path (authority, path);
g_assert (action_id != NULL);
@@ -450,7 +452,7 @@ main (int argc, char *argv[])
g_free (action_id);
if (details != NULL)
- g_hash_table_unref (details);
+ g_object_unref (details);
if (subject != NULL)
g_object_unref (subject);